Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介

gree_tech
November 30, 2014

[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介

SAPPORO CEDECでの講演資料です。
http://smileboom.com/sapporocedec/

<セッション内容>
サービスの効果を高めるグリー内製ツールの技術と紹介
堀口 真司 グリー株式会社 開発統括本部 インフラストラクチャ本部

お客様に、よりよいサービスを届けるために開発されたツールの紹介をします。
またそれらの需要変化や規模、技術、今後の展開などをお見せします。

gree_tech

November 30, 2014
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. Copyright © GREE, Inc. All Rights Reserved. インフラ女子 グリー株式会社 会社紹介

    六本木に 構えてます 知名度低め 偉い人がよくわからない ことをやっている グリー CTO GREE 10th
  2. Copyright © GREE, Inc. All Rights Reserved. 自己紹介 • 31歳ゲーム好き。仕組みを調べたり作ったりする方が好き。

    • 生まれも育ちも東京です。北区→渋谷区→練馬区→大田区→港区 • インフラエンジニアには珍しいゲーム業界系 (?) 家庭用ゲーム GC/PS2 家業 MMO-RPG 独自プロトコル系 PC/PS2~PSP アーケードゲーム ハードウェア系 PS3/Linux ソシャゲ インフラ系 ? 18歳 10歳 C/C++ チート・セキュリティ t
  3. Copyright © GREE, Inc. All Rights Reserved. もくじ • 用語や構成

    • 問題解決しようとしたこと • ツール一覧 • 今後の展開 • まとめ
  4. Copyright © GREE, Inc. All Rights Reserved. 用語や構成 アプリケーションサーバ データベース

    サーバ・ハードウェア ラック・データセンター プロキシ・ロードバランサ ブラウザなど CDN DNS 冗長性 柔軟性 高更新頻度 拡張性 手軽さ
  5. Copyright © GREE, Inc. All Rights Reserved. 用語や構成 アプリケーションサーバ データベース

    サーバ・ハードウェア ラック・データセンター プロキシ・ロードバランサ CDN DNS ブラウザなど • フィーチャーフォン • Android / iOS • Unity3D • Adobe AIR • flashlite • HTML5 • ほとんどモバイル端末
  6. Copyright © GREE, Inc. All Rights Reserved. ブラウザなど 用語や構成 アプリケーションサーバ

    データベース サーバ・ハードウェア ラック・データセンター CDN DNS プロキシ・ロードバランサ • LVS (DSR) • LVS (NAT) • Apache • nginx • ハコモノ
  7. Copyright © GREE, Inc. All Rights Reserved. よくある LVS(DSR) –

    Proxy - httpd LVS LVS proxy proxy proxy httpd httpd httpd httpd ….. LVS は global ip を持ち インターネットからの 入り口になる。 2台一組で片方は待機系 1 Reverse proxy へは WRR によって割り振られる。 DSR なのでレスポンスは LVS を通らず直接返す 2 httpd へは WR で割り振られる。 サーバスペックによって重みがある。 このレイヤでだいたい100台ぐらい 3 LVS または proxy のレイヤーが無いパ ターンもある VIP
  8. Copyright © GREE, Inc. All Rights Reserved. プロキシ・ロードバランサ ブラウザなど 用語や構成

    データベース サーバ・ハードウェア ラック・データセンター CDN DNS アプリケーションサーバ Apache 内で動くものが大半。 ほとんどが PHP たまに Ruby。 一部 node.js によるフルスタック
  9. Copyright © GREE, Inc. All Rights Reserved. いにしえの全部いり戦略 httpd a.game.gree.jp

    b.game.gree.jp support.gree.jp dev.gree.jp stg.gree.jp api.gree.jp 可能な限りすべてのソースを持ってる。 Virtual host によって機能使い分け。 CLI agent スマホ時代まで
  10. Copyright © GREE, Inc. All Rights Reserved. プロキシ・ロードバランサ ブラウザなど 用語や構成

    アプリケーションサーバ サーバ・ハードウェア ラック・データセンター CDN DNS データベース • MySQL • flare • MongoDB • ZooKeeper
  11. Copyright © GREE, Inc. All Rights Reserved. ふつうの MySQL app

    • Master • Slave しかし、尋常でない レベルの可用性。 ほとんどの運用も 無停止で行う
  12. Copyright © GREE, Inc. All Rights Reserved. プロキシ・ロードバランサ ブラウザなど 用語や構成

    アプリケーションサーバ データベース ラック・データセンター CDN DNS サーバ・ハードウェア • Debian • ubuntu • solaris • Fusion IO • ZFS
  13. Copyright © GREE, Inc. All Rights Reserved. 基本セット サーバ NIC3

    ipmi RAID1 No-battery SCSI-HDD SCSI-HDD 主系スイッチ 従系スイッチ 操作系スイッチ 電源 系統 A 系統 B 系統 C インターネットもローカルもこれ一本 電源は一基のみ。 系統がダウンすると 1/3 のサーバが ダウンしてしまう SCSI-HDD SCSI-HDD バッテリ管理コストの 都合でキャッシュの バッテリ無し。 用途によって 容量が違う bonding NIC1 active NIC2 standby コスパ重視 NIC4 ? 1 2 3
  14. Copyright © GREE, Inc. All Rights Reserved. プロキシ・ロードバランサ ブラウザなど 用語や構成

    アプリケーションサーバ データベース サーバ・ハードウェア CDN DNS ラック・データセンター メインは東京 ラック間転送量や 電源容量、重量など を考慮し配置する
  15. Copyright © GREE, Inc. All Rights Reserved. プロキシ・ロードバランサ ブラウザなど 用語や構成

    アプリケーションサーバ データベース サーバ・ハードウェア ラック・データセンター DNS CDN 画像やアプリパッケージ配信。 CDN 用サブドメインにて アクセスすると CDN 経由になる。 多様な使い方。
  16. Copyright © GREE, Inc. All Rights Reserved. プロキシ・ロードバランサ ブラウザなど 用語や構成

    アプリケーションサーバ データベース サーバ・ハードウェア ラック・データセンター CDN DNS カオス
  17. Copyright © GREE, Inc. All Rights Reserved. 当時の状況 ゲーム プラットフォームや

    SNS 課金など ダウンさせられない 齟齬があってもダメ 若干妥協できる 速度・効率重視 フィーチャーホン スマートフォン アプリデベロッパー 端末も多く、 利用される技術はとても多い
  18. Copyright © GREE, Inc. All Rights Reserved. 当時の状況 ゲーム プラットフォームや

    SNS 課金など • 負荷に応じてサーバをた くさん追加 • 月末月初は慎重に • ダウンしたらすぐに電話 • 気合と根性で運用 フィーチャーホン スマートフォン アプリデベロッパー 早い、安い、うまい 似てるようなゲームが多い しかし特殊な表現も一部あり
  19. Copyright © GREE, Inc. All Rights Reserved. もくじ • Cascade

    • ミドルウェア • github 公開済み • SQL や KVS 等のデータ にアクセスできる • PHP かつ仕組みが単純 なので扱える人が多い • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  20. Copyright © GREE, Inc. All Rights Reserved. Cascade • サービスを止めずにデータソースを切り替えられる

    • データへのアクセス方法が統一されている アプリケーション KVS RDBMS Cascade parameter パラメータの書き換えは頻繁 かつコードを書かない人も 編集できるぐらい単純 ORM でなく比較的ベタな SQL . クエリの可視化をしやすくすることで 問題解決やチューニングもしやすく。
  21. Copyright © GREE, Inc. All Rights Reserved. もくじ • Awacs

    • アラート発行システム • agent をインストール • 監視ツールのクローラー が限界だった • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  22. Copyright © GREE, Inc. All Rights Reserved. Awacs agent agent

    agent 各種サーバにインストール されている agent から大量 のレポートが送られてくる 1 queue filter filter topic summarizer queue mail 重要なものをまとめる 2 メールや電話を行う 3
  23. Copyright © GREE, Inc. All Rights Reserved. もくじ • Server

    (サーバ管理) • 通称ファースト環境 • サーバ機材の一生を管理 する • 納品から破棄まで • 数万台分のエントリ • 僅かながら状態を持てる • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  24. Copyright © GREE, Inc. All Rights Reserved. 昔のサーバ管理方法は • PHP

    の配列に直接書いておく • サーバの IP アドレス • サーバの用途
  25. Copyright © GREE, Inc. All Rights Reserved. Server • 他のサービスと同じように、全部いりのうちのひとつ

    • 自身のサーバも当システムに登録、利用 api.server グリーのプラットフォームや ゲーム等のデータも入っている。 データベースの運用品質も お客様向けサービスと全く同じ
  26. Copyright © GREE, Inc. All Rights Reserved. Server • データセンター、ラック、配置場所などの納品情報

    • いつ、どのように機材の役割が変わったかなどの履歴 • 生まれたて → データベースサーバとして → ウェブとして → 破棄 • ホスト名、タグ、用途、アドレスなど僅かな状態 web api
  27. Copyright © GREE, Inc. All Rights Reserved. 状態確認ツールなど • 状態確認や

    MySQL の稼働状況、トポロジの確認、 Proxy の設定変更 など CLI による一つのコマンドで出来るようになっている • 実装言語が多種。 sh > php > pl > rb . わずかに python,node.js • 野良ツールもあわせると100個をおそらく超える
  28. Copyright © GREE, Inc. All Rights Reserved. 例えば、デプロイツール api.server deploy1

    deploy2 deploy… デプロイ対象の アドレスや状態を 問合せ platform game sns 数十並列x数千台に ソースコードや画像等を rsync していく proxy 更新中のサーバに アクセスできないよう Proxy でコントロール 1 2 3
  29. Copyright © GREE, Inc. All Rights Reserved. もくじ • Flare

    / cloud Flare • KVS • 単体機能は memcache • コアは C/C++ • マネジメントツールは Haskell • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  30. Copyright © GREE, Inc. All Rights Reserved. 制御システム ノード サーバ管理システム

    cloud flare Message Queue Message Queue 制御 サーバ 制御 サーバ 制御 サーバ ノード 状態管理サーバ Operator ノード ノード ノード ノード ノード 個々のノードの 構成管理を行う ノードの 監視と制御 大部分が Haskell にて できている
  31. Copyright © GREE, Inc. All Rights Reserved. もくじ • Skail

    • Skype Bridge が元 • Skype,IRC,CW,mail • それぞれのチャンネルの 内容を同期 • Chat-ops • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  32. Copyright © GREE, Inc. All Rights Reserved. Skail Skype mail

    CW skail IRC1 IRC2 MacBook で動いている BOT deploy1 deploy2 deploy… worker BOT にコマンド を送ることができる JIRA jenkins イベントの通知
  33. Copyright © GREE, Inc. All Rights Reserved. もくじ • SH

    bot (通称) • ふるまいは常識的なもの • ログイン~対戦~終了 • HTTP ではない • やさぐれたエンジニアが Haskell を使って開発 • 軽量、高速 • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  34. Copyright © GREE, Inc. All Rights Reserved. SH Bot Realtime

    server Api (www) 独自プロトコルのサーバを シナリオに応じて ブラックボックステストを行う Haskell 軽量、高速、安定
  35. Copyright © GREE, Inc. All Rights Reserved. もくじ • LWF

    • Flash の軽量プレイヤー • Web,Unity,Cocos 等が ターゲット • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  36. Copyright © GREE, Inc. All Rights Reserved. LWF .swf json

    Unity3D HTML5 Cocos2d 入稿データは swf を利用できる プレイヤーがサポート しているプラットフォーム。 他
  37. Copyright © GREE, Inc. All Rights Reserved. もくじ • RUM

    • NewRelic 参考 • ページ読み込み速度取得 • 釧路出身者が設計から実 装、導入まですべて対応 • JS と Python • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  38. Copyright © GREE, Inc. All Rights Reserved. RUM CDN varnish

    普通の www Python の daemon fluentd HDFS RUM のダウンロードと 通知は CDN で行う 1 フィルタによって通常の アクセスか RUM クエリ かを振り分ける 2 整形して分析 ツールに保存 3
  39. Copyright © GREE, Inc. All Rights Reserved. もくじ • PrimDNS

    • MySQL を参照しレコー ドを返す • 内部利用のみ • C/C++ • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  40. Copyright © GREE, Inc. All Rights Reserved. PrimDNS PrimDNS 作業用

    app app PrimDNS サーバ管理システムの データベースを参照している 一般的な primary,secondary による冗長化 ゾーン毎に 任意のコマンドで 解決できる
  41. Copyright © GREE, Inc. All Rights Reserved. DNS 戦国時代 •

    Bind • gree.jp を管理。 CDN でキャッシュされている • Unbound • 外部ドメインの中間キャッシュ • tinydns • 殆どのサーバに入っているローカルキャッシュ • 設定が柔軟で使いやすい • PowerDNS • 主に MySQL アクセスコントロール用 • LVS(NAT) で負荷分散し PowerDNS の機能でアドレスを WRR できる • dnsmasq • tinydns と同じ用途で利用 • ubuntu では主にこちら • PrimDNS • 内部サーバのホスト名解決用
  42. Copyright © GREE, Inc. All Rights Reserved. もくじ • Release

    M@aster • “Server” 環境対応 • ソースコードデプロイの 排他制御を行う • 以前はチャットで音頭を 取り合う • 比較的モダンな GUI • ユーザ制御デプロイ記録 • Ruby • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  43. Copyright © GREE, Inc. All Rights Reserved. 手動時代 チャットや空気を 読んで作業する。

    かなり多い デプロイの依存関係マトリクス。 他の人がデプロイ中に 依存しているコードをデプロイ してはいけない
  44. Copyright © GREE, Inc. All Rights Reserved. Release M@aster nginx

    unicorn rails api.server deploy1 deploy2 deploy… worker MySQL Redis worker がジョブを読んで デプロイを実行。 完了したらジョブの状態を 更新して次へ。 開発者がブラウザを ポチポチしてジョブを設定 1 ジョブの状態は MySQL へ。 実行時に Redis にキュー 2 3
  45. Copyright © GREE, Inc. All Rights Reserved. もくじ • GTP

    • MySQL へのアクセスを コントロール • 障害の起こったサーバを 外す • マスターサーバの場合 フェイルオーバーを行う • node.js / MongoDB • 東川町(旭川の隣)出身者 が設計、開発 • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  46. Copyright © GREE, Inc. All Rights Reserved. GTP 大規模向け MySQL

    の状態を クローリング。 100台/sec 1 Master の DB が ダウンした場合は Slave の昇格 2 www www www www Power DNS 問題のあったサーバの エントリ書き換え 3 どの DB サーバにアクセス するかは名前解決の結果に よって制御される GTP GTP GTP
  47. Copyright © GREE, Inc. All Rights Reserved. GTP 小規模向け GTP

    www www www www 名前解決使うのは同じ nsswitch.conf を拡張した Agent のエントリを書き換え 3
  48. Copyright © GREE, Inc. All Rights Reserved. もくじ • Server

    Dashboard (SDB) • パートナー企業さんも利 用できる • 閉じられたネットワーク を使える • Ruby • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  49. Copyright © GREE, Inc. All Rights Reserved. Server Dashboard (SDB)

    gw proxy www www www www stg QA batch gw proxy www www www www stg QA batch gw proxy www www www www stg QA batch サービス毎に仕切りが あり他のネットワーク にアクセス できない SDB
  50. Copyright © GREE, Inc. All Rights Reserved. gateway SDB SDB

    Web, API Worker template gateway にシェルスクリプトの template を送り Worker に実行させる node node node 普通の MVC アプリ
  51. Copyright © GREE, Inc. All Rights Reserved. もくじ • Aegis

    • SDB を PHP で疎結合に 作り直したもの • 札幌出身者が! • chef で構築などを行う • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  52. Copyright © GREE, Inc. All Rights Reserved. Auth Aegis Web

    Render Core API tool Server 構成管理 awacs Controller node node node Chef を Controller で実行 することで Core の負担軽減。 HTML レンダリング 情報も API から 取得してくる ノードからの ログは awacs に送る 社員 LDAP 協力会社 LDAP
  53. Copyright © GREE, Inc. All Rights Reserved. もくじ • Ganglia

    • サーバモニタリング • agent をインストールす るだけでお手軽運用 • 大量のメトリクス • どんどん増えた • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  54. Copyright © 2004-2014 GREE,Inc. All Rights Reserved. Confidential Ganglia MySQL関連だけで

    100個ぐらい 追加しやすいので とりあえず表示が多い
  55. Copyright © GREE, Inc. All Rights Reserved. ganglia Ganglia frontend

    (reverse proxy) gmetad agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent agent rrd web gmetad rrd web agent agent agent agent agent agent agent agent agent agent agent agent agent agent gmetad rrd web 見かけ上、これ一基で すべてのサーバのメトリクス を監視、調査できる マルチキャストでなく、 ユニキャストで二回 別々の gmetad に送ってる /24 単位でクラスタ。 大量のクラスタ。
  56. Copyright © GREE, Inc. All Rights Reserved. もくじ • Andes

    • MySQL Master 向き • DRBD によるストレージ 多重化 • Cascade • Awacs • (1st) Server • Flare • Skail • SH bot • LWF • RUM • PrimDNS • Release M@aster • GTP • SDB • Aegis • ganglia • Andes
  57. Copyright © GREE, Inc. All Rights Reserved. standby active Andes

    MySQL MySQL DRBD DRBD app vip VIP で active 選択 Pacemaker corosync で制御 専用 NIC で直結。 データ同期に問題が出る 可能性はとても低い。 Standby 側の MySQL 起動に数秒の時間がかかる
  58. Copyright © GREE, Inc. All Rights Reserved. 他にも • 分析ツール

    • レポートツール • サポートツール • 野良アプリ公開広場 • などなどたくさんある…
  59. Copyright © GREE, Inc. All Rights Reserved. gpdata www www

    www www MySQL Web HDFS HDFS Zoo Keeper Azkaban MR Hive Presto Macaron Solaris / log HBase オリジナル Frontend とても たくさん ある 分析基盤は よくわからない
  60. Copyright © GREE, Inc. All Rights Reserved. region PowerDNS VIP

    LVS (NAT) LVS (NAT) Power DNS MySQL tinydns Power DNS MySQL Power DNS MySQL region VIP LVS (NAT) LVS (NAT) Power DNS MySQL Power DNS MySQL Power DNS MySQL tinydns データセンター毎に ワンセットずつある 最寄のリージョンに 問い合わせる。 DB の内容は同じだが 名前解決の結果を リージョン毎に変えられる
  61. Copyright © GREE, Inc. All Rights Reserved. ツール系開発言語分析 32% 21%

    18% 10% 7% 6% 4% 2% 0% 利用言語 PHP Ruby Shell Perl JavaScript Haskell C/C++ Python Java
  62. Copyright © GREE, Inc. All Rights Reserved. ウェブからネイティブゲームへ • 昔のプラットフォーム

    • Mixi • Mobage • Gree • さらに昔は任天堂、SCE、SEGA • すこし前の開発環境 • Web で高度な表現をするためには • HTML5,LWF,WebGL,enchant.js 等.. • 今のゲームプラットフォーム • App Store • Google Play
  63. Copyright © GREE, Inc. All Rights Reserved. ツール開発の目標 • 大規模は見据えつつも

    • 大ヒットしない可能性 • 運用維持費の考慮 • オリジナルか、汎用かの比較 • クライアントアプリ技術は収束気味 • Unity3D または Cocos2d • ウェブ技術は停滞気味 • Web の利点が生かしにくく、 HTML5/WebGL は進化せず • ダウンロード不要 → むしろ Store に案内しにくい • セキュリティ → アプリ毎に権限の可視化で軽減 • ウェブ臭がむしろ避けられる
  64. Copyright © GREE, Inc. All Rights Reserved. インフラの今後 • 必要なときに必要な分だけ

    • これは今も昔も変わらず • ネイティブ(クライアント)寄りになってきて、サーバの演算リソースが低下 • HTML レンダリング → API コール • 他変わらず • クラウドの展開 • クラウドゲーミングが普及した場合、サーバの演算リソースが必要になるが… • P2P のサポートとか • ゲームロジックを書ける SaaS とか
  65. Copyright © GREE, Inc. All Rights Reserved. まとめ • 規模が大きくなったら

    • OSS ではまかないきれない • アレコレ考えるより作るほうがよい • 拡大はいつか必ず止まる • よく起こる(起こった)問題 • 短期的に作られたツールが広く長く利用されてしまい、メンテコストが上がる • 社内向けだからとセキュリティが甘いことがあり、対応が先送りになる • CLI 派と GUI 派があり、両対応コストがかさむ • ある既存ツールの置き換えツールができたとき、依存しているツールの対応コスト が増える • 進化の足かせにもなる • 短期的にはサーバ全体の需要は下がるであろう • HTML レンダリングは無くなり、 API 利用にシフト
  66. Copyright © 2004-2014 GREE,Inc. All Rights Reserved. Confidential Confidential Copyright

    © 2004-2010 GREE,Inc. All Rights Reserved. ありがとうございました