Upload
suguru-namura
View
9.038
Download
0
Embed Size (px)
DESCRIPTION
Ameba Pico で導入した MongoDB の話 導入した経緯と、導入後に発生した問題、今後の計画など
Citation preview
Ameba Picoと
MongoDBSuguru NamuraCyberAgent, Inc.
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
About me
名村 卓 (30)
@snamura
株式会社サイバーエージェント
アメーバピグ、 Ameba Picoプーペガール、メロメロパークなど
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Ameba Pico
累計登録ユーザー数 3,000,000
DAU 70,000 / MAU 560,000
Amazon EC2 上で稼働
30台くらい
MongoDBは9台
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
なぜ MongoDB にしたか
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
MongoDB導入前の構成
Distributed Database
HAProxy
Socket Servers Application Servers
Amazon S3
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
データベースの条件
バイナリ形式に対応している
キーに対する Range Scan が可能
Horizontal Partitioning による分散
開発チームがアクティブ
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
MongoDBBSON
インデクスのサポート
Sharding による分散
Chunk の分割の方式が既存のものと同じだった
開発チームが積極的でアクティブ
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
MongoDB導入まで
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
最初の計画
Arbitery
Shard 1
Primary
Secondaryconfig
mongos
Shard 1
Primary
Secondaryconfig
mongos
Shard 1
Primary
Secondaryconfig
mongos
Socket Server
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
導入した構成
Shard 1
Primary
Secondary
Secondaryconfig
Shard 2
Primary
Secondary
Secondaryconfig
Shard 3
Primary
Secondary
Secondaryconfig
Socket Servermongos
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Amazon EC2
mongoDB は 64bit 推奨なので、最低でも Large インスタンスを使う
Replica Set のセカンダリの1台に EBS を使いデータを保護
EBS はスナップショットも取れる
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Amazon EC2
Shard
Primary
Secondary
Secondaryconfig
High-CPU Extra Large
High-CPU Extra Large
Large
8 Core7.0 GB
I/O: High
2 Core7.5 GB
I/O: HighEBS
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
データ移行既存のデータ Key Value のデータ形式
バイナリのソート方式が違う(signed byte?)ので、Key は HEX形式の文字列に変換
{ _id: ObjectId, key: String, value: byte[] }
ObjectId は結果として必要なし
Insert 1件ずつだと時間がかかるので、bulk insert を使って 1,000 件ずつレコードを投入して移行
10,000 insert / sec くらいは普通に出る
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
プログラムの対応
データアクセスのレイヤーを分離していたので、小さな修正で完了
load, save, fetch, count
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
遭遇した問題
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
ファイルシステム
ext3 は extent に時間がかかる
推奨されているのは ext4, xfs
Ameba Pico は ext4
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Sharding の偏り
Sharding は普通に運用すると偏る
web から各コレクションのアクセス量を確認できる
アクセス量の多いコレクションを moveChunk コマンドで移動する
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Sharding の偏り
ドキュメント量の少ないコレクションは、Read, Write が偏る
適宜アプリケーションで対処する必要がある
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
接続プール
Java のドライバーが接続プールを使う
同時処理がプール数 x Multiplier が超えると Out of semaphores が起きる
ファイルオープン数を増やして、スレッド数やプール数を調整する
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Primary 選出問題
EBS を使っている Secondary の Priority を 0 にして、 Primary に昇格しないようにしていた
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Primary 選出問題
Shard 1
Primary
Secondary
Secondaryconfig priority 0
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Primary 選出問題
oplog ちょっと古い
oplog 最新
Shard 1
Primary
Secondary
Secondaryconfig priority 0
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Primary 選出問題
Shard 1
Primary
Secondary
Secondaryconfig priority 0
oplog ちょっと古い
oplog 最新
Primary よろしく
無理です
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Primary 選出問題
Primary が起動していない Replica Set は、通常の方法では設定を変えられない
stepDown などが実行できない
config サーバー全台の内容を直接変更
復旧はした
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
よかったところ思ったよりずっと安定している
プロトコルがシンプルでノンブロッキングIOなドライバへの対応が容易
Atomic modifiers 便利
Sharding + Replica Set
mmap を活用するので、基本メモリキャッシュに乗る
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
気になるところ
Durability
Chunk が分割されるときのフリーズ
Sharding の安定性
Primary がダウンしたときのデータロス
ディスク容量を結構使う
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Ameba PicoStatistics
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
今後の取り組み
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
アメーバピグのリアルタイム販売アイテムレポートに使用中
map reduce を活用していく
開発中のいくつかのサービスに採用
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
WebSocket + node.js + mongoDB
webworker 対応に期待
Java Asynchronous Driverhttps://github.com/suguru/mongo-java-async-driver
Python, Ruby
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
終わり