22. Delta Encoding
• SSTableヘッダにminTimestampを格納する
• Timestampを、絶対時刻からminTimestamp
からの相対時刻表現に変更する
• VarIntと合わせてデータ量が削減
22
SSTable
Partition: part_a
minTimestamp: t1
Row: cluster_a
some
foo
varint(t2 - t1)
and bar varint(t2 - t1)
no baz varint(t3 - t1)
23. Aggregated Cell Metadata
• RowレベルのTimestampを導入
• CellレベルのTimestampがRowレベルと同じ
場合は省略する
23
SSTable
Partition: part_a
Row: cluster_a
some
foo
and bar
no baz t3
timestamp: t2
36. 36
概要
• 運用、チューニング、利用事例に関連するセッションを中心に参
加
• 下記のセッションを紹介します
• Tuning Speculative Retries to Fight Latency, Netflix
• C* Capacity - Planning and Forecasting at scale, Netflix
• How we built user specific search using C* without Solr, Sony
• Always On: Building Highly Available Applications on Cassandra,
The Weather Company (IBM)
43. C* Capacity - Planning and Forecasting at scale,
Netflix
• アラートを受けたときにはもう遅いかも
→予測して事前に通知させたい
• ARIMA(Auto Regressive Integrated Moving Average
• : 自己回帰和分移動平均)モデルで予測して通知
43
→
44. How we built user specific search using C*
without Solr, Sony
45. How we built user specific search using C*
without Solr, Sony
• 購入履歴のデータは複数のサービスからリアルタイムで必要とされた
→高可用性、速さ、スケールのしやすさが必要
→RDBの前にC*を置いて解決
• しかしCQLではJoin、トランザクション、検索ができない
• 各ユーザのデータに対するクエリがほとんどだった→joinはできなくても大丈夫
→購入履歴を非正規化してjson形式でCassandraに保持
主キーはアカウント、一つの購入履歴が1つのカラム
45
PlayStation StoreのRDBに対するクエリの一部をCassandraで受ける
話
Account1 Json 1 Json 2 …. Json n
クエリをから要件を確認
46. 46
How we built user specific search using C*
without Solr, Sony
検索、ソート、フィルタはどのように実現するか?
• セカンダリインデックス
→スケールしない、いろいろつらい
• データをすべてロードしてメモリ内で処理
→できなことはない
• Solr
→ユースケースに合わない
47. 47
How we built user specific search using C*
without Solr, Sony
Account1 Json 1 Json n Version
ユーザ毎にLuceneでインデックスを作成しCassandraに格納
• 行内のすべてを検索できる
• インデックスのサイズも小さい
• クエリのたびにインデックスを引くのは非効率
• 同じ行に異なるサーバから書き込まれると?
しかし
48. 48
How we built user specific search using C*
without Solr, Sony
Account
1
Version
Account
2
Version
Account
3
Version
Account
4
Version
Account
5
Version
Account
6
Version
Account1 jsons Version
Account2 jsons Version
Account3 jsons Version
Account4 jsons Version
Account5 jsons Version
…. … … …
Account n jsons Version
Instance 1
Instance 2
Instance 3
Cassandra
Cassandraの前に分散キャッシュを置いて解決
49. Always On: Building Highly Available Applications on
Cassandra, The Weather Company (IBM)
50. Always On: Building Highly Available Applications on Cassandra, The
Weather Company (IBM)
• トポロジーの設定
• 一つのラックにすべてノードを置かない
• Multi-DCクラスタにおいて非LocalなConsistency Levelは避ける等
• Cassandraに適したデータモデル
• 主キーが異なるデータをまとめて書き込む際にbatchは使わない
• 複数のパーティションにまたがるようなクエリを投げない等
• 監視で注目した方がよい点
• C*はSEDAなのでスレッドプールの状態に注意
• コンパションが遅れていないか
• Size-TieredではSStableの数
• LeveledではL0のSStableの数
50
可用性を高めるためにするべきこと、するべきではないことが一通りまとめられてい
る
54. CassieQ: The distributed message queue built on cassandra, Curalate
• C*(Cassandra)ベースのMQ(MessageQueue)実装
54
55. CassieQ: The distributed message queue built on cassandra, Curalate
• C*ベースの利点
マスターレス、高可用性、高分散性など
→ アトミック処理実装には軽量トランザクションを利用
• C*ベースのMQは他にも …
Netflix : Astyanax recipe
Comcast : CMB
→ (ただし基本実装はRedis、永続化にC*を利用)
55
56. CassieQ: The distributed message queue built on cassandra, Curalate
• 関連セッション① : One Billion Black Friday Shoppers on a
Distributed Data Store, Bazaarvoice
EmoDB : C*ベースの高機能(SoR)データストア
→ スナップショット機能や、CRDTデータ型サポート
56
57. CassieQ: The distributed message queue built on cassandra, Curalate
• 今後、C*の分散基盤ソフトウェアとしての活用にも注目
• 関連セッション② : Clock Skew, and other annoying realities in
distributed systems, PagerDuty
→ 分散システムとしてのC*の整合性、独立性、
原子性など動作についての講演
57
Master Slave
Master
Less
58. Running Cassandra on Apache Mesos Across Multiple Datacenters at Uber, Uber
• 発表者は元Google、 Borg(Kubernetes)論文の第一著者
• Mesos採用理由
高可用性、リソース抽象化、線形スケラビリティなど
• C*採用理由
高可用性、水平スケラビリティ、低遅延など
58
59. Running Cassandra on Apache Mesos Across Multiple Datacenters at Uber, Uber
• Custom Seed Provider
ノード増設時に既存Seedノード応答用のAPIを準備
59
60. Running Cassandra on Apache Mesos Across Multiple Datacenters at Uber, Uber
• Cassandra on Mesosの導入が進む?
• 関連セッション① : Infrastructure for Fast
Delivery, Mesosphere
→ Mesosphereによるベンダー講演
• 関連セッション② : Cassandra @ Yahoo,
Yahoo! JAPAN
→ OpenStack Troveへの取り組み紹介
• 関連情報 : Thousand Instances of
Cassandra using Kubernetes Pet Set
60
61. Cassandra Meetup in Tokyo, Fall 2016
私たちと、いっしょに働きませんか?
mailto : nosql-jobs@mail.yahoo.co.jp
次は “Myths of big partition”を紹介します。
Big Partitionというのはパーティションキーの中に大量のRowが存在する状態のことで、Cassandraが不安定になるからまず避けろというデータモデリング上のアンチパターンにもなっています。
Cassandra 3.6で、この問題を緩和するコミットが入ったのですが、そのコミット作者のRobert Stuppさんが、
Big Partitionはなにが問題だったのか、3.6で何が改善されたのか、というのを解説しました。