MongoDB Tokyo 2013で語られた、NoSQLを上手に使うためのポイントとは
アメーバのWebサービスを支えるMongoDB
株式会社サイバーエージェントの桑野章弘氏によるセッションでは、「CyberAgentにおけるMongoDB」と題して、PC向けのサービス「ピグライフ」と、11月にリリースされたスマートフォン向けアプリ「なぞってピグキッチン」をメインに、サービスの成長に合わせて発生した課題をどう解決してきたか、といったユーザーサイドからの視点で紹介された。
PC向けサービスはユーザー数100万~300万以上で、ピークタイムの同時接続数は10万以上にも上る。アプリケーション・サーバーはNode.JSとNginx、データストアサーバーにMongoDBを使用している。リリースされたばかりのスマートフォン向け「なぞってピグキッチン」はAWSで構築している。
ピグライフでは、リリース後3週間で100万ユーザーを突破する好調な状態で、サーバーもこれに合わせて当初より1シャード追加。特に負荷が高かったNode.JSのサーバーを一時的に大量追加するなどの対応を行った。その後、9月にはユーザー数が200万人を突破。ユーザー増加による負荷増に対応するため、最終的に23シャード、81台を追加。Staticサーバー、Node.JSサーバーは2系統ずつ用意し、リリースと構築を切り替えながら運用しているとのこと。
リリースから3ヶ月で、サーバーの規模は8倍、トラフィックは1.3Gbps、総コネクションは18万に増加したという。
サービスの成長速度を支えたMongoDB
ピグライフの構成図と、基本的なスキーマレス、冗長化、アベイラビリティ、およびレプリカセット、シャーディングを紹介。MongoDBを使うことでユーザー情報なども柔軟に持つことができ、機能追加時などが比較的楽になる。例えば、DBでカラムを追加・変更したい時に、DBを止めることなく、アプリケーション側の構成変更で行えることなどがあげられる。
レプリカセットは、相互死活監視と投票によって冗長性を保つことができる。最小単位はプライマリ1台とセカンダリ2台の計3台。プライマリが死んでしまった際にいずれかのセカンダリから投票でプライマリを決めて移行する。ユーザーはプライマリの死を意識することなく、サービスを継続できるメリットがある。
データを複数のサーバーに分散させ、負荷分散を行うシャーディングは、データをChunk(チャンク)という単位に分けて、どのサーバーがどのChunkを受け持つかを決めて分散させ、それぞれレプリカセットで冗長性を確保している。
これらの基本機能によって、アプリ側の実装コストが軽く、9台から100台への大幅な変更でもDB接続部分の変更点がほとんどないことから、スケーラビリティを保ったままシンプルなサービス構成を実現することができたと桑野氏は語る。
次に、MongoDBが得意とするユースケースとして、データ量が極端に大きすぎないことや、読み込みに対して書き込みが多すぎないこと、単位時間あたりの処理データが各シャードのメモリ量を超えない処理が得意であると延べ、ゲーム系Webアプリケーションや一時的なログ解析基盤を挙げた。
反対に、データ量が爆発的に増えるもの、常に全データへのアクセスを行うといった、ホットデータがないデータの使い方は苦手だとし、例としてソーシャル系Webアプリや継続的または統合的ログ解析基盤をあげた。
このように、NoSQLはできることとできないことがはっきりしており、NoSQLを使う場合はこのできる部分を伸ばす必要があると述べた。
MongoDBを運用する上で発生しやすい注意点も紹介された。1つは、必要なデータを一気にインポートした場合やOplogデータ量の範囲を超えてレプリケーションが停止してしまうクラスターのスローダウン。一部シャード設定のし忘れによって、たまったデータを処理しきれなくなって発生するパフォーマンスダウン、そして、データが肥大化することおよびその対策など。これらは一部オペレーションミスに近いものも含まれるが、実際にMongoDBを使っている立場からの貴重なアドバイスといえる。
他にも、ハードウェア選択のポイントやmongodumpを使ったバックアップ、MongoDB Management Servece(MMS)などを紹介。最後にまとめとして、MongoDBを使うことによって運用の安定、構成を変えずにスケーラビリティを確保できることや、JSONを直接扱えることで開発スピードを早くできる点が大きいと語った。ただし、NoSQL全般に言えることとして、ここで挙げたような注意点もあるため、まずはスモールスタートで使いながらノウハウをためてみては、と話しセッションを結んだ。
ここで紹介した他にも、シャーディングやセキュリティ、パフォーマンスチューニングなどに関する合計15のセッションが実施され、会場では熱心に話を聞く参加者の姿が見られた。クロージングセッションでは、数ヶ月以内に発表される予定の次期バージョン2.6やその先のアップデートについての展望が語られた。
平日を1日使って行われた今回のイベントに約200名の参加者が集まったことで、国内においてもその注目度が感じられるMongoDB。NoSQLの旗手として今後の発展を期待したい。
【関連リンク】
リンク先最終アクセス(2013.12)
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- SoftLayerでMongoDB環境を構築してみよう
- IoTに適したNoSQL・分散Key-Valueストア
- 高可用性とデータ・シャーディングを実現できるMySQL Fabricとは?
- NoSQLとNewSQLの技術革新、マルチテナンシーの実現と高いスケーラビリティを提供
- KubeCon Europe 2023よりGitHubがMySQL互換のVitessを使った事例のセッションを紹介
- EnterpriseDBのCTOに聞いた、エンタープライズ版PostgreSQLのこれから
- オラクル、「MySQL 5.7 Development Milestone Release(DMR)」をリリース
- ビッグデータ処理基盤とRDBの連携の必要性およびPostgreSQL FDWの概要
- オラクル、可用性と拡張性の高いMySQL構成の管理を簡素化する「MySQL Fabric」を発表
- MySQL Cluster:NoSQL+SQL、NoSQLも使える高可用性インメモリRDBMS