Post on 21-Jan-2018
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
2017年10月17日
1
ヤフー株式会社 データサイエンスソリューション統括本部
データプラットフォーム本部
星井祥吾
Yahoo! JAPANの
OSSコミュニティ貢献の今までとこれから
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
About me
2
星井 祥吾
2011年ヤフー中途入社
広告システムの開発に従事したのち
2015年10月に、現NoSQLチームに異動
Cassandraクラスタの構築・運用自動化が主務
趣味は庭仕事
Mail: shoshii@yahoo-corp.jp
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
アジェンダ
3
1. Yahoo! JAPANにおけるCassandra
2. Yahoo! JAPANのOSS貢献の今まで
3. Yahoo! JAPANのOSS貢献のこれから
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのサービス
5
Media
US
Search Video Answer Mail
JP
US
JP
Membership C2C Payment C2C EC B2C EC Local
Search Knowledge search MailNews
YAHUOKU!Premium Wallet Loco
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのCassandraクラスタ規模
6
50Clusters
50TBUsages
2000+Nodes
500,000
Read/sec
500,000
Write/sec
2017
10Nodes /
Cluster
200Nodes /
Cluster
…1
Shared
Cluster
50Special
Clusters
50Systems
50Systems
3DCs
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのCassandraユースケース
7
120
Systems
20
データベースキャッシュ
10
広告サービス
40
ユーザDB
50
サービス個別DB
閲覧履歴
インプレッション
・・・・
メタデータ
集約データ
・・・・
生成データ
セッションデータ
メタデータ
集約データ
・・・・
生成データ
レコメ
デモグラ
ライフログ
・・・・
嗜好
行動履歴
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのCassandra利用バージョン
2010 2012 2014 2016 2017
各サービス部門
NoSQLチーム
0.5 0.8 1.x
0.8 1.x 2.x 3.0 3.X
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
NoSQLチーム
9
• 社内プロダクト向けに、NoSQLを構築・運用• 主務10名• Cassandra, Redis, Ignite• 業務効率化、自動化が課題
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
なぜOSS貢献
10
• お客様が求めるサービスを理解・構築できるエンジニア・デザイナの養成=クリエイターズマインド
• すべての結果を自分ごとに• 社外に対してオープンに• 困難なことにチャレンジ
参考:https://about.yahoo.co.jp/hr/engineers/ctomessage.html
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのOSS貢献の今まで
12
JIRA-ID 分類 概要
CASSANDRA-5977 Nodetool nodetool cfstatsの出力フォーマットにJSONを追加する
CASSANDRA-12486 Nodetool nodetool compactionhistoryの出力フォーマットにJSONを追加する
CASSANDRA-12503 Nodetool nodetool netstatsの出力フォーマットにJSONを追加する
CASSANDRA-8727 Nodetool nodetoolに自動コンパクションステータス表示機能を追加
CASSANDRA-12279 Nodetool nodetoolバグ修正
CASSANDRA-11720 Nodetool nodetoolバグ修正
CASSANDRA-9430 Cqlsh cqlshにスタートオプションを追加
CASSANDRA-11032 Cqlsh cqlshバグ修正
CASSANDRA-11976 Cqlsh cqlshバグ修正
CASSANDRA-12150 Cqlsh cqlshバグ修正
CASSANDRA-12174 Cqlsh cqlshバグ修正
CASSANDRA-13262 Cqlsh cqlshバグ修正
2016/10 – 現在 、20件以上のチケットに関与
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのOSS貢献の今まで
13
JIRA-ID or github url 分類 概要
CASSANDRA-12555 CCM ネットワークエミュレータ機能の提案
https://github.com/pcmanus/ccm
/pull/618
CCM Nodetool compact, cleanup, flush のサブコマンド指定を可能にする
https://github.com/pcmanus/ccm
/pull/620
CCM クラスタ名へのバリデーション追加
https://github.com/pcmanus/ccm
/pull/627
CCM リファクタリング
CASSANDRA-13125 本体 2.1 -> 3.0バージョンアップ時のデータ分割問題
CASSANDRA-11695 本体 JMXコネクション設定をcassandra.yamlに移行する
CASSANDRA-11303 本体 ストリーミング時のinboundトラフィック制限機能
CASSANDRA-12403 本体 スロークエリログ出力機能
CASSANDRA-13001 本体 プラッガブルスロークエリログ出力
CASSANDRA-13002 本体 テーブル単位のスロークエリログ出力
CASSANDRA-13863 本体 Speculative retry時のread repair ON/OFF機能
2016/10 – 現在 、20件以上のチケットに関与
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのOSS貢献の今まで
14
1. 機能追加:スロークエリログ出力
2. バグ修正:アップグレード時のデータ分割
3. 機能改善:speculative retryとread repair
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
機能追加:スロークエリログ出力
15
プロダクトエンジニア(システム)
NoSQLチームマルチテナント式クラスタ
Slow query
?
誤ったスキーマ定義、クエリ実行はクラスタ全体の性能を劣化させることがあるそのようなクエリを直接把握する手段がCassandraにはなかった
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
機能追加:スロークエリログ出力
16
スロークエリログ出力のため、JIRAにチケットを起票してパッチ提出https://issues.apache.org/jira/browse/CASSANDRA-12403
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
機能追加:スロークエリログ出力
17
コミッターから多数の指摘を受けるが、再修正 -> 無事マージ -> 3.10 より利用可能に
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.18
バグ修正:アップグレード時のデータ分割
> CREATE TABLE test.test (
a int PRIMARY KEY,
b int,
c set<int>,
d set<int>,
e int );
> INSERT INTO test.test(a,b,c,d,e) VALUES (14,1,{2,3},{4,5},6);
> SELECT * FROM test.test;
Cassandra3系に、複数のコレクションカラムを含むテーブルへのinsertを行うとパーティションが意図せず分割されてしまう問題
a b c d e
14 1 null null null
14 null {2, 3} {4, 5} 6
a b c d e
14 1 {2, 3} {4, 5} 6
※あるべき結果
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
バグ修正:アップグレード時のデータ分割
19
バグ報告チケットをJIRAに起票し、詳細な再現手順とパッチを添付https://issues.apache.org/jira/browse/CASSANDRA-13125
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
バグ修正:アップグレード時のデータ分割
20
コミッターから、致命的なバグと認識され、即座に修正をしてもらう
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
機能改善:speculative retryとread repair
21
Cassandraクラスタ
Speculative retry: 一時的な負荷などでレプリカノードが高速にデータもしくはダイジェストを返せない場合、コーディネータノードが別レプリカから思索的にデータもしくはダイジェストを取得する機能
①②
③
クライアント
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
機能改善:speculative retryとread repair
22
広告系システムで利用しているクラスタにて、Cassandraバージョンを3.0.9 -> 3.0.12にアップグレードした結果
3.0.12のクラスタでspeculative retryが大量発生
通常およそ20msecの 99% read latencyが200msecほどに悪化
3.0.11より、speculative retry後にread repairが動くようになったことによるものと推測https://github.com/apache/cassandra/commit/48fed80162592f741bf29298e2064452d53de4d8
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
機能改善:speculative retryとread repair
23
JIRAチケットを起票し、speculative retry後のread repairを設定でオフにできる機能改善をコミッターと検討中https://issues.apache.org/jira/browse/CASSANDRA-13863
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのOSS貢献のこれから
25
分散型自動リペアツール
• 運用上の課題• Repairがgc_grace_seconds以内に回りきらない
• Repair実行時にノードの性能が劣化する
• 中央集権型のcassandra-reaperの検証と並行して、独自ツールの開発を実施中
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのOSS貢献のこれから
26
監査ログ出力機能
• センシティブ情報を扱うクラスタで監査ログを出力する
• 独自パッチを当てたクラスタを社内で運用中
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのOSS貢献のこれから
27
..........
! ! !
! ! !
vCPU = Cheap
datastax/cpp-driver改善:DN -> UNノードへのリクエスト集中問題
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのOSS貢献のこれから
28
• 改善内容• UNノードを検知した後、ランダム時間待ってからノードに接
続する(Jitterの導入)• タイムアウト時の再リトライ間隔を等分ではなく徐々に遅らせ、ク
ラスタへの負荷を軽減する(バックオフ、リトライ遅延)
datastax/cpp-driver改善:DN -> UNノードへのリクエスト集中問題
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのOSS貢献のこれから
29
パッチを当てた独自ドライバは、社内の多数のクライアントで稼働中
datastax/cpp-driver改善:DN -> UNノードへのリクエスト集中問題