SlideShare une entreprise Scribd logo
1  sur  81
Télécharger pour lire hors ligne
AmebaのMongoDB
                  活用事例

                株式会社サイバーエージェント
                アメーバ事業本部ピグディヴィジョン



                                桑野 章弘




12年8月24日金曜日
アジェンダ

   n Amebaのサービス
   n サービス環境の変遷
   n サービスを支えるMongoDB
   n 困ったことなど
   n 運用について
   n まとめ




12年8月24日金曜日
自己紹介

   n 桑野章弘
      l サイバーエージェント
          l Ameba を運営しています。
          l ピグソーシャルゲームの運用/構築を担当

      l Twitter
          l @kuwa_tw

      l Blog
          l http://d.hatena.ne.jp/akuwano/




12年8月24日金曜日
ピグライフ




12年8月24日金曜日
ピグライフ

   n サービス情報
      l 2011/05/31オープン
      l 会員数360万人(2012/01現在)
      l サービス開始3週間で100万人突破
      l 接続数:20万同時接続




12年8月24日金曜日
ピグアイランド




12年8月24日金曜日
ピグアイランド

   n サービス情報
      l 2012/05/22オープン
      l サービス開始5日で100万人突破
      l 接続数:約10万同時接続




12年8月24日金曜日
ピグカフェ




12年8月24日金曜日
ピグカフェ

   n サービス情報
      l 2012/08/21オープン




12年8月24日金曜日
様々なサービスをピグ
    プラットフォームで
       展開中
12年8月24日金曜日
これらのサービスは全
   てMongoDBを使っ
      ています
12年8月24日金曜日
サービス環境の変遷



12年8月24日金曜日
n まずは弊社サービスの成長の変遷について説明し
     ます




12年8月24日金曜日
アーキテクチャ

   n アプリケーションサーバ
      l Node.js
      l Nginx
   n データストアサーバ
      l MongoDB




12年8月24日金曜日
アーキテクチャ
                                                       BackEnd
                           FrontEnd


                                                                              ユーザ/エリア等の状態
                                                                                 データ
              staticサーバ                   Node.jsサーバ
                                          Socketサーバ




                                                                 mongodbサーバ
                   Flashデータ                必要なデータの取得
                 →リクエスト/取得


       HTTP

                          WebSocket接続



                                         ・ユーザ情報
                                        ・チャットデータ
                                        →リクエスト/取得




                    ユーザ
               (ブラウザ:Flash)




12年8月24日金曜日
[ピグライフ]の変遷



12年8月24日金曜日
ピグライフ

   n リリースから現在
      l βテスト時代
      l リリース後
      l 現在




12年8月24日金曜日
ピグライフ

   n リリースから現在
      l βテスト時代
      l リリース後
      l 現在




          どんなフェーズを経たか



12年8月24日金曜日
ピグライフ:βテスト時代

   n 4/26∼5/31
      l テストユーザ数5000∼30000
      l 毎日リリース、機能追加、インフラ構成変更
      l サーバも最小限を用意




12年8月24日金曜日
ピグライフ:βテスト時代

              βテスト時に実
                 装


                                      6

                             mongos

                                          行動ログの保存
       Staticサーバ        Node.jsサーバ                  MongoDB Log




                   MongoDB



12年8月24日金曜日
ピグライフ:リリース後

   n 問題点洗い出しのフェーズ
      l Node.jsのサーバや、mongodbも、パフォーマン
         スが出ていなかったため増設
      l Swfファイルをnode.jsのサーバから静的ファイル専
         用のサーバへと切り出す




12年8月24日金曜日
ピグライフ:リリース後

   n 5/31 ∼
      l ピグライフ、正式リリース
      l 人気が爆発、予想以上の伸び
      l 開始3週間(6/22)で100万人突破
      l とにかく増設の時期




12年8月24日金曜日
リリース時構成

                                                  大量追加




                   3                      44

                                 mongos
                                               行動ログの保存
                                               サーバにも取得
       Staticサーバ            Node.jsサーバ                     MongoDB Log




                                                         1シャード追加
                                                         (合計4シャー
                                                            ド)




                       MongoDB



12年8月24日金曜日
ピグライフ:リリース後

   n パフォーマンス確保のフェーズ
      l ボトルネック調査
      l 状況を見つつサーバ台数、リソースの確保




12年8月24日金曜日
ピグライフ:現在

   n 9/1 ∼
      l 順調な成長
      l 開始3ヶ月弱(8/22)で200万人突破




12年8月24日金曜日
現在時構成
                    リリース時切替


                                                               高スペックサー
                                                               バにリプレイス



              5         5                 10              10
                                                        Node.jsサーバ_B系
                               mongos             mongos

Staticサーバ_A系 Staticサーバ_B系 Node.jsサーバ_A系        行動ログの保存
                                                 DB統合



                                                         23シャード追
                                                          加(合計27
                             ・・・・・
                                                         シャード=81
                                                            台)



                   MongoDB



12年8月24日金曜日
ピグライフ:現在

   n 運用改善のフェーズ
      l メンテ時間短縮のため稼働グループを分割
          l A系、B系での切替

      l 構成はシンプルにしていく
      l CDNなどの導入検討
         (CDNを入れられるように仕様変更)




12年8月24日金曜日
ピグライフ:成長速度

   n 成長速度
      l リリースから3ヶ月程度で、サーバ規模としては8倍
         に。それにともなって、トラフィック(1.3Gbps)、
         総コネクション数(18万)も増加。
      l その期間は3ヶ月余り。3週間の伸びは単位にすれば
         30倍

         サービスの予想以上の成長


12年8月24日金曜日
サービスを支える
              MongoDB

12年8月24日金曜日
この成長速度を支えた
     MongoDBの基本的
         な機能
12年8月24日金曜日
MongoDBの構成
アプリケーションサー
     バ




   mongos            Mongod[ShardA]




                     Mongod[ShardB]




        mongoc
                     Mongod[ShardC]




12年8月24日金曜日
アーキテクチャについて

   n システムアーキテクチャ
      l スキーマレス
      l 冗長化
          l ReplicaSets

      l スケーラビリティ
          l Sharding




12年8月24日金曜日
アーキテクチャの課題

   n スキーマレスなデータ構造による柔軟なデータ管
     理
      l ユーザ情報なども柔軟に持つことができるので、機能
         追加時等が比較的楽
      l 次ページ例




12年8月24日金曜日
アーキテクチャの課題

   n スキーマレスなデータ構造
      l ユーザーコレクションに趣味を追加したい場合

                      {
          "_id" : "1234567889",
           "userid" : "akuwano",
      "username" : "Akihiro Kuwano"
                      }


                      {
          "_id" : "1234567889",
           "userid" : "akuwano",
            "hobby" : Movie ,
      "username" : "Akihiro Kuwano"
                      }




12年8月24日金曜日
アーキテクチャの課題

   n ReplicaSets
      l 相互死活監視&投票により冗長性を保つ。最小単位は
         3台。

                      プライマリ




              セカンダリ       セカンダリ




12年8月24日金曜日
アーキテクチャの課題

   n ReplicaSets
      l 相互死活監視&投票により冗長性を保つ。最小単位は
         3台。

        生きているサー       プライマリ
        バで投票が行わ
        れ新しいプライ
        マリが選ばれる




              セカンダリ   セカンダリ → プライマリ




12年8月24日金曜日
アーキテクチャの課題

   n Sharding
      l データをChunkの細かい粒度に分割する。
         各mongodに分散して渡すことで各サーバの負荷を
         分散します




12年8月24日金曜日
MongoDBの構成
                 Sharding
アプリケーションサー                                    ReplicaSetsに
                 データをChunk
     バ                                        よりサーバの冗長
                 の単位に分ける
                                              性を確保
         DATA


   mongos


                             Mongod[ShardA]




                             Mongod[ShardB]

        mongoc



                             Mongod[ShardC]




12年8月24日金曜日
MongoDBの構成
                          Sharding
アプリケーションサー                                             ReplicaSetsに
                          データをChunk
     バ                                                 よりサーバの冗長
                          の単位に分ける
                                                       性を確保
  ChunkA ChunkB ChunkC



   mongos

               mongocは
                                      Mongod[ShardA]
               シャーディング情
               報を持つ



                                      Mongod[ShardB]

         mongoc


     ChunkA -> ShardA
     ChunkB -> ShardB                 Mongod[ShardC]
     ChunkC -> ShardC




12年8月24日金曜日
MongoDBの構成
アプリケーションサー                                               ReplicaSetsに
     バ                                                   よりサーバの冗長
                        Sharding
                        データをChunk                        性を確保
                        の単位に分ける

   mongos

              mongocは
                               ChunkA   Mongod[ShardA]
              シャーディング情
              報を持つ



                               ChunkB   Mongod[ShardB]

        mongoc


     ChunkA -> ShardA
     ChunkB -> ShardB          ChunkC   Mongod[ShardC]
     ChunkC -> ShardC




12年8月24日金曜日
アーキテクチャの課題

   n MongoDBのこれらの基本機能により、アプリ
     側の実装コストは軽くなります。
   n 前述した、9台→100台への変更においても、ア
     プリ側のDB接続部分の変更点は殆どありませ
     ん。
   n スケーラビリティを保ったまま、シンプルなサー
     ビス構築を行うことができています。




12年8月24日金曜日
使いどころ



12年8月24日金曜日
まとめ

   n データ量が大き過ぎない
   n 書き込みが多過ぎない
   n 単位時間あたりの処理データが各シャードのメモ
     リ量を超えない処理は得意
      l 現在のピグ系のリアルタイム処理には合っている
   n ホットデータが無い様なデータの使い方は苦手




12年8月24日金曜日
困ったことについて



12年8月24日金曜日
運用中に困ったことに
       ついて


12年8月24日金曜日
n クラスターのスローダウン
      l 必要なデータを一気にデータをインポートした場合
      l oplogデータ量範囲を超えてレプリケーションが停止
      l 一度に入れたため、PrimaryShardにChunkが溜
         まってしまいI/Oバウンドに
      l 負荷が高いのでBalancerは動かないためクラスタの
         スローダウン


         →Oplogの容量を増やすことができるのでそれらで対
         応


12年8月24日金曜日
n シャード設定のスローダウン
      l ほんとに突然パフォーマンスダウンする
         「10分前は動いてたけど、、、」
      l PrimaryShardはリソースを潤沢な状態にする
      l 各シャードのmmapの容量が実メモリを超えてきた
         ら注意する



         →シャード設定は定期的に確認&シャードの設定を自
         動化


12年8月24日金曜日
n データ肥大
      l 運用していくに連れてデータの肥大化が起きます
      l 定期的なデータのコンパクションが必要です
      l repairコマンドは、データ容量と同容量のスペース
         を利用するので注意
      l データ容量が小容量かつ、一時的にMongoDBのク
         ラスタを止められるなら、データdrop→データ
         resoreの方が簡単です。




12年8月24日金曜日
n ドライバ関連
      l Node.jsのドライバのバージョンによってデータの持
         ち方などが異なる場合があった(現在は解消)ので、
         バージョンアップは慎重に行ないましょう




12年8月24日金曜日
日々の運用



12年8月24日金曜日
ここからは実際の運用
    でやっていること

12年8月24日金曜日
n MongoDBに使用するハードウェア
      l CPU
          l (現在は)CPUはあまり負荷が来ないためそれほど良い物で
              なくて良い
          l そのかわりノードを増やすことになるのであればラックの効
              率を上げるため消費電力の少ないものを選択する




12年8月24日金曜日
n MongoDBに使用するハードウェア
      l メモリ
          l 積めば積むほどキャッシュが効くのでできるだけ積む
          l 現在は1ノード32GBのサーバを用意




12年8月24日金曜日
n MongoDBに使用するハードウェア
      l DISK
          l こちらも書き込み、読み込みが早いに越したことは無い
          l 今までは、SAS * 4 RAID10 -> SSD * 2 RAID0となっ
             ている。
          l 現在はSSDはSASの3倍のiopsが出ています。
          l FileSystemはxfs or ext4(高速なfallocate()がサ
             ポートされている必要があるため)




12年8月24日金曜日
n MongoDBに使用するハードウェア
      l DISK
          l ioDriveでの検証に関しては、現状では8000opsを超えた
              位でReplicaSetsのoplogの転送が止まる事を確認してい
              ます。
          l 速度は3倍以上出ていたので、単体で使用するようなデータに
              は使えるかもしれません。(試してないです)
          l 2.2以降では改善されている可能性があるので再検証予定




12年8月24日金曜日
n バックアップ
      l mongodump
      l ReplicaSetsのDelay




12年8月24日金曜日
n バックアップ
      l mongodump
          l mongosに対してmongodump実行するのはバックアッ
              プとしては一番簡単です。
          l 稼働中にかけると完全なポイントイン・タイムのバックアッ
              プにはなりません




12年8月24日金曜日
n バックアップ
      l 稼働中にスナップショットバックアップを取得
          l 1,mongos経由でAutoBalancingをOff
          l 2,各レプリカセットにfsync lockをかける
          l 3,各mongodからデータを取得する(AWSなら
              Snapshotがいいですね)
          l 4,各レプリカセットにfsync unlock
          l 5,mongos経由でAutoBalancingをOn




12年8月24日金曜日
バックアップの構成
                 1、Chunkが
アプリケーションサー                                   2,fsync lock
                 バックアップ中に
     バ                                       をかけることで更
                 移動させない
                                               新を止める



   mongos


                            Mongod[ShardA]
                                                 3,各シャードか
                                                 らデータを取得




                            Mongod[ShardB]

        mongoc



                            Mongod[ShardC]




12年8月24日金曜日
n バックアップ
      l ReplicasetsのDelay
          l バックアップと言うよりはオペミスの防止
          l 常に最新の状態よりも一定期間古い状態となる、
              Replicasetsを追加します




12年8月24日金曜日
RS Delayの構成
アプリケーションサー
                                    この Replica
     バ
                                   Sets のみ、他の
                                   RSよりも3時間
                                   前のデータを持つ

   mongos


                      Mongod[ShardA]




                      Mongod[ShardB]
        mongoc



                      Mongod[ShardC]




12年8月24日金曜日
n Index
       l indexが効いているかはexplain()で確認
       l できるだけPK=_id で検索する実装にする




 replSetTest1001:PRIMARY> db.User.find({'Field01': 'test'}).explain()
 {
     "cursor" : "BtreeCursor testIndex_1",
     "nscanned" : 1,
     "nscannedObjects" : 1,
     "n" : 1,
     "millis" : 7,
     "nYields" : 0,




12年8月24日金曜日
n ロック
      l 同じサーバ上に異常に書き込みの多いコレクションが
         あるとクラスタ全体のアクセスに影響するため、コレ
         クションを分ける
      l アプリ実装はコレクション間を疎結合で作る
      l 2.2系でDBレベルロックが実装されるとDBを分けれ
         ばよいのでこの様な手順は要らない




12年8月24日金曜日
n ロック




              Collection A   Collection B   Collection C




12年8月24日金曜日
n ロック




              Collection A   Collection C   Collection B




12年8月24日金曜日
n ロック




              Collection A   Collection C   Collection B




12年8月24日金曜日
n 運用効率化
      l どうしても台数が多くなる傾向にあります。
      l そのため「標準のコマンドだと表示が多すぎて見づら
         い」「今のマスターの一覧が簡単に出したい」等の不
         満がでます。
      l これらはスクリプト作成等で対応しています、このあ
         たりもJSONで各種データを取ってこれるために管理
         ツールなどは作りやすいです。




12年8月24日金曜日
n 運用効率化 :運用スクリプトの内容
      l ロックタイムの取得
      l シャードに入っているmongod一覧のリスト出力
      l レプリカセットのマスター検索
      l レプリカセットのpriority検索
      l printShardingStatusの整形
      l レプリカセット一括作成/設定変更(現在のRSに
         Delayホスト追加するなど)




12年8月24日金曜日
n 各種コマンド、ステータスなど
      l トレンドが見たい
      l 現状が把握したい




12年8月24日金曜日
n 各種コマンド、ステータスなど
      l mongostat
      l mongotop
      l mongosniff




12年8月24日金曜日
n mongostat
      l クエリや、プロセスの現状を確認するコマンド



 $ ./mongostat --host 192.168.8.41:27018,192.168.8.62:27018
               insert query update delete getmore command flushes mapped
 vsize res faults locked % idx miss %   qr¦qw ar¦aw netIn netOut conn
 set repl   time
 192.168.8.41:27018         0 361 132       0  209   437     0 36.1g 76.2g
 14.3g    1   2.2       0    0¦0   2¦0 85k 698k 3056 RSTest1001 M
 11:16:57
 192.168.8.62:27018         0 384 164       0  245   480     0 30.1g 63.9g
 15.6g    0     2      0    0¦0   2¦0 96k 652k 2587 RSTest1002 M
 11:16:57




12年8月24日金曜日
n mongostat - 見るべき項目
      l faults - 1秒当りのページフォールト数
      l Locked % - グローバルライトロックの時間割合
      l idx miss % - indexのヒット率の時間割合
      l qr¦qw - 読み込みキュー¦書き込みキュー の大きさ




12年8月24日金曜日
n mongostat - 見るべき項目
      l faults が多い場合
         キャッシュメモリ溢れの可能性があるので、メモリ、
         もしくはサーバを増設
      l Locked % が高い場合
         書き込みのクエリを見直す or クラスタ分割。
      l qr¦qw が高い場合
         サーバ負荷が低ければ、ロックの可能性を疑う。負荷
         が高ければ単純なクエリ増による高負荷を疑う。




12年8月24日金曜日
n mongotop
     l 現在重いmongodのどのcollectionへアクセスがか
        かっているかを確認したりとかできまする。
     l 障害の時がメイン

 $ /usr/local/mongodb2_1/bin/mongotop --host
 mongos_ip --port 27018
 connected to: mongos_ip
                   ns total     read     write      writeに時間
 2012-05-23T02:14:12                                がかかってい
            local.oplog.rs 1929ms 1929ms 0ms
     life_prd_main.TestOnline 0ms 500ms      10ms
       life_prd_main.Test2Soil 8ms   0ms  8ms




12年8月24日金曜日
n mongosniff
      l 最後はパケットキャプチャですので、何か会った際の
         アクセス状況の確認が可能
      l mongosのアクセス状況とか、複雑なクエリを見た
         い場合はこれで見るのが良い

 # mongosniff --source NET eth0 27017
 # 以下にパケットがズラズラっと並ぶ


 127.0.0.1:55858 -->> 127.0.0.1:27017 testdatabase.TestCol1 89 bytes
 id:kjkjkjkj     14086840
      query: { _id: "1234567891234567" } ntoreturn: -1 ntoskip: 0
 127.0.0.1:27017 <<-- 127.0.0.1:55858 205 bytes id:77383268
 2000171624 - 14086840




12年8月24日金曜日
n ステータス確認・変更
      l profiling
      l loglevel変更
      l db.adminCommand("connPoolStats")
      l db.serverStatus()
      l db.currentOp()
      l db.collection.stat()
      l db.stats()




12年8月24日金曜日
まとめ



12年8月24日金曜日
まとめ

   n まだ各所に未熟な点はありますが、運用を安定さ
     せる事で、綺麗な構成でスケーラビリティを確保
     したサービスを構築することができるプロダクト
     になる可能性がMongoDBにはあると考えてい
     ます。




12年8月24日金曜日
まとめ




   n 今後のアップデートなども様々な物が控えてお
     り、現在の問題点も徐々に改善されると考えてお
     ります。




12年8月24日金曜日
まとめ



   n ただ、NoSQLは適材適所、という言葉もあり、
     徐々に使って慣れていくのが大事だと思います。
     スモールスタートでまずは使ってみてはどうで
     しょうか。




12年8月24日金曜日
ご清聴ありがとう
              ございました

12年8月24日金曜日

Contenu connexe

Tendances

マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
脆弱性ハンドリングと耐える設計 -Vulnerability Response-脆弱性ハンドリングと耐える設計 -Vulnerability Response-
脆弱性ハンドリングと耐える設計 -Vulnerability Response-Tomohiro Nakashima
 
クラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーククラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-RetryフレームワークY Watanabe
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)Uptime Technologies LLC (JP)
 
NoSQLデータベースと位置情報
NoSQLデータベースと位置情報NoSQLデータベースと位置情報
NoSQLデータベースと位置情報Koji Ichiwaki
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoTakayuki Shimizukawa
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜Naruhiko Ogasawara
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説Masahiko Sawada
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...Google Cloud Platform - Japan
 
DDDモデリング勉強会 #6
DDDモデリング勉強会 #6DDDモデリング勉強会 #6
DDDモデリング勉強会 #6株式会社Jurabi
 

Tendances (20)

マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
脆弱性ハンドリングと耐える設計 -Vulnerability Response-脆弱性ハンドリングと耐える設計 -Vulnerability Response-
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
 
クラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーククラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーク
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
NoSQLデータベースと位置情報
NoSQLデータベースと位置情報NoSQLデータベースと位置情報
NoSQLデータベースと位置情報
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
 
DDDモデリング勉強会 #6
DDDモデリング勉強会 #6DDDモデリング勉強会 #6
DDDモデリング勉強会 #6
 

En vedette

CyberAgentにおけるMongoDB
CyberAgentにおけるMongoDBCyberAgentにおけるMongoDB
CyberAgentにおけるMongoDBAkihiro Kuwano
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティスAkihiro Kuwano
 
18 a-6 ameba pigg backend practice 20110217
18 a-6 ameba pigg backend practice 2011021718 a-6 ameba pigg backend practice 20110217
18 a-6 ameba pigg backend practice 20110217Akihiro Kuwano
 
勉強会コミュニティがぼくの エンジニア人生にもたらした事。 あと、NoSQLとの付き合い方。
勉強会コミュニティがぼくの エンジニア人生にもたらした事。 あと、NoSQLとの付き合い方。勉強会コミュニティがぼくの エンジニア人生にもたらした事。 あと、NoSQLとの付き合い方。
勉強会コミュニティがぼくの エンジニア人生にもたらした事。 あと、NoSQLとの付き合い方。Akihiro Kuwano
 
後悔しないもんごもんごの使い方 〜サーバ編〜
後悔しないもんごもんごの使い方 〜サーバ編〜後悔しないもんごもんごの使い方 〜サーバ編〜
後悔しないもんごもんごの使い方 〜サーバ編〜Akihiro Kuwano
 
やさぐれギンガさんのアーキテクチャ入門(ためしてガッテン)(仮)
やさぐれギンガさんのアーキテクチャ入門(ためしてガッテン)(仮)やさぐれギンガさんのアーキテクチャ入門(ためしてガッテン)(仮)
やさぐれギンガさんのアーキテクチャ入門(ためしてガッテン)(仮)Akihiro Kuwano
 
MongoDBの可能性の話
MongoDBの可能性の話MongoDBの可能性の話
MongoDBの可能性の話Akihiro Kuwano
 
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴Akihiro Kuwano
 
WiredTigerストレージエンジン楽しい
WiredTigerストレージエンジン楽しいWiredTigerストレージエンジン楽しい
WiredTigerストレージエンジン楽しいAkihiro Kuwano
 
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。Akihiro Kuwano
 
MongoDBのアレをアレする
MongoDBのアレをアレするMongoDBのアレをアレする
MongoDBのアレをアレするAkihiro Kuwano
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
アメーバピグにおける自作サーバ運用それからどうなった
アメーバピグにおける自作サーバ運用それからどうなったアメーバピグにおける自作サーバ運用それからどうなった
アメーバピグにおける自作サーバ運用それからどうなったAkihiro Kuwano
 
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介Akihiro Kuwano
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いたAkihiro Kuwano
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)Akihiro Kuwano
 
インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)Akihiro Kuwano
 
Back end-of-innovation-6-2013-brochure
Back end-of-innovation-6-2013-brochureBack end-of-innovation-6-2013-brochure
Back end-of-innovation-6-2013-brochureLiberteks
 

En vedette (20)

CyberAgentにおけるMongoDB
CyberAgentにおけるMongoDBCyberAgentにおけるMongoDB
CyberAgentにおけるMongoDB
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティス
 
18 a-6 ameba pigg backend practice 20110217
18 a-6 ameba pigg backend practice 2011021718 a-6 ameba pigg backend practice 20110217
18 a-6 ameba pigg backend practice 20110217
 
勉強会コミュニティがぼくの エンジニア人生にもたらした事。 あと、NoSQLとの付き合い方。
勉強会コミュニティがぼくの エンジニア人生にもたらした事。 あと、NoSQLとの付き合い方。勉強会コミュニティがぼくの エンジニア人生にもたらした事。 あと、NoSQLとの付き合い方。
勉強会コミュニティがぼくの エンジニア人生にもたらした事。 あと、NoSQLとの付き合い方。
 
後悔しないもんごもんごの使い方 〜サーバ編〜
後悔しないもんごもんごの使い方 〜サーバ編〜後悔しないもんごもんごの使い方 〜サーバ編〜
後悔しないもんごもんごの使い方 〜サーバ編〜
 
やさぐれギンガさんのアーキテクチャ入門(ためしてガッテン)(仮)
やさぐれギンガさんのアーキテクチャ入門(ためしてガッテン)(仮)やさぐれギンガさんのアーキテクチャ入門(ためしてガッテン)(仮)
やさぐれギンガさんのアーキテクチャ入門(ためしてガッテン)(仮)
 
MongoDBの可能性の話
MongoDBの可能性の話MongoDBの可能性の話
MongoDBの可能性の話
 
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
 
Chef環境の闇
Chef環境の闇Chef環境の闇
Chef環境の闇
 
WiredTigerストレージエンジン楽しい
WiredTigerストレージエンジン楽しいWiredTigerストレージエンジン楽しい
WiredTigerストレージエンジン楽しい
 
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
 
MongoDBのアレをアレする
MongoDBのアレをアレするMongoDBのアレをアレする
MongoDBのアレをアレする
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
アメーバピグにおける自作サーバ運用それからどうなった
アメーバピグにおける自作サーバ運用それからどうなったアメーバピグにおける自作サーバ運用それからどうなった
アメーバピグにおける自作サーバ運用それからどうなった
 
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
 
インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)
 
Back end-of-innovation-6-2013-brochure
Back end-of-innovation-6-2013-brochureBack end-of-innovation-6-2013-brochure
Back end-of-innovation-6-2013-brochure
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 

Similaire à AmebaのMongoDB活用事例

[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いている[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いているAkihiro Kuwano
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用についてLINE Corporation
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門じゅん なかざ
 
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集Couchbase Japan KK
 
データベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみたデータベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみたHyperleger Tokyo Meetup
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムRecruit Technologies
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料Recruit Technologies
 
既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~じゅん なかざ
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringYahoo!デベロッパーネットワーク
 
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practiceマルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best PracticeHadoop / Spark Conference Japan
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展Recruit Technologies
 
081108huge_data.ppt
081108huge_data.ppt081108huge_data.ppt
081108huge_data.pptNaoya Ito
 
NoSQLとビックデータ入門編Update版
NoSQLとビックデータ入門編Update版NoSQLとビックデータ入門編Update版
NoSQLとビックデータ入門編Update版Koichiro Nishijima
 
Windows Server 2019 の Hyper-Converged Infrastructure (HCI)
Windows Server 2019 の Hyper-Converged Infrastructure (HCI) Windows Server 2019 の Hyper-Converged Infrastructure (HCI)
Windows Server 2019 の Hyper-Converged Infrastructure (HCI) Hiroshi Matsumoto
 

Similaire à AmebaのMongoDB活用事例 (20)

[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いている[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いている
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用について
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
 
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
 
データベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみたデータベース屋がHyperledger Fabricを検証してみた
データベース屋がHyperledger Fabricを検証してみた
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
20120831 mongoid
20120831 mongoid20120831 mongoid
20120831 mongoid
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 
既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~
 
AWS re:Invent2017で見た AWSの強さとは
AWS re:Invent2017で見た AWSの強さとは AWS re:Invent2017で見た AWSの強さとは
AWS re:Invent2017で見た AWSの強さとは
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
Mongo db world 2018
Mongo db world 2018Mongo db world 2018
Mongo db world 2018
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
 
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practiceマルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
 
AWSのNoSQL入門
AWSのNoSQL入門AWSのNoSQL入門
AWSのNoSQL入門
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
 
081108huge_data.ppt
081108huge_data.ppt081108huge_data.ppt
081108huge_data.ppt
 
NoSQLとビックデータ入門編Update版
NoSQLとビックデータ入門編Update版NoSQLとビックデータ入門編Update版
NoSQLとビックデータ入門編Update版
 
Windows Server 2019 の Hyper-Converged Infrastructure (HCI)
Windows Server 2019 の Hyper-Converged Infrastructure (HCI) Windows Server 2019 の Hyper-Converged Infrastructure (HCI)
Windows Server 2019 の Hyper-Converged Infrastructure (HCI)
 

Plus de Akihiro Kuwano

今日はMongoDBの話はしない
今日はMongoDBの話はしない今日はMongoDBの話はしない
今日はMongoDBの話はしないAkihiro Kuwano
 
銀河レベルのLT(とは)
銀河レベルのLT(とは)銀河レベルのLT(とは)
銀河レベルのLT(とは)Akihiro Kuwano
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
ビックデータ最適解とAWSにおける新しい武器
ビックデータ最適解とAWSにおける新しい武器ビックデータ最適解とAWSにおける新しい武器
ビックデータ最適解とAWSにおける新しい武器Akihiro Kuwano
 
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストMongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストAkihiro Kuwano
 
DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜Akihiro Kuwano
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~Akihiro Kuwano
 
Mon, Muninによる楽々監視生活
Mon, Muninによる楽々監視生活Mon, Muninによる楽々監視生活
Mon, Muninによる楽々監視生活Akihiro Kuwano
 

Plus de Akihiro Kuwano (10)

今日はMongoDBの話はしない
今日はMongoDBの話はしない今日はMongoDBの話はしない
今日はMongoDBの話はしない
 
銀河レベルのLT(とは)
銀河レベルのLT(とは)銀河レベルのLT(とは)
銀河レベルのLT(とは)
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
ビックデータ最適解とAWSにおける新しい武器
ビックデータ最適解とAWSにおける新しい武器ビックデータ最適解とAWSにおける新しい武器
ビックデータ最適解とAWSにおける新しい武器
 
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストMongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキスト
 
DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~
 
Fusion io
Fusion ioFusion io
Fusion io
 
IOAについて
IOAについてIOAについて
IOAについて
 
Mon, Muninによる楽々監視生活
Mon, Muninによる楽々監視生活Mon, Muninによる楽々監視生活
Mon, Muninによる楽々監視生活
 

AmebaのMongoDB活用事例

  • 1. AmebaのMongoDB 活用事例 株式会社サイバーエージェント アメーバ事業本部ピグディヴィジョン                 桑野 章弘 12年8月24日金曜日
  • 2. アジェンダ n Amebaのサービス n サービス環境の変遷 n サービスを支えるMongoDB n 困ったことなど n 運用について n まとめ 12年8月24日金曜日
  • 3. 自己紹介 n 桑野章弘 l サイバーエージェント l Ameba を運営しています。 l ピグソーシャルゲームの運用/構築を担当 l Twitter l @kuwa_tw l Blog l http://d.hatena.ne.jp/akuwano/ 12年8月24日金曜日
  • 5. ピグライフ n サービス情報 l 2011/05/31オープン l 会員数360万人(2012/01現在) l サービス開始3週間で100万人突破 l 接続数:20万同時接続 12年8月24日金曜日
  • 7. ピグアイランド n サービス情報 l 2012/05/22オープン l サービス開始5日で100万人突破 l 接続数:約10万同時接続 12年8月24日金曜日
  • 9. ピグカフェ n サービス情報 l 2012/08/21オープン 12年8月24日金曜日
  • 10. 様々なサービスをピグ プラットフォームで 展開中 12年8月24日金曜日
  • 11. これらのサービスは全 てMongoDBを使っ ています 12年8月24日金曜日
  • 14. アーキテクチャ n アプリケーションサーバ l Node.js l Nginx n データストアサーバ l MongoDB 12年8月24日金曜日
  • 15. アーキテクチャ BackEnd FrontEnd ユーザ/エリア等の状態 データ staticサーバ Node.jsサーバ Socketサーバ mongodbサーバ Flashデータ 必要なデータの取得 →リクエスト/取得 HTTP WebSocket接続 ・ユーザ情報 ・チャットデータ →リクエスト/取得 ユーザ (ブラウザ:Flash) 12年8月24日金曜日
  • 17. ピグライフ n リリースから現在 l βテスト時代 l リリース後 l 現在 12年8月24日金曜日
  • 18. ピグライフ n リリースから現在 l βテスト時代 l リリース後 l 現在 どんなフェーズを経たか 12年8月24日金曜日
  • 19. ピグライフ:βテスト時代 n 4/26∼5/31 l テストユーザ数5000∼30000 l 毎日リリース、機能追加、インフラ構成変更 l サーバも最小限を用意 12年8月24日金曜日
  • 20. ピグライフ:βテスト時代 βテスト時に実 装 6 mongos 行動ログの保存 Staticサーバ Node.jsサーバ MongoDB Log MongoDB 12年8月24日金曜日
  • 21. ピグライフ:リリース後 n 問題点洗い出しのフェーズ l Node.jsのサーバや、mongodbも、パフォーマン スが出ていなかったため増設 l Swfファイルをnode.jsのサーバから静的ファイル専 用のサーバへと切り出す 12年8月24日金曜日
  • 22. ピグライフ:リリース後 n 5/31 ∼ l ピグライフ、正式リリース l 人気が爆発、予想以上の伸び l 開始3週間(6/22)で100万人突破 l とにかく増設の時期 12年8月24日金曜日
  • 23. リリース時構成 大量追加 3 44 mongos 行動ログの保存 サーバにも取得 Staticサーバ Node.jsサーバ MongoDB Log 1シャード追加 (合計4シャー ド) MongoDB 12年8月24日金曜日
  • 24. ピグライフ:リリース後 n パフォーマンス確保のフェーズ l ボトルネック調査 l 状況を見つつサーバ台数、リソースの確保 12年8月24日金曜日
  • 25. ピグライフ:現在 n 9/1 ∼ l 順調な成長 l 開始3ヶ月弱(8/22)で200万人突破 12年8月24日金曜日
  • 26. 現在時構成 リリース時切替 高スペックサー バにリプレイス 5 5 10 10 Node.jsサーバ_B系 mongos mongos Staticサーバ_A系 Staticサーバ_B系 Node.jsサーバ_A系 行動ログの保存 DB統合 23シャード追 加(合計27 ・・・・・ シャード=81 台) MongoDB 12年8月24日金曜日
  • 27. ピグライフ:現在 n 運用改善のフェーズ l メンテ時間短縮のため稼働グループを分割 l A系、B系での切替 l 構成はシンプルにしていく l CDNなどの導入検討 (CDNを入れられるように仕様変更) 12年8月24日金曜日
  • 28. ピグライフ:成長速度 n 成長速度 l リリースから3ヶ月程度で、サーバ規模としては8倍 に。それにともなって、トラフィック(1.3Gbps)、 総コネクション数(18万)も増加。 l その期間は3ヶ月余り。3週間の伸びは単位にすれば 30倍 サービスの予想以上の成長 12年8月24日金曜日
  • 29. サービスを支える MongoDB 12年8月24日金曜日
  • 30. この成長速度を支えた MongoDBの基本的 な機能 12年8月24日金曜日
  • 31. MongoDBの構成 アプリケーションサー バ mongos Mongod[ShardA] Mongod[ShardB] mongoc Mongod[ShardC] 12年8月24日金曜日
  • 32. アーキテクチャについて n システムアーキテクチャ l スキーマレス l 冗長化 l ReplicaSets l スケーラビリティ l Sharding 12年8月24日金曜日
  • 33. アーキテクチャの課題 n スキーマレスなデータ構造による柔軟なデータ管 理 l ユーザ情報なども柔軟に持つことができるので、機能 追加時等が比較的楽 l 次ページ例 12年8月24日金曜日
  • 34. アーキテクチャの課題 n スキーマレスなデータ構造 l ユーザーコレクションに趣味を追加したい場合 { "_id" : "1234567889", "userid" : "akuwano", "username" : "Akihiro Kuwano" } { "_id" : "1234567889", "userid" : "akuwano", "hobby" : Movie , "username" : "Akihiro Kuwano" } 12年8月24日金曜日
  • 35. アーキテクチャの課題 n ReplicaSets l 相互死活監視&投票により冗長性を保つ。最小単位は 3台。 プライマリ セカンダリ セカンダリ 12年8月24日金曜日
  • 36. アーキテクチャの課題 n ReplicaSets l 相互死活監視&投票により冗長性を保つ。最小単位は 3台。 生きているサー プライマリ バで投票が行わ れ新しいプライ マリが選ばれる セカンダリ セカンダリ → プライマリ 12年8月24日金曜日
  • 37. アーキテクチャの課題 n Sharding l データをChunkの細かい粒度に分割する。 各mongodに分散して渡すことで各サーバの負荷を 分散します 12年8月24日金曜日
  • 38. MongoDBの構成 Sharding アプリケーションサー ReplicaSetsに データをChunk バ よりサーバの冗長 の単位に分ける 性を確保 DATA mongos Mongod[ShardA] Mongod[ShardB] mongoc Mongod[ShardC] 12年8月24日金曜日
  • 39. MongoDBの構成 Sharding アプリケーションサー ReplicaSetsに データをChunk バ よりサーバの冗長 の単位に分ける 性を確保 ChunkA ChunkB ChunkC mongos mongocは Mongod[ShardA] シャーディング情 報を持つ Mongod[ShardB] mongoc ChunkA -> ShardA ChunkB -> ShardB Mongod[ShardC] ChunkC -> ShardC 12年8月24日金曜日
  • 40. MongoDBの構成 アプリケーションサー ReplicaSetsに バ よりサーバの冗長 Sharding データをChunk 性を確保 の単位に分ける mongos mongocは ChunkA Mongod[ShardA] シャーディング情 報を持つ ChunkB Mongod[ShardB] mongoc ChunkA -> ShardA ChunkB -> ShardB ChunkC Mongod[ShardC] ChunkC -> ShardC 12年8月24日金曜日
  • 41. アーキテクチャの課題 n MongoDBのこれらの基本機能により、アプリ 側の実装コストは軽くなります。 n 前述した、9台→100台への変更においても、ア プリ側のDB接続部分の変更点は殆どありませ ん。 n スケーラビリティを保ったまま、シンプルなサー ビス構築を行うことができています。 12年8月24日金曜日
  • 43. まとめ n データ量が大き過ぎない n 書き込みが多過ぎない n 単位時間あたりの処理データが各シャードのメモ リ量を超えない処理は得意 l 現在のピグ系のリアルタイム処理には合っている n ホットデータが無い様なデータの使い方は苦手 12年8月24日金曜日
  • 45. 運用中に困ったことに ついて 12年8月24日金曜日
  • 46. n クラスターのスローダウン l 必要なデータを一気にデータをインポートした場合 l oplogデータ量範囲を超えてレプリケーションが停止 l 一度に入れたため、PrimaryShardにChunkが溜 まってしまいI/Oバウンドに l 負荷が高いのでBalancerは動かないためクラスタの スローダウン →Oplogの容量を増やすことができるのでそれらで対 応 12年8月24日金曜日
  • 47. n シャード設定のスローダウン l ほんとに突然パフォーマンスダウンする 「10分前は動いてたけど、、、」 l PrimaryShardはリソースを潤沢な状態にする l 各シャードのmmapの容量が実メモリを超えてきた ら注意する →シャード設定は定期的に確認&シャードの設定を自 動化 12年8月24日金曜日
  • 48. n データ肥大 l 運用していくに連れてデータの肥大化が起きます l 定期的なデータのコンパクションが必要です l repairコマンドは、データ容量と同容量のスペース を利用するので注意 l データ容量が小容量かつ、一時的にMongoDBのク ラスタを止められるなら、データdrop→データ resoreの方が簡単です。 12年8月24日金曜日
  • 49. n ドライバ関連 l Node.jsのドライバのバージョンによってデータの持 ち方などが異なる場合があった(現在は解消)ので、 バージョンアップは慎重に行ないましょう 12年8月24日金曜日
  • 51. ここからは実際の運用 でやっていること 12年8月24日金曜日
  • 52. n MongoDBに使用するハードウェア l CPU l (現在は)CPUはあまり負荷が来ないためそれほど良い物で なくて良い l そのかわりノードを増やすことになるのであればラックの効 率を上げるため消費電力の少ないものを選択する 12年8月24日金曜日
  • 53. n MongoDBに使用するハードウェア l メモリ l 積めば積むほどキャッシュが効くのでできるだけ積む l 現在は1ノード32GBのサーバを用意 12年8月24日金曜日
  • 54. n MongoDBに使用するハードウェア l DISK l こちらも書き込み、読み込みが早いに越したことは無い l 今までは、SAS * 4 RAID10 -> SSD * 2 RAID0となっ ている。 l 現在はSSDはSASの3倍のiopsが出ています。 l FileSystemはxfs or ext4(高速なfallocate()がサ ポートされている必要があるため) 12年8月24日金曜日
  • 55. n MongoDBに使用するハードウェア l DISK l ioDriveでの検証に関しては、現状では8000opsを超えた 位でReplicaSetsのoplogの転送が止まる事を確認してい ます。 l 速度は3倍以上出ていたので、単体で使用するようなデータに は使えるかもしれません。(試してないです) l 2.2以降では改善されている可能性があるので再検証予定 12年8月24日金曜日
  • 56. n バックアップ l mongodump l ReplicaSetsのDelay 12年8月24日金曜日
  • 57. n バックアップ l mongodump l mongosに対してmongodump実行するのはバックアッ プとしては一番簡単です。 l 稼働中にかけると完全なポイントイン・タイムのバックアッ プにはなりません 12年8月24日金曜日
  • 58. n バックアップ l 稼働中にスナップショットバックアップを取得 l 1,mongos経由でAutoBalancingをOff l 2,各レプリカセットにfsync lockをかける l 3,各mongodからデータを取得する(AWSなら Snapshotがいいですね) l 4,各レプリカセットにfsync unlock l 5,mongos経由でAutoBalancingをOn 12年8月24日金曜日
  • 59. バックアップの構成 1、Chunkが アプリケーションサー 2,fsync lock バックアップ中に バ をかけることで更 移動させない 新を止める mongos Mongod[ShardA] 3,各シャードか らデータを取得 Mongod[ShardB] mongoc Mongod[ShardC] 12年8月24日金曜日
  • 60. n バックアップ l ReplicasetsのDelay l バックアップと言うよりはオペミスの防止 l 常に最新の状態よりも一定期間古い状態となる、 Replicasetsを追加します 12年8月24日金曜日
  • 61. RS Delayの構成 アプリケーションサー この Replica バ Sets のみ、他の RSよりも3時間 前のデータを持つ mongos Mongod[ShardA] Mongod[ShardB] mongoc Mongod[ShardC] 12年8月24日金曜日
  • 62. n Index l indexが効いているかはexplain()で確認 l できるだけPK=_id で検索する実装にする replSetTest1001:PRIMARY> db.User.find({'Field01': 'test'}).explain() { "cursor" : "BtreeCursor testIndex_1", "nscanned" : 1, "nscannedObjects" : 1, "n" : 1, "millis" : 7, "nYields" : 0, 12年8月24日金曜日
  • 63. n ロック l 同じサーバ上に異常に書き込みの多いコレクションが あるとクラスタ全体のアクセスに影響するため、コレ クションを分ける l アプリ実装はコレクション間を疎結合で作る l 2.2系でDBレベルロックが実装されるとDBを分けれ ばよいのでこの様な手順は要らない 12年8月24日金曜日
  • 64. n ロック Collection A Collection B Collection C 12年8月24日金曜日
  • 65. n ロック Collection A Collection C Collection B 12年8月24日金曜日
  • 66. n ロック Collection A Collection C Collection B 12年8月24日金曜日
  • 67. n 運用効率化 l どうしても台数が多くなる傾向にあります。 l そのため「標準のコマンドだと表示が多すぎて見づら い」「今のマスターの一覧が簡単に出したい」等の不 満がでます。 l これらはスクリプト作成等で対応しています、このあ たりもJSONで各種データを取ってこれるために管理 ツールなどは作りやすいです。 12年8月24日金曜日
  • 68. n 運用効率化 :運用スクリプトの内容 l ロックタイムの取得 l シャードに入っているmongod一覧のリスト出力 l レプリカセットのマスター検索 l レプリカセットのpriority検索 l printShardingStatusの整形 l レプリカセット一括作成/設定変更(現在のRSに Delayホスト追加するなど) 12年8月24日金曜日
  • 69. n 各種コマンド、ステータスなど l トレンドが見たい l 現状が把握したい 12年8月24日金曜日
  • 70. n 各種コマンド、ステータスなど l mongostat l mongotop l mongosniff 12年8月24日金曜日
  • 71. n mongostat l クエリや、プロセスの現状を確認するコマンド $ ./mongostat --host 192.168.8.41:27018,192.168.8.62:27018 insert query update delete getmore command flushes mapped vsize res faults locked % idx miss % qr¦qw ar¦aw netIn netOut conn set repl time 192.168.8.41:27018 0 361 132 0 209 437 0 36.1g 76.2g 14.3g 1 2.2 0 0¦0 2¦0 85k 698k 3056 RSTest1001 M 11:16:57 192.168.8.62:27018 0 384 164 0 245 480 0 30.1g 63.9g 15.6g 0 2 0 0¦0 2¦0 96k 652k 2587 RSTest1002 M 11:16:57 12年8月24日金曜日
  • 72. n mongostat - 見るべき項目 l faults - 1秒当りのページフォールト数 l Locked % - グローバルライトロックの時間割合 l idx miss % - indexのヒット率の時間割合 l qr¦qw - 読み込みキュー¦書き込みキュー の大きさ 12年8月24日金曜日
  • 73. n mongostat - 見るべき項目 l faults が多い場合 キャッシュメモリ溢れの可能性があるので、メモリ、 もしくはサーバを増設 l Locked % が高い場合 書き込みのクエリを見直す or クラスタ分割。 l qr¦qw が高い場合 サーバ負荷が低ければ、ロックの可能性を疑う。負荷 が高ければ単純なクエリ増による高負荷を疑う。 12年8月24日金曜日
  • 74. n mongotop l 現在重いmongodのどのcollectionへアクセスがか かっているかを確認したりとかできまする。 l 障害の時がメイン $ /usr/local/mongodb2_1/bin/mongotop --host mongos_ip --port 27018 connected to: mongos_ip ns total read write writeに時間 2012-05-23T02:14:12 がかかってい local.oplog.rs 1929ms 1929ms 0ms life_prd_main.TestOnline 0ms 500ms 10ms life_prd_main.Test2Soil 8ms 0ms 8ms 12年8月24日金曜日
  • 75. n mongosniff l 最後はパケットキャプチャですので、何か会った際の アクセス状況の確認が可能 l mongosのアクセス状況とか、複雑なクエリを見た い場合はこれで見るのが良い # mongosniff --source NET eth0 27017 # 以下にパケットがズラズラっと並ぶ 127.0.0.1:55858 -->> 127.0.0.1:27017 testdatabase.TestCol1 89 bytes id:kjkjkjkj 14086840 query: { _id: "1234567891234567" } ntoreturn: -1 ntoskip: 0 127.0.0.1:27017 <<-- 127.0.0.1:55858 205 bytes id:77383268 2000171624 - 14086840 12年8月24日金曜日
  • 76. n ステータス確認・変更 l profiling l loglevel変更 l db.adminCommand("connPoolStats") l db.serverStatus() l db.currentOp() l db.collection.stat() l db.stats() 12年8月24日金曜日
  • 78. まとめ n まだ各所に未熟な点はありますが、運用を安定さ せる事で、綺麗な構成でスケーラビリティを確保 したサービスを構築することができるプロダクト になる可能性がMongoDBにはあると考えてい ます。 12年8月24日金曜日
  • 79. まとめ n 今後のアップデートなども様々な物が控えてお り、現在の問題点も徐々に改善されると考えてお ります。 12年8月24日金曜日
  • 80. まとめ n ただ、NoSQLは適材適所、という言葉もあり、 徐々に使って慣れていくのが大事だと思います。 スモールスタートでまずは使ってみてはどうで しょうか。 12年8月24日金曜日
  • 81. ご清聴ありがとう ございました 12年8月24日金曜日