33
Ameba Pico MongoDB Suguru Namura CyberAgent, Inc.

MongoDB CouchDB合同勉強会-2010-12-14

Embed Size (px)

DESCRIPTION

Ameba Pico で導入した MongoDB の話 導入した経緯と、導入後に発生した問題、今後の計画など

Citation preview

Page 1: MongoDB CouchDB合同勉強会-2010-12-14

Ameba Picoと

MongoDBSuguru NamuraCyberAgent, Inc.

Page 2: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

About me

名村 卓 (30)

@snamura

株式会社サイバーエージェント

アメーバピグ、 Ameba Picoプーペガール、メロメロパークなど

Page 3: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Ameba Pico

累計登録ユーザー数 3,000,000

DAU 70,000 / MAU 560,000

Amazon EC2 上で稼働

30台くらい

MongoDBは9台

Page 4: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

なぜ MongoDB にしたか

Page 5: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

MongoDB導入前の構成

Distributed Database

HAProxy

Socket Servers Application Servers

Amazon S3

Page 6: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

データベースの条件

バイナリ形式に対応している

キーに対する Range Scan が可能

Horizontal Partitioning による分散

開発チームがアクティブ

Page 7: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

MongoDBBSON

インデクスのサポート

Sharding による分散

Chunk の分割の方式が既存のものと同じだった

開発チームが積極的でアクティブ

Page 8: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

MongoDB導入まで

Page 9: MongoDB CouchDB合同勉強会-2010-12-14

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

Page 10: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

導入した構成

Shard 1

Primary

Secondary

Secondaryconfig

Shard 2

Primary

Secondary

Secondaryconfig

Shard 3

Primary

Secondary

Secondaryconfig

Socket Servermongos

Page 11: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Amazon EC2

mongoDB は 64bit 推奨なので、最低でも Large インスタンスを使う

Replica Set のセカンダリの1台に EBS を使いデータを保護

EBS はスナップショットも取れる

Page 12: MongoDB CouchDB合同勉強会-2010-12-14

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

Page 13: MongoDB CouchDB合同勉強会-2010-12-14

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 くらいは普通に出る

Page 14: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

プログラムの対応

データアクセスのレイヤーを分離していたので、小さな修正で完了

load, save, fetch, count

Page 15: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

遭遇した問題

Page 16: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

ファイルシステム

ext3 は extent に時間がかかる

推奨されているのは ext4, xfs

Ameba Pico は ext4

Page 17: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Sharding の偏り

Sharding は普通に運用すると偏る

web から各コレクションのアクセス量を確認できる

アクセス量の多いコレクションを moveChunk コマンドで移動する

Page 18: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Sharding の偏り

ドキュメント量の少ないコレクションは、Read, Write が偏る

適宜アプリケーションで対処する必要がある

Page 19: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

接続プール

Java のドライバーが接続プールを使う

同時処理がプール数 x Multiplier が超えると Out of semaphores が起きる

ファイルオープン数を増やして、スレッド数やプール数を調整する

Page 20: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Primary 選出問題

EBS を使っている Secondary の Priority を 0 にして、 Primary に昇格しないようにしていた

Page 21: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Primary 選出問題

Shard 1

Primary

Secondary

Secondaryconfig priority 0

Page 22: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Primary 選出問題

oplog ちょっと古い

oplog 最新

Shard 1

Primary

Secondary

Secondaryconfig priority 0

Page 23: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Primary 選出問題

Shard 1

Primary

Secondary

Secondaryconfig priority 0

oplog ちょっと古い

oplog 最新

Primary よろしく

無理です

Page 24: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Primary 選出問題

Primary が起動していない Replica Set は、通常の方法では設定を変えられない

stepDown などが実行できない

config サーバー全台の内容を直接変更

復旧はした

Page 25: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

よかったところ思ったよりずっと安定している

プロトコルがシンプルでノンブロッキングIOなドライバへの対応が容易

Atomic modifiers 便利

Sharding + Replica Set

mmap を活用するので、基本メモリキャッシュに乗る

Page 26: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

気になるところ

Durability

Chunk が分割されるときのフリーズ

Sharding の安定性

Primary がダウンしたときのデータロス

ディスク容量を結構使う

Page 27: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Ameba PicoStatistics

Page 28: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Page 29: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

Page 30: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

今後の取り組み

Page 31: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

アメーバピグのリアルタイム販売アイテムレポートに使用中

map reduce を活用していく

開発中のいくつかのサービスに採用

Page 32: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

WebSocket + node.js + mongoDB

webworker 対応に期待

Java Asynchronous Driverhttps://github.com/suguru/mongo-java-async-driver

Python, Ruby

Page 33: MongoDB CouchDB合同勉強会-2010-12-14

MongoDB + CouchDB Study Session - Ameba Pico と MongoDB

終わり