ソーシャルメディア、ソーシャルアプリが育てたNoSQL技術に参加してきました
震災の影響で2カ月程延期されていた ソーシャルメディア、ソーシャルアプリが育てたNoSQL技術 に参加してきました。
参加者がそのままスライドした影響か、ATND上では定員を大きく上回る参加あったが、実際の参加者が少なく結構席も空いていました。
MongoDBで作るソーシャルデータ新解析基盤 [twitter:@doryokujin]
- 旧解析基盤(MongoDBとHadoopを活用)の処理フロー
- Data Gathering
- 分散するサーバから各種ログをローカルに収集
- 課金・登録情報の該当データをMySQLから取得
- ユーザゲームセーブデータをCassandraから取得
- Data Pre-processing(Hadoop)
- ログ整形
- フィルタリング
- Data Analysis(Hadoop)
- ユーザIDをキーにした各指標値を集計
- アクセスログの集計
- イベントの効果測定
- Result Data Strage(MongoDB)
- Data Mining
- Data Sharding
- 新解析基盤(MongoDB、Redis、Scribeを活用)の処理フロー
- Data Gathering(Scribe)
- 1時間毎にサーバからログファイルを転送
- Data Pre-processing
- Raw Data Strage(MongoDB)
- Shard Keyにhourを指定し、Shard0 - Shard23に1つずつ割り当てるマニュアルSharding
- Shardingの各種問題対策にもなるし、データが追加されているshardについても把握できる
- 自動Balancerも停止
- mongod1つに対し、1CPUしか使えないため、複数Shardを1台の物理サーバに同居
- 解析結果格納用のShardはSSDを使い高速にする
- Shard Keyにhourを指定し、Shard0 - Shard23に1つずつ割り当てるマニュアルSharding
- Data Analysis(MongoDB + Redis)
- Result Data Strage(MongoDB)
- Data Mining
- Data Sharding
本番で使うための"Cassandra"ガイド [twitter:@_shimada]
- 強み、弱み、落とし穴
- 勝手にシャーディング
- スケールアウトが容易
- キーの設計を間違うと、1か所にデータが集中
- 勝手にレプリケーション
- 反映に掛る時間はベストエフォート
- スレーブが反映前のデータを返すことも
- 勝手にフェイルオーバー
- 落ちたノードへの書き込みは自動的に他のノードが受け取り一時保管
- ノードが復帰したらデータが書き戻される
- スケールアウトと負荷分散
- ノードを追加すると、データが一番多いノードからデータを半分引き取る
- データの整合性
- 読み書きのパフォーマンス
- 読み出しよりも書き込みの方が早い
- コミットログ書き出し:
- 読み込み:書き込みの速度比、書き込みが8倍程早い
- 勝手にシャーディング
- まとめ
- 大量のデータを大量のサーバで捌く
- 一部で障害が起きても全体の整合性
- 書き込み速度重視
- データの整合性を犠牲にして、速度を上げることができる
"HandlerSocket": MySQLの非SQLインタフェース
- 概要
- 狙い
- mobageへの導入
- 最初の適用箇所
- 利点(libmysqlと比較して)
- CPUを食わない
- サーバ側、クライアント側のいずれも効果あり
- 特に単純なクエリで差が大きい
- ネットワークトラフィックが減らせる
- 特に単純なクエリでおおきい
- 同時接続数がほぼ無制限
- すくなくとも65000本までは可能
- 同時接続数を増やしても性能劣化がほとんどない
- CPUを食わない
- HandlerSocketに向いているケース
- データサイズが小さく十分小さくメモりに乗る
- 単純なクエリ、サーバのCPUがネック
- 単純なクエリ、トラフィックがネック
- 同時接続数が多すぎて、維持接続がつかえない
- HandlerSocketに不向きなケース
- クエリが複雑でHandlerSOcketで実現困難
- クエリ1回あたりのCPU負荷が大きい
- データサイズが大きくDisk IOがネック
- 機能(参照系)
- PKやUKを使った行取得
- 範囲取得
- SQLのINのような複数行取得
- 機能(更新系)
- libmysqlとの性能比較
- 単純な参照クエリで数倍〜10倍
- 取得する列数が多くなる場合に特に有効
- なぜ早くなるか
- 課題