Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

PHP Version Up と AWS への移行

gree_tech
October 10, 2017

PHP Version Up と AWS への移行

PHP Conference 2017 にて発表された資料です。
http://phpcon.php.gr.jp/2017/

gree_tech

October 10, 2017
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,

    Inc. All Rights Reserved. PHP Version Up と AWS に移行した話 グリー株式会社 吉本 将宣
  2. Copyright © GREE, Inc. All Rights Reserved. 自己紹介 • 吉本

    将宣 • 2014年 グリー Join • インフラ/リードエンジニア ◦ 本職は NoSQL のはずだが、、、 ◦ 何でもやるスタイル ▪ PM、フロント開発・コードレビュー... ▪ 一時は Manager も ... • 10月からメディア事業へ ◦ iOS/Android アプリの開発メイン
  3. Copyright © GREE, Inc. All Rights Reserved. 今日お話しすること • PHP

    Version Up した話 • レガシーと戦って僕たちが手に入れた武器 • AWS に移行した話 • 僕たちが手に入れた武器で次にやったこと
  4. Copyright © GREE, Inc. All Rights Reserved. グリーのサービス SNS &

    ゲームプラットフォーム ブラウザゲーム & ネイティブゲーム 広告 メディア事業など
  5. Copyright © GREE, Inc. All Rights Reserved. Memcached / Redis

    / Flare MySQL Apache + PHP 基本システム構成 アプライアンス ロードバランサ + Apache Proxy ロードバランサ層 アプリケーション層 データベース層
  6. Copyright © GREE, Inc. All Rights Reserved. 2年前の僕たちの環境 SNS &

    ゲームプラットフォーム ブラウザゲーム & ネイティブゲーム 広告 メディア事業など オンプレ AWS
  7. Copyright © GREE, Inc. All Rights Reserved. 2年前の僕たちの環境 SNS &

    ゲームプラットフォーム ブラウザゲーム & ネイティブゲーム 広告 メディア事業など オンプレ AWS OS : Ubuntu Trusty PHP : 5.5 以上 MySQL : 5.6 以上
  8. Copyright © GREE, Inc. All Rights Reserved. 2年前の僕たちの環境 SNS &

    ゲームプラットフォーム ブラウザゲーム & ネイティブゲーム 広告 メディア事業など オンプレ AWS OS : Debian Lenny PHP : 5.2 MySQL : 5.5
  9. Copyright © GREE, Inc. All Rights Reserved. なぜオンプレがレガシー化したのか • 新規

    OS への対応遅れ ◦ 数千台規模のサーバの入替はそれだけで長期に渡る • 息の長いサービスは密結合化 ◦ 古くからあるサービス ▪ GREE SNS やガラケー時代からの内製ブラウザゲーム ◦ プラットフォームやゲーム間で require ▪ プラットフォームが出来る前のコード ▪ API 化されていない部分 ▪ 同じサーバで動いていた • API 呼び出しより MySQL 直アクセスの方が速かった • メンテナンスが入れづらい ◦ ゲームプラットフォームの修正はパートナー様にも影響する • 肥大化したコード
  10. Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,

    Inc. All Rights Reserved. 抜け出せないレガシーの沼
  11. Copyright © GREE, Inc. All Rights Reserved. しかし限界はある • レスポンス速度の改善も限界

    ◦ 2年前の時点でも周回遅れの PHP 5.2 • OS が古いことによるミドルウェアのメンテナンスコスト増大 ◦ セキュリティパッチは独自で対応 ◦ AWS は ubuntu trusty なので、同じミドルウェアで複数バージョンを メンテナンスしないといけない 意を決して内製のブラウザゲームからバージョンアップを始めた
  12. Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,

    Inc. All Rights Reserved. 効率よく&スピード重視で 進めないといけない
  13. Copyright © GREE, Inc. All Rights Reserved. どうしたのか • 少人数によるプロトタイピング

    • ノウハウの共有 • 修正方針と QA のスケジューリング
  14. Copyright © GREE, Inc. All Rights Reserved. 少人数によるプロトタイピング • インフラチームを中心に各ゲーム・プラットフォームから数名で対応

    • ゲームや SNS 機能が最低限動くところまで一気にやった ◦ 各サービス共通のコードを完成させる ◦ よくある syntax error の修正方法を決める ▪ 引数の変更など (regex_replace, etc… • ミドルウェア・インフラ面の問題も先取り ◦ 画像ライブラリ・Apache などの設定や問題の確認 • 開発環境を統一 ◦ chef を使って本番と共通の cookbook を作成 ◦
  15. Copyright © GREE, Inc. All Rights Reserved. ノウハウ共有 • 全サービスで共通のエラーレポートフローを定義

    ◦ ゲーム内で閉じない不具合は全員に共有 ◦ どのように対応したかも一覧で分かるように • チームや領域によらずに修正 ◦ インフラ・ゲーム・プラットフォームのチームに関係なく pull request ◦ レビューやテストは各サービスのエンジニアが対応することで品質を担保 • インフラチームが舵を取って積極的にノウハウを共有 ◦ 全社で共通となっているインフラチームが中心になることで情報を集約
  16. Copyright © GREE, Inc. All Rights Reserved. 修正方針と QA のスケジューリング

    • 修正方針 ◦ PHP5.2 と PHP5.5 両方で必ず動くように修正する • QA とリリースまでのスケジュール調整 ◦ 先行して一つのゲームで QA を実施 ▪ 密結合なので、プラットフォームなどの不具合も見つることができた ▪ 画像合成といったセンシティブで時間が掛かる問題も早めに検知できた ◦ 共通の不具合を修正後は並行して QA を実施 ▪ 定常的に実施しているイベント等の QA と同時に実施 • PHP5.2 と PHP5.5 の両方の環境で QA すると時間が掛かりすぎる ▪ 事前に発生しやすい問題は把握・対応できているので不具合は少なめ ◦ プラットフォームは定常 QA で確認しつつ徐々にリリース ◦ リリースは一台に投入して2週間以上様子を見てから ▪ 負荷に問題がないか
  17. Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,

    Inc. All Rights Reserved. 決してスマートとは 言えないやり方だが...
  18. Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,

    Inc. All Rights Reserved. どうにか難題を乗り越えて 僕たちが勝ち得たものとは
  19. Copyright © GREE, Inc. All Rights Reserved. 負荷の改善 • 50%ほど

    load avergae が改善された ◦ Web サーバを 40% 削減 PHP 5.2 PHP 5.5
  20. Copyright © GREE, Inc. All Rights Reserved. レガシーからの脱却 • バージョンアップ前

    (2015年時点) ◦ Trusty & PHP5.5:全体の 20% • バージョンアップ後 (2016年時点) ◦ Trusty & PHP5.5:全体の 90% ▪ Lenny & PHP5.2 で残ったもの • サーバ管理システム等 • オンプレのネイティブゲーム
  21. Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,

    Inc. All Rights Reserved. そんな数字よりも。。。
  22. Copyright © GREE, Inc. All Rights Reserved. 僕たちが真に勝ち得たもの • 互いのシステムへの相互理解

    ◦ サーバサイドエンジニアのインフラへの理解 ◦ インフラエンジニアのアプリケーションへの理解 • 組織を超えた強力なチームワーク ◦ 一つの目標に向かって一丸となって進む力 ◦ 自分の領域に囚われずに協力し合う信頼関係
  23. Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,

    Inc. All Rights Reserved. AWS に行こう
  24. Copyright © GREE, Inc. All Rights Reserved. AWS 移行したモチベーション システム観点では。。。

    • オンプレサーバの老朽化 ◦ 2017年には EOSL を迎えてしまう ◦ HDDおよびメモリの故障率の増加 ◦ パフォーマンスの限界
  25. Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,

    Inc. All Rights Reserved. でも、それだけじゃない
  26. Copyright © GREE, Inc. All Rights Reserved. AWS 移行したモチベーション •

    一丸となってやれば何でもできる自信 ◦ 10年来の超大規模レガシーから抜け出した自信 • 次のチャレンジへの意欲向上 ◦ PHP7 ◦ 疎結合化 ◦ etc...
  27. Copyright © GREE, Inc. All Rights Reserved. AWS 移行したモチベーション •

    やりたいことは非常に多い • でも、さすがに一気に全部やるのは怖いので • AWS 移行しつつ、並行して PHP7 の準備をしました
  28. Copyright © GREE, Inc. All Rights Reserved. 1年でゲームを全部 AWS に移行した

    • 2016年 SNS & ゲームプラットフォーム ブラウザゲーム & ネイティブゲーム 広告 メディア事業など オンプレ AWS
  29. Copyright © GREE, Inc. All Rights Reserved. 1年でゲームを全部 AWS に移行した

    SNS & ゲームプラットフォーム ブラウザゲーム & スマホゲーム 広告 メディア事業など オンプレ AWS • 2017年
  30. Copyright © GREE, Inc. All Rights Reserved. 移行したサービス • ブラウザゲーム

    ◦ 密結合なものも含めて全て • スマホ向けネイティブゲーム ◦ ブラウザゲームで得たノウハウを活かして PHP Version Up も同時に ◦ ネイティブ向けのゲームプラットフォームも • ゲーム以外も ◦ コーポレート、広告・メディア事業系のサイト 20を超えるサービス、数千台規模のサーバを AWS に移行
  31. Copyright © GREE, Inc. All Rights Reserved. どうやって移行したか? • Direct

    Connect 使った ◦ 事前に MySQL のレプリカを AWS 上に作る ▪ AWS 側のレプリカを一台、オンプレのサービスに入れて クエリ検証やレスポンス速度等を確認 • 密結合な内製ブラウザゲームの場合、プラットフォームがオンプレに残るので AWS からオンプレへのレスポンス速度も重要 ◦ テスト用の別ドメインを AWS 側につけてテスト実施 ▪ AWS からオンプレの本番 DB にアクセスして確認 • 移行日の深夜メンテで切替 ◦ MySQL マスタ切替 & DNS 切替 ◦ 最終的な動作チェック
  32. Copyright © GREE, Inc. All Rights Reserved. 移行して良かったこと • サーバ費用の削減

    ◦ 40% 近い削減を達成 ▪ ハードウェア性能向上による負荷低減 • サーバリソースの在庫調整が不要に ◦ オンプレではサーバ増加における調達のために在庫が必要だった • PHP5.5 に出来ていなかったサービスも完全移行 ◦ オンプレに残っていたネイティブゲーム等
  33. Copyright © GREE, Inc. All Rights Reserved. AWS 移行で起きた問題 •

    深夜メンテを入れて移行できなかったのは最初の一回だけ ◦ 原因は疎結合化を同時にやろうとしたことによるテスト不足 • メンテ当日の準備不足 ◦ テスト用端末がログインできないプロダクトがあり 当日慌てて対応した 大きなトラブルはほとんどなかった
  34. Copyright © GREE, Inc. All Rights Reserved. なぜ一年で数千台規模を移行できたのか • 普通に

    PDCA 回した ◦ 最初の移行ミスでプロジェクト並行する問題が把握できた ◦ 事前にやる作業や修正を次の移行プロダクトに共有した ◦ 負荷予測の精度も移行を経るごとに高くなった • 円滑なコミュニケーション ◦ PHPバージョンアップした時からの信頼関係 ◦ 相互に仕組みを理解しているため話が早く 問題を早く検知しやすい ▪ 認識齟齬などに問題も少なかった
  35. Copyright © GREE, Inc. All Rights Reserved. 今後のチャレンジ • PHP7

    on Xenial ◦ 一部サービスでは導入を開始 ▪ memcached への connection 数が改善 ▪ cpu 負荷も半分程度に • HTTP2 を使った通信の高速化 • オンプレに残ったサービスのハイブリッドクラウド
  36. Copyright © GREE, Inc. All Rights Reserved. まとめ • 強靭な意志でレガシーから抜け出せる

    • 勝ち得たチームワークは次のチャレンジの大きな財産! • パフォーマンスの改善はその副産物
  37. Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,

    Inc. All Rights Reserved. 技術負債は 人的資源に変える 大きなチャンス!