Webアプリケーションから見たCassandra

4,915 views

Published on

0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,915
On SlideShare
0
From Embeds
0
Number of Embeds
440
Actions
Shares
0
Downloads
46
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide
  • 専門的な設定は時間が余ったら話す。 Twitter とかで聞いて貰っても良い。
  • Hbase, Cassandra, sharding MySQL + Memcached が候補
  • 1 秒 4 通弱 大体 3 ヶ月で 2 倍
  • レプリカの範囲内で落ちたのが一台ならアクセスできる。だから 18 台中 6 台を落としても動く。
  • Webアプリケーションから見たCassandra

    1. 1. Web アプリケーションから見た Cassandra ワークスアプリケーションズ 堤 勇人
    2. 2. 自己紹介 <ul><li>堤 勇人 </li></ul><ul><li>ワークスアプリケーションズ ATE 本部 Webmail </li></ul><ul><li>主に DB 周りやバッチ処理、 最近では Cassandra 担当 </li></ul><ul><li>twitter : 2t3 </li></ul>
    3. 3. 今日話すこと <ul><li>基本: </li></ul><ul><li>Cassandra を検討する際の一助となる </li></ul><ul><li>内容: </li></ul><ul><li>Cassandra を使ったプロジェクト、 Webmail の説明 </li></ul><ul><li>何故 Cassandra を使ったか </li></ul><ul><li>Cassandra の使い方 </li></ul>
    4. 4. Webmail とは? <ul><li>ワークスアプリケーションズが 2010 年 4 月に 開始したプロジェクト </li></ul><ul><li>バックエンドは基本的に Cassandra のみ </li></ul><ul><li>Amazon EC2 上で動作中 </li></ul><ul><li>Cassandra を含め、全て OSS を利用 </li></ul><ul><li>メールデコード等、有用な物は OSS として 公開予定 </li></ul>
    5. 5. Webmail とは? こんな画面
    6. 6. バックエンドに要求されるスペック <ul><li>TB 単位のデータに 500ms 以下でアクセス </li></ul><ul><li>ACID( 原子性、一貫性、独立性、永続性 ) を満たす </li></ul><ul><li>常に Read/Write ができる </li></ul><ul><li>スモールスタート、スケーリングが可能 </li></ul>
    7. 7. 候補は色々 <ul><li>SQL: Oracle, DB2, MySQL,etc... </li></ul><ul><li>NoSQL: HBase, Voldemort, MongoDB, MemcacheDB, Cassandra, etc... </li></ul>
    8. 8. 判断 <ul><li>要求を完全に満たす DB は、 現状存在しない </li></ul><ul><li>スケーリングと常時アクセスを重視すると、 有力なのが Cassandra </li></ul>
    9. 9. Cassandra のできること <ul><li>保存したデータがちゃんと返ってくる </li></ul><ul><li>一台落ちても、アクセスが阻害されない </li></ul><ul><li>動かしたままバージョンアップが可能 </li></ul><ul><li>最低三台から始めて、必要な分だけ 追加できる </li></ul>
    10. 10. Cassandra の設定 <ul><li>強い一貫性を持たせて運用する </li></ul><ul><li>レプリカを 3 台に </li></ul><ul><li>Read/Write を QUORUM で行う </li></ul>Write Read
    11. 11. 使ってみた軌跡
    12. 12. スケールの変化 <ul><li>最初期 (2010/4) </li></ul><ul><li>150GB </li></ul><ul><li>c1.medium × 3 </li></ul><ul><li>181$ </li></ul><ul><li>現在 (2011/10) </li></ul><ul><li>13,000GB </li></ul><ul><li>m1.large × 18 </li></ul><ul><li>7,326$ </li></ul><ul><li>1 日 30 万通程度 </li></ul>
    13. 13. かかる費用 <ul><li>EC2 での値を出すと、 </li></ul><ul><li>運用、バックアップが取りやすい形式なら 500$/TB ・月 </li></ul><ul><li>なるべく安く頑張るなら 350$/TB ・月 </li></ul>
    14. 14. まとめ <ul><li>実際に Web アプリケーションのバックエンドとして Cassandra を使うことは可能 </li></ul><ul><li>高可用性や、一貫性と遅延をトレードオフできる柔軟性などは、これまで不可能だった要求を満たせる可能性がある </li></ul><ul><li>特にスケーリングは RDB で苦労していた 部分がとても楽になる </li></ul>
    15. 15. まとめ <ul><li>以下のどれかに該当する新規プロジェクト </li></ul><ul><li>なら、 Cassandra を検討に入れてよい </li></ul><ul><li>TB 単位のデータを扱う </li></ul><ul><li>小さなデータからスモールスタートする </li></ul><ul><li>システムを無停止で運用する </li></ul>
    16. 16. 以上、ありがとうございました <ul><li>質問があればこちらまで </li></ul><ul><li>twitter : 2t3 </li></ul>
    17. 17. Cassandra の障害対策 <ul><li>一台落ちても、アクセスできる </li></ul><ul><li>じゃあレプリカが二台落ちたら? </li></ul>appendix Write Read
    18. 18. Cassandra の障害対策 <ul><li>一貫性を落として 残りの 1 台でやりくりします </li></ul><ul><li>じゃあ 3 台落ちたら? </li></ul>appendix Write Read
    19. 19. Cassandra の障害対策 <ul><li>バックアップを直接読みます </li></ul>appendix Read
    20. 20. Cassandra の設定プロファイル <ul><li>Web アプリケーションのバックエンドのような </li></ul><ul><li>強い一貫性が必要な場合 </li></ul><ul><li>レプリカ 3 台 </li></ul><ul><li>Read/Write を QUORUM で行う </li></ul><ul><li>では他の場合は? </li></ul>appendix 2
    21. 21. Cassandra の設定プロファイル <ul><li>ロギングなど、データの書き込み速度を </li></ul><ul><li>重視する場合 </li></ul><ul><li>レプリカ 2~3 台 </li></ul><ul><li>Write を ONE で行う </li></ul><ul><li>Read の前に flush や repair を行う </li></ul>appendix 2
    22. 22. Cassandra の設定プロファイル <ul><li>検索 index など、定期的なデータ作成と </li></ul><ul><li>その頻繁な読み出しを行う場合 </li></ul><ul><li>レプリカ 1 台 </li></ul><ul><li>Read を ONE で行う </li></ul><ul><li>Write は ALL で行うが、ノードのダウン時 には回復を待っても良い </li></ul>appendix 2
    23. 23. Cassandra の O/R マッパー <ul><li>Cassandra は Column の自由度が高いのでデータ構造がややこしくなりがち </li></ul><ul><li>Thrift の API もちょっと煩雑 </li></ul><ul><li>CQL でも基本同じ </li></ul><ul><li>なので O/R マッパーを実装しました </li></ul>appendix 3
    24. 24. Cassandra の O/R マッパー <ul><li>オブジェクトでやりとり </li></ul>appendix 3 Mail mail = kvs.get(“tsutsumi201110051650”, Mail.class); mail.subject = “test”; kvs.insert(mail); List<Mail> mails = kvs.search(“tsutsumi”, Mail.class); kvs.delete(mails);
    25. 25. Cassandra の O/R マッパー <ul><li>アノテーションで管理 </li></ul>appendix 3 @Entity public class Mail { @Key public String emailId; @Family public String subject; }
    26. 26. Cassandra の O/R マッパー <ul><li>カウンターも実装 </li></ul>appendix 3 @Entity public class MailFolder { @Key public String folderId; @Family public String name; @Counter public long unreadCount; }
    27. 27. Cassandra の O/R マッパー <ul><li>詳細は ASCII.technologies の 連載に書きました </li></ul><ul><li>2011 年 1 月号 </li></ul><ul><li>休刊なので見つからない と思います </li></ul>appendix 3
    28. 28. Cassandra の O/R マッパー <ul><li>OSS として公開予定 </li></ul>appendix 3
    29. 29. おわり <ul><li>質問があればこちらまで </li></ul><ul><li>twitter : 2t3 </li></ul>

    ×