SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

連載記事

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CodeZine BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659428980688-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
【デブサミ2012】セッションレポート(AD)

【デブサミ2012】16-C-2 レポート
ピグライフのスケ―ラビリティを支える2つのインフラ「MongoDB」「Chef」

  • X ポスト
  • このエントリーをはてなブックマークに追加

 本稿では、「Developers Summit 2012」(デブサミ2012)において、2月16日に行われた株式会社サイバーエージェント 桑野章弘氏、並河祐貴氏によるセッション「大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~」の内容を紹介する。  ピグライフは、サイバーエージェントがアバターチャット「アメーバピグ」内で提供するソーシャルゲームで、ガーデニングや料理・裁縫、ティーパーティー、牧羊などを楽しむことができる。2011年5月31日のオープンから3週間で100万ユーザを獲得し、2012年1月現在の会員数は360万人。サーバーサイドJavaScript(node.js)など先進的な技術の取り組みでも知られるが、本セッションではその一端が開発者自身によって語られた。

  • X ポスト
  • このエントリーをはてなブックマークに追加

株式会社サイバーエージェント 桑野章弘氏
株式会社サイバーエージェント 桑野章弘氏
株式会社サイバーエージェント 並河祐貴氏(インフラエンジニア)
株式会社サイバーエージェント 並河祐貴氏(インフラエンジニア)

大規模環境でもスケーラビリティや冗長性を確保するMongoDB

 ピグライフはアメーバピグのサービス内ゲームであるが、まったく別のシステムで動作しており、アーキテクチャもまったく異なる。アメーバピグがJava+MySQLという従来型のWebアプリケーションであるのに対し、ピグライフはアプリケーションサーバがNode.js、データベースサーバにはMongoDBを採用している。

 MongoDBは、オープンソースのドキュメント指向データベースで、米10gen社によって開発・提供されている。いわゆるNoSQLの一種だが、KVSほど単純ではなく、JSONをベースとした「BSON(バイナリJSON)」によるスキーマレスで柔軟なデータモデルであることが特長だ。

 本セッションの前半では、ビグライフでMongoDBを採用した理由とその運用成果について桑野章弘氏が発表した。その理由としては、次のようなアーキテクチャの課題を解決するためだという。

  • 開発スピード
  • サービスアーキテクチャの課題
  • システムアーキテクチャの課題
  • 冗長化
  • スケーラビリティ

 開発スピードの面で桑野氏がまず挙げたのは、Node.jsとの相性の良さである。データモデルがJSONベースで統一されるためシリアライズが不要になる。また、データ管理が柔軟に行えるため、機能追加時にSQLサーバならカラム追加が必要になるところが、スキーマにオブジェクトを追加してやることで、新しい機能に必要なデータセットをすぐに追加できる。

 また、データベースサーバーにつきものの課題である冗長化とスケーラビリティに関しては、それぞれSharding(シャーディング)とReplicaSets(レプリカセット)という機能によって解決できる。

 Shardingはデータ分散の仕組みで、データを自動でChunk(チャンク)に分割し、複数のmongodに分散して配置してくれる。これによってサーバの負荷を分散することができ、サーバを「横に増やしていく」スケーラビリティが実現できる。どのサーバにどのチャンクがあるかというシャード情報はmongocが管理している。

 なお、MongoDBは、mongos、mongoc、mongodから構成される。mongodはShardingされたデータベースサーバー、mongocはその管理情報を持つサーバー、mongosはクライアントとShardingされたサーバー群を仲介し、ここではアプリケーションサーバに同居する形になっている。

 ReplicaSetsは非同期レプリケーションの仕組みで、自動でプライマリ/セカンダリ構成を取ることができる。プライマリ昇格の決定のために実サーバが3台は必要になる(ただし投票権のみを持っているプロセスを利用してサーバを少なく保つことも可能)。

 こういった機能により、アプリ側の実装コストは軽く、スケーラビリティと冗長性を確保したシステムが構築できた。現在は、140台という大規模のMongoDB群を運用している。ここで得られた障害対応などのノウハウが説明された。

 まず、各サーバプロセスのキャパシティ・プランニングについて。mongocでは冗長性は同期書き込み(2フェーズコミット)で確保されているが、スケーラビリティがないので潤沢なリソースを使える状態しておくほうがよいという。

 mongodは定期的にディスクに書き出すので、ディスクI/Oにはある程度の性能が必要だという。また、データをメモリキャッシュするため、メモリは多ければ多いほどよい。mongostatで状況を確認し、エラーが多くなったらメモリやShardingを追加する運用が必要だ。

 そのほか運用のポイントとしては、explain()でクエリの確認をし、必要な箇所にindexを貼る。それにより、クエリの高速化を図ることができる(例では最大100倍の高速化が見られた)。2.0で高速化・コンパクト化されているのでバージョンアップしたほうがよい。

 バックアップでは、fsyncコマンドでレプリケーションを一時停止してdumpを取得する。シャードごとに実行することで完全なデータが取れること。グローバルロックを避けるためには、書き込みの多いコレクションを別のクラスタに分ける。今後、コレクションレベルロックが実装されれば対応されること。

 Chunkの偏りはAutoBalanceで勝手に移動してくれるが、データアクセス頻度ではないので、新しく入ってきたデータが頻繁にアクセスされると負荷分散にならない。手動でChunkを移動してバランスすると、全mongosの再起動が必要となるため運用が必要になる。今後の課題だが、2.0系ではAutoBalanceが改善されているようだ。

 このように仕様や改善の余地はあるものの、 MongoDBはスケーラビリティを確保する要素は十分に持っており、ソーシャルゲームやモバイルゲームで開発するにはよいプロダクトで、サービスを安定運用しながら成長させるために大切な要素になる、というのがサイバーエージェントでの認識だ。

MongoDBの構成
MongoDBの構成

次のページ
急なサーバ増設の負荷を軽減するChef

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【デブサミ2012】セッションレポート連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6452 2012/03/29 14:00
" ); }

おすすめ

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  1. 6
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  2. 7
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  3. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  4. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  6. 6
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  7. 7
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  8. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  9. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  10. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  4. 4
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    Google、社内AIエージェント「Google Agentspace」発表
  7. 7
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  8. 8
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  9. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  10. 10
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

メールバックナンバー

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  1. 6
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  2. 7
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  3. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  4. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  6. 6
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  7. 7
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  8. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  9. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  10. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  4. 4
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    Google、社内AIエージェント「Google Agentspace」発表
  7. 7
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  8. 8
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  9. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  10. 10
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス