Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

負荷がたかいいんだから~♪(仮)

1,663 views

Published on

ゲーム運用を行っていると避けては通れない負荷対策
いかににリリース前に負荷対策を行うか、運用中サーバメンテから復帰直後の集中したアクセスからのサーバダウン立ち上げ後即サーバダウンの負のスパイラルからの脱却等、運用事例をあげながらこれまで行ってきた負荷対策のノウハウを纏めたいと思います。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

負荷がたかいいんだから~♪(仮)

  1. 1. 負荷がたかいいんだから~♪(仮) Cygames サーバーサイドエンジニア 濱田 洋平
  2. 2. 自己紹介 濱田洋平 サーバーサイドエンジニア 2010年からCAグループ内の会社で ソーシャルゲームを作っています。
  3. 3. アジェンダ 1.失敗事例と対応方法 CASE1 memcached CASE2 DB垂直分割 2.弊社サーバー構成 3.検証中のサーバー構成 4.まとめ 5.伊藤さんより負荷テストの話し ※前職での事例になります。
  4. 4. CASE1 memcached memcachedとは? メモリーキャッシュシステムです。 利用方法 DBクエリーの結果をキャッシュして いました。
  5. 5. CASE1 memcached MySQL memcashed Web Server1 Linux (Cent OS) PHP Webサーバーとmemcashedは別ラック にありました。
  6. 6. CASE1 memcached 障害発生 Webサーバーからmemcashedへの レイテンシーが悪化 原因 ラック間の通信量が5倍に増えて帯域を 圧迫してました。
  7. 7. CASE1 memcached MySQLはメモリーにのっていたら早いです 適時キャッシュと使い分けましょう。 サーバーメンテナンス明けの負荷が急激に 上がる場合を想定してユーザーデータを 3秒間キャッシュするだけでもMySQLの 負荷が下がります。
  8. 8. CASE1 memcached memcashed の分割 ロードバランサー MySQL memcashed Web Server1 memcashed memcashed memcashed Web Server2 Web Server3 1.ローカルとグローバルキャッシュで分割 2.グローバルキャッシュの水平分割 memcashed memcashed
  9. 9. CASE2 DB垂直分割 MySQL (master) Web Server1 MySQL (slave) masterからslaveにレプリケーション されます。 masterは書き込みslaveは読みこみ専用に すれば負荷分散ができる!
  10. 10. CASE2 DB垂直分割 障害発生 レイドイベント中カスタマーサポートから 倒したはずのレイドボスが倒した事に なってないって問い合わせが着信してます! 原因 レプリケーション遅延が発生していました。 今回はupdateの回数が秒間あたり 普段の○○倍に・・・・ ピークタイムおそろしす
  11. 11. CASE3 DB垂直分割 MySQL0 (master) Web Server1 MySQL0 (slave) MySQL1 (master) MySQL1 (slave) MySQL2 (master) MySQL3 (slave) DBの水平分割 boss_id Hit_point 3 500 6 350 9 400 boss_id%3=格納DB MySQL0 boss_id Hit_point 1 1000 4 2000 7 300 MySQL1 boss_id Hit_point 2 600 5 400 8 300 MySQL2 トランザクション処理でatomicなデータは DBを増やして分割しました。
  12. 12. CASE3 DB垂直分割 DBの水平分割時の制約(今回の場合) joinができなくなります。 スケールしようとするとキーを元にレコード を再振り分けしなければならない。。
  13. 13. データベース水平分割 構成を纏めると 1.マスターデータなどサーバー間で値が変わらない データはローカルにキャッシュする 2.クエスト進捗情報などサーバー間で値が変化するデーターは グローバルキャッシュにキャッシュする 3.トランザクション処理が入りatomicなデーターは水平分割 したDBに格納する。 ロードバランサー memcashed Web Server1 memcashed memcashed memcashed Web Server2 Web Server3 MySQL0 (master) MySQL1 (master) MySQL2 (master) memcashed memcashed
  14. 14. こんな構成を検討しています Web Server1 Linux (Cent OS) memcashed1 memcashed2 memcashed3 NoSQL NoSQL memcached MySQL (Master) データベース水平分割 Data Storage Cluster NoSQL NoSQL NoSQL NoSQL NoSQL NoSQL twemproxy Node.js Expres4 MySQL (Master) MySQL (Master)
  15. 15. NoSQL NoSQL(Not only SQL) リレーショナルデーターベース以外のデーターベースを指します 特徴 ・水平分割がしやすい ・データーの取得/格納が高度に最適化している ・リレーションされてない ・トランザクションが苦手(できないものもある) Hbase MongoDB Cassandra DynamoDB
  16. 16. こんな構成を検討しています 水平分割が必要になるデーターはData Storage Clusterに格納する atomicな操作が必要なデーターはRDSに格納する Web Server1 Linux (Cent OS) memcashed1 memcashed2 memcashed3 NoSQL NoSQL memcached MySQL (Master) データベース水平分割 Data Storage Cluster NoSQL NoSQL NoSQL NoSQL NoSQL NoSQL twemproxy Node.js Expres4 MySQL (Master) MySQL (Master)
  17. 17. まとめ 1.マスターデータなどサーバー間で値が変わらない データはローカルにキャッシュする 2.クエスト進捗情報などサーバー間で値が変化するデーターは グローバルキャッシュにキャッシュする 3.トランザクション処理が入りatomicなデーターは水平分割 したDBに格納する。 4.DBのスケールが必要になるデーターはNoSQLに格納する。 5.キャッシュはあくまでキャッシュ使いどころに注意する。
  18. 18. 今回ご紹介した事例 リリースしてから障害が発生した例ばかりです・・・ コーディング中に注意していたら・・・ 負荷テストをしっかりしていたら防げた事象でもあります。 今回は伊藤さんにも資料を用意してもらったのでここからは 伊藤さんより負荷テストの話をお聞きください。

×