61
Cassandra Meetup in Tokyo Fall 2016

Cassandra Summit 2016 注目セッション報告

  • Upload
    yahoo

  • View
    634

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Cassandra Summit 2016 注目セッション報告

Cassandra Meetup in Tokyo Fall 2016

Page 2: Cassandra Summit 2016 注目セッション報告

データ&サイエンスソリューション統括本部データプラットフォーム本部開発3部 部長遠藤 禎士(えんどう ただし)

2012 年にヤフーに中途入社 ちょうど5年目広告のインフラを担当2015 年からデータインフラへ

自己紹介

Page 3: Cassandra Summit 2016 注目セッション報告

アジェンダ

1. Cassandra Summit 2016 keynote summary2. SlowQuery 開発秘話

3. Cassandra Summit 2016 注目セッション報告

4. Cassandra 3.x の最新機能

5. Cassandra データモデリング

6. クロージング

7. 懇親会

Page 4: Cassandra Summit 2016 注目セッション報告

Cassandra Summit 2016 keynote summary

Industry Standard

Global

Community

Page 5: Cassandra Summit 2016 注目セッション報告

Cassandra Summit 2016 keynote summary

IndustryStandard

GlobalCommunity

Page 6: Cassandra Summit 2016 注目セッション報告

May 2, 20236

May 2, 2023後藤 泰陽 @ono_matope

Cassandra Summit 2016 注目セッション報告 ①

Page 7: Cassandra Summit 2016 注目セッション報告

Sessions• Cassandra Internals: The Read Path• CQL performance with Apache Cassandra 3.0• Myths of big partitions

7

Page 8: Cassandra Summit 2016 注目セッション報告

Cassandra Internals: The Read Path

Tyler Hobbs: Datastax

Page 9: Cassandra Summit 2016 注目セッション報告

Cassandra Internals: The Read Path

SELECT 文発行時の Cassanra 内部処理の概要を解説

9

Page 10: Cassandra Summit 2016 注目セッション報告

Cassandra Internals: The Read Path

10

• ドライバ• プリペアドステートメント• DC/Token Aware Selection

• コーディネーターノード• メトリクスによるレプリカ選択• Speculative Retry

• レプリカノード• SSTable ファイルの選択・順序付け・検索終了

条件• キャッシュ , インデックス

感想: C* 初心者の方も是非

Page 11: Cassandra Summit 2016 注目セッション報告

CQL performance with Apache Cassandra 3.0

Aaron Morton: The Last Pickle

Page 12: Cassandra Summit 2016 注目セッション報告

CQL performance with Apache Cassandra 3.0

• C*3.0 の新ストレージエンジンの解説

12

Page 13: Cassandra Summit 2016 注目セッション報告

3.0 以前のストレージエンジン

13

Row

Row

KVS 的レイアウト。シンプルだが無駄が多い

Page 14: Cassandra Summit 2016 注目セッション報告

従来のフォーマットの問題点

14

1. クラスタリングが反復2. カラム名が反復3. タイムスタンプが反復4. エンコーディングが固定

Page 15: Cassandra Summit 2016 注目セッション報告

従来のフォーマットの問題点

15

1. クラスタリングが反復2. カラム名が反復3. タイムスタンプが反復4. エンコーディングが固定

Page 16: Cassandra Summit 2016 注目セッション報告

Pre 3.0 Storage Layout

16

1. クラスタリングが反復2. カラム名が反復3. タイムスタンプが反復4. エンコーディングが固定

Page 17: Cassandra Summit 2016 注目セッション報告

Pre 3.0 Storage Layout

17

1. クラスタリングが反復2. カラム名が反復3. タイムスタンプが反復4. エンコーディングが固定

Long

Page 18: Cassandra Summit 2016 注目セッション報告

3.0 Storage Engine

18

SSTable

Partition: part_aRow: cluster_a

some fooand barno baz

Row: cluster_bsome fooand barno baz

Partition>Row>Cell( カラム ) の階層構造に変更

Page 19: Cassandra Summit 2016 注目セッション報告

階層化

19

SSTable

Partition: part_aRow: cluster_a

some fooand barno baz

Row: cluster_bsome fooand barno baz

クラスタリングの反復を排除

Page 20: Cassandra Summit 2016 注目セッション報告

Cell Bitmap

20

SSTable

Partition: part_aRow: cluster_a

some fooand barno baz

SSTable ヘッダでカラム名に番号付け

Row は出現カラムをビットマップで管理

カラム名の反復を排除!columns: [foo, bar, baz... ]

bitmap : 0|1|2...

Page 21: Cassandra Summit 2016 注目セッション報告

Variable Int• 時刻のエンコード形式を long(8Byte) から可変長整数 (VarInt) に

変更• 小さい数値は小さいサイズでエンコードできる。• 127 以下なら 1Byte

21

Page 22: Cassandra Summit 2016 注目セッション報告

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)

Page 23: Cassandra Summit 2016 注目セッション報告

Aggregated Cell Metadata• Row レベルの Timestamp を導入• Cell レベルの Timestamp が Row レ

ベルと同じ場合は省略する

23

SSTable

Partition: part_aRow: cluster_a

some fooand barno baz t3

timestamp: t2

Page 24: Cassandra Summit 2016 注目セッション報告

以上

感想:ストレージの効率化・高速化のための工夫を知るのは面白い。パフォーマンスやキャパシティに非常に効いてくるので、よく理解しておきたい。

24

Page 25: Cassandra Summit 2016 注目セッション報告

Myths of big partitions

Robert Stupp: DataStax

Page 26: Cassandra Summit 2016 注目セッション報告

Myths of big partitions• Big Partition

• パーティション内に大量の Row• CASSANDRA-11206 (C*3.6)

• Big Partition 問題を緩和するコミット

• 何が問題だったのか?• 何を改善したのか?

26

Page 27: Cassandra Summit 2016 注目セッション報告

Big Partition Issue• SSTable は BloomFilter, Summary, Index, Data などのファイルで構成

• Data ファイルには Row のデータが格納

• Index ファイルには Data ファイルの全てのパーティションへのオフセットが格納

• 一定間隔でサンプリングされた Row のオフセット位置を示す IndexInfo も格納

27

Page 28: Cassandra Summit 2016 注目セッション報告

Big Partition Issue

28

READ 時処理手順

1. Index から目的のパーティションを見つける

2. 目的のクラスタリングに近い IndexInfo を見つける

3. Data ファイルを読みに行く

Page 29: Cassandra Summit 2016 注目セッション報告

Big Partition Issue

29

READ 時処理手順

1. Index から目的のパーティションを見つける

2. 目的のクラスタリングに近い IndexInfo を見つける

3. Data ファイルを読みに行く

パーティション内の全てのIndexInfo をヒープにロードしている

Page 30: Cassandra Summit 2016 注目セッション報告

Big Partition Issue• 2GB のパーティションの場合、 32,768 IndexInfo (42万 Java Objects)• GC プレッシャーが高まり不安定に• バイナリサーチにより 15 IndexInfo しか使わないのに。無駄!

30

Page 31: Cassandra Summit 2016 注目セッション報告

CASSANDRA-11206• 一定サイズを超過する IndexInfo はロードせず、ディスクアクセスするよう変更

• column_index_cache_size_in_kb (default: 2)• GC プレッシャーが大幅に削減され、高速化• 10個の 15GB パーティションをコンパクションしても問題なかった

31

Page 32: Cassandra Summit 2016 注目セッション報告

CASSANDRA-9754• SSTable の Index のレイアウトそのものを改良するチケット• B+Tree ベースの独自フォーマット• Cassandra 4.x でのマージを目指している

32

Page 33: Cassandra Summit 2016 注目セッション報告

余談

Page 34: Cassandra Summit 2016 注目セッション報告

CASSANDRA-12731• 帰国後、 #11206 パッチに無駄な IndexInfo配列のアロケーションを発見• 削除したところ 2,30%ほど高速化• パッチを送ったらマージしてもらえたので、 3.10 に入ります 😀• 感想

• 早く 3.x 入れたい !! Production Ready はいつ… ?

34

Page 35: Cassandra Summit 2016 注目セッション報告

May 2, 202335

May 2, 2023鄭 中翔

Cassandra Summit 2016

注目セッション報告 ②

Page 36: Cassandra Summit 2016 注目セッション報告

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)

Page 37: Cassandra Summit 2016 注目セッション報告

Tuning Speculative Retries to Fight Latency,

Netflix

Page 38: Cassandra Summit 2016 注目セッション報告

38

Tuning Speculative Retries to Fight Latency, Netflix 

> DESCRIBE TABLE system.local

CREATE TABLE system.local ( key text PRIMARY KEY, bootstrapped text, ... truncated_at map<uuid, blob>) WITH bloom_filter_fp_chance = 0.01 AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}' AND comment = 'information about the local node' AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'} AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'} AND dclocal_read_repair_chance = 0.0 AND default_time_to_live = 0 AND gc_grace_seconds = 0 AND max_index_interval = 2048 AND memtable_flush_period_in_ms = 3600000 AND min_index_interval = 128 AND read_repair_chance = 0.0 AND speculative_retry = '99.0PERCENTILE';

Speculative retry の説明と実験結果の話

この設定

→レイテンシが設定値を超えた場合に追加のノードにデータを取得しにいく機能

Page 39: Cassandra Summit 2016 注目セッション報告

39

• Cassandra: 12nodes(8cores/60GB RAM) / 120GB data per node

• Client: 6 (8cores/30GB RAM)• tc コマンドで 1 ノードにパケット遅延を発生させネットワーク障害をシミュレート

Tuning Speculative Retries to Fight Latency, Netflix 

実験

Page 40: Cassandra Summit 2016 注目セッション報告

40

Tuning Speculative Retries to Fight Latency, Netflix 

Speculative Retry なし 95percentileスループット 50K reads/sec,

3K writes/sec30K reads/sec に低下write 言及なし

平均レイテンシ 0.5ms 1ms95th/99th レイテンシ スパイクが 2~10倍に増加

• 高負荷な場合

Speculative Retry なし 95percentileスループット 18K reads/sec,

1K writes/sec20+K reads/sec に増加write 言及なし

平均レイテンシ 0.5ms 1ms95th/99th レイテンシ レイテンシ低下

スパイクなし、安定

• 低負荷な場合

→キャパシティを余分に確保し Speculative Retry を有効にすることで 95/99th レイテンシが改善 キャパシティに余裕が無いとパフォーマンスは悪化する可能性があるので注意する

Page 41: Cassandra Summit 2016 注目セッション報告

C* Capacity - Planning and Forecasting at

scale,

Netflix

Page 42: Cassandra Summit 2016 注目セッション報告

C* Capacity - Planning and Forecasting at scale,Netflix

• Metrics → Atlas → pagerduty• メトリクス間の複雑な関係のチェックができない• ハードウェア障害による誤検知が発生する

• Winston• Atlas→Winston→pagerduty• メトリクス間の関係性をチェック• 誤検知を削減• http://techblog.netflix.com/2016/08/introducing-

winston-event-driven.html

42

Page 43: Cassandra Summit 2016 注目セッション報告

C* Capacity - Planning and Forecasting at scale,Netflix

• アラートを受けたときにはもう遅いかも→予測して事前に通知させたい

• ARIMA(Auto Regressive Integrated Moving Average• : 自己回帰和分移動平均 ) モデルで予測して通知

43

Page 44: Cassandra Summit 2016 注目セッション報告

How we built user specific search using C*

without Solr, Sony

Page 45: Cassandra Summit 2016 注目セッション報告

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

クエリをから要件を確認

Page 46: Cassandra Summit 2016 注目セッション報告

46

How we built user specific search using C* without Solr, Sony

検索、ソート、フィルタはどのように実現するか?• セカンダリインデックス →スケールしない、いろいろつらい

• データをすべてロードしてメモリ内で処理

 →できなことはない• Solr →ユースケースに合わない

Page 47: Cassandra Summit 2016 注目セッション報告

47

How we built user specific search using C* without Solr, Sony

Account1 Json 1 Json n Version

ユーザ毎に Lucene でインデックスを作成し Cassandra に格納

• 行内のすべてを検索できる• インデックスのサイズも小さい

• クエリのたびにインデックスを引くのは非効率• 同じ行に異なるサーバから書き込まれると?

しかし

Page 48: Cassandra Summit 2016 注目セッション報告

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 の前に分散キャッシュを置いて解決

Page 49: Cassandra Summit 2016 注目セッション報告

Always On: Building Highly Available

Applications on Cassandra, The Weather

Company (IBM)

Page 50: Cassandra Summit 2016 注目セッション報告

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

可用性を高めるためにするべきこと、するべきではないことが一通りまとめられている

Page 51: Cassandra Summit 2016 注目セッション報告

May 2, 202351

May 2, 2023今野 賢

Cassandra Summit 2016

注目セッション報告 ③

Page 52: Cassandra Summit 2016 注目セッション報告

52

概要

• Cassandra Summit での弊社実績について講演セッションは、 C* の応用や仮想化などを中心に参加

• 下記のセッションを紹介します• Cassandra @ Yahoo, Yahoo! JAPAN• CassieQ: The distributed message queue built on

cassandra, Curalate• Running Cassandra on Apache Mesos Across

Multiple Datacenters at Uber, Uber

Page 53: Cassandra Summit 2016 注目セッション報告

53

Cassandra @ Yahoo, Yahoo! JAPAN

• 弊社の運用課題、 OSS貢献について講演

Page 54: Cassandra Summit 2016 注目セッション報告

54

CassieQ: The distributed message queue built on cassandra, Curalate

• C*(Cassandra) ベースの MQ(MessageQueue)実装 

Page 55: Cassandra Summit 2016 注目セッション報告

55

CassieQ: The distributed message queue built on cassandra, Curalate

• C* ベースの利点

マスターレス、高可用性、高分散性など → アトミック処理実装には軽量トランザクションを利用

• C* ベースの MQ は他にも …

Netflix : Astyanax recipeComcast : CMB → ( ただし基本実装は Redis 、永続化に C* を利用 )

Page 56: Cassandra Summit 2016 注目セッション報告

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 データ型サポート

Page 57: Cassandra Summit 2016 注目セッション報告

57

CassieQ: The distributed message queue built on cassandra, Curalate

• 今後、 C* の分散基盤ソフトウェアとしての活用にも注目

• 関連セッション② : Clock Skew, and other annoying realities in distributed systems, PagerDuty → 分散システムとしての C* の整合性、独立性、   原子性など動作についての講演

Master Slave

Master Less

Page 58: Cassandra Summit 2016 注目セッション報告

58

Running Cassandra on Apache Mesos Across Multiple Datacenters at Uber, Uber

• 発表者は元Google 、 Borg(Kubernetes)論文の第一著者• Mesos採用理由

高可用性、リソース抽象化、線形スケラビリティなど• C*採用理由

高可用性、水平スケラビリティ、低遅延など

Page 59: Cassandra Summit 2016 注目セッション報告

59

Running Cassandra on Apache Mesos Across Multiple Datacenters at Uber, Uber

• Custom Seed Providerノード増設時に既存 Seed ノード応答用の API を準備

Page 60: Cassandra Summit 2016 注目セッション報告

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

Page 61: Cassandra Summit 2016 注目セッション報告

Cassandra Meetup in Tokyo, Fall 2016

私たちと、いっしょに働きませんか?

mailto : [email protected]