Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHP Version Up と AWS への移行
Search
gree_tech
PRO
October 10, 2017
Technology
0
120
PHP Version Up と AWS への移行
PHP Conference 2017 にて発表された資料です。
http://phpcon.php.gr.jp/2017/
gree_tech
PRO
October 10, 2017
Tweet
Share
More Decks by gree_tech
See All by gree_tech
REALITY株式会社における開発生産性向上の取り組み: 失敗と成功から学んだこと
gree_tech
PRO
2
160
『ヘブンバーンズレッド』におけるフィールドギミックの裏側
gree_tech
PRO
2
110
セキュリティインシデント対応の体制・運用の試行錯誤 / greetechcon2024-session-a1
gree_tech
PRO
1
120
『アナザーエデン 時空を超える猫』国内海外同時運営実現への道のり ~別々で開発されたアプリを安定して同時リリースするまでの取り組み~
gree_tech
PRO
1
94
『アサルトリリィ Last Bullet』におけるクラウドストリーミング技術を用いたブラウザゲーム化の紹介
gree_tech
PRO
1
120
UnityによるPCアプリの新しい選択肢。「PC版 Google Play Games」への対応について
gree_tech
PRO
1
130
実機ビルドのエラーによる検証ブロッカーを0に!『ヘブンバーンズレッド』のスモークテスト自動化の取り組み
gree_tech
PRO
1
140
"ゲームQA業界の技術向上を目指す! 会社を超えた研究会の取り組み"
gree_tech
PRO
1
170
Jamstack でリニューアルするグリーグループのメディア
gree_tech
PRO
2
340
Other Decks in Technology
See All in Technology
ONNX推論クレートの比較と実装奮闘記
emergent
0
250
Amazon Forecast亡き今、我々がマネージドサービスに頼らず時系列予測を実行する方法
sadynitro
0
220
Bytebaseで実現する データベース管理の効率化
shogo452
1
130
SONY AITRIOSによるAIエッジセンシングの新たな可能性(仮)
iotcomjpadmin
0
180
ヤプリのデータカタログ整備 1年間の歩み / Progress of Building a Data Catalog at Yappli
yamamotoyuta
3
610
Entra ID の基礎(Japan Microsoft 365 コミュニティ カンファレンス 2024)
murachiakira
3
1.9k
クラウドネイティブなNewSQLで実現するミッションクリティカルなアプリケーションの運用
yuyu_hf
PRO
1
150
140年の歴史あるエンタープライズ企業の内製化×マイクロサービス化への航海
yussugi
0
3.5k
Amazon ECSとCloud Runの相互理解で広げるクラウドネイティブの景色 / Mutually understanding Amazon ECS and Cloud Run
iselegant
18
2.2k
AWS認定試験の長文問題を早く解くコツ
keke1234ke
0
120
RDRAとLLM
kanzaki
4
480
ゆるSRE勉強会 #8 組織的にSREが始まる中で意識したこと
abnoumaru
1
690
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
What's in a price? How to price your products and services
michaelherold
243
12k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Navigating Team Friction
lara
183
15k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Six Lessons from altMBA
skipperchong
27
3.5k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
The Language of Interfaces
destraynor
154
24k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
KATA
mclloyd
29
14k
Transcript
Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,
Inc. All Rights Reserved. PHP Version Up と AWS に移行した話 グリー株式会社 吉本 将宣
Copyright © GREE, Inc. All Rights Reserved. 自己紹介 • 吉本
将宣 • 2014年 グリー Join • インフラ/リードエンジニア ◦ 本職は NoSQL のはずだが、、、 ◦ 何でもやるスタイル ▪ PM、フロント開発・コードレビュー... ▪ 一時は Manager も ... • 10月からメディア事業へ ◦ iOS/Android アプリの開発メイン
Copyright © GREE, Inc. All Rights Reserved. 今日お話しすること • PHP
Version Up した話 • AWS に移行した話
Copyright © GREE, Inc. All Rights Reserved. 今日お話しすること • PHP
Version Up した話 • レガシーと戦って僕たちが手に入れた武器 • AWS に移行した話 • 僕たちが手に入れた武器で次にやったこと
Copyright © GREE, Inc. All Rights Reserved. グリーのサービス SNS &
ゲームプラットフォーム ブラウザゲーム & ネイティブゲーム 広告 メディア事業など
Copyright © GREE, Inc. All Rights Reserved. Memcached / Redis
/ Flare MySQL Apache + PHP 基本システム構成 アプライアンス ロードバランサ + Apache Proxy ロードバランサ層 アプリケーション層 データベース層
Copyright © GREE, Inc. All Rights Reserved. 2年前の僕たちの環境 SNS &
ゲームプラットフォーム ブラウザゲーム & ネイティブゲーム 広告 メディア事業など オンプレ AWS
Copyright © GREE, Inc. All Rights Reserved. 2年前の僕たちの環境 SNS &
ゲームプラットフォーム ブラウザゲーム & ネイティブゲーム 広告 メディア事業など オンプレ AWS OS : Ubuntu Trusty PHP : 5.5 以上 MySQL : 5.6 以上
Copyright © GREE, Inc. All Rights Reserved. 2年前の僕たちの環境 SNS &
ゲームプラットフォーム ブラウザゲーム & ネイティブゲーム 広告 メディア事業など オンプレ AWS OS : Debian Lenny PHP : 5.2 MySQL : 5.5
Copyright © GREE, Inc. All Rights Reserved. なぜオンプレがレガシー化したのか • 新規
OS への対応遅れ ◦ 数千台規模のサーバの入替はそれだけで長期に渡る • 息の長いサービスは密結合化 ◦ 古くからあるサービス ▪ GREE SNS やガラケー時代からの内製ブラウザゲーム ◦ プラットフォームやゲーム間で require ▪ プラットフォームが出来る前のコード ▪ API 化されていない部分 ▪ 同じサーバで動いていた • API 呼び出しより MySQL 直アクセスの方が速かった • メンテナンスが入れづらい ◦ ゲームプラットフォームの修正はパートナー様にも影響する • 肥大化したコード
Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,
Inc. All Rights Reserved. 抜け出せないレガシーの沼
Copyright © GREE, Inc. All Rights Reserved. しかし限界はある • レスポンス速度の改善も限界
◦ 2年前の時点でも周回遅れの PHP 5.2 • OS が古いことによるミドルウェアのメンテナンスコスト増大 ◦ セキュリティパッチは独自で対応 ◦ AWS は ubuntu trusty なので、同じミドルウェアで複数バージョンを メンテナンスしないといけない 意を決して内製のブラウザゲームからバージョンアップを始めた
Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,
Inc. All Rights Reserved. 効率よく&スピード重視で 進めないといけない
Copyright © GREE, Inc. All Rights Reserved. どうしたのか • 少人数によるプロトタイピング
• ノウハウの共有 • 修正方針と QA のスケジューリング
Copyright © GREE, Inc. All Rights Reserved. 少人数によるプロトタイピング • インフラチームを中心に各ゲーム・プラットフォームから数名で対応
• ゲームや SNS 機能が最低限動くところまで一気にやった ◦ 各サービス共通のコードを完成させる ◦ よくある syntax error の修正方法を決める ▪ 引数の変更など (regex_replace, etc… • ミドルウェア・インフラ面の問題も先取り ◦ 画像ライブラリ・Apache などの設定や問題の確認 • 開発環境を統一 ◦ chef を使って本番と共通の cookbook を作成 ◦
Copyright © GREE, Inc. All Rights Reserved. ノウハウ共有 • 全サービスで共通のエラーレポートフローを定義
◦ ゲーム内で閉じない不具合は全員に共有 ◦ どのように対応したかも一覧で分かるように • チームや領域によらずに修正 ◦ インフラ・ゲーム・プラットフォームのチームに関係なく pull request ◦ レビューやテストは各サービスのエンジニアが対応することで品質を担保 • インフラチームが舵を取って積極的にノウハウを共有 ◦ 全社で共通となっているインフラチームが中心になることで情報を集約
Copyright © GREE, Inc. All Rights Reserved. 修正方針と QA のスケジューリング
• 修正方針 ◦ PHP5.2 と PHP5.5 両方で必ず動くように修正する • QA とリリースまでのスケジュール調整 ◦ 先行して一つのゲームで QA を実施 ▪ 密結合なので、プラットフォームなどの不具合も見つることができた ▪ 画像合成といったセンシティブで時間が掛かる問題も早めに検知できた ◦ 共通の不具合を修正後は並行して QA を実施 ▪ 定常的に実施しているイベント等の QA と同時に実施 • PHP5.2 と PHP5.5 の両方の環境で QA すると時間が掛かりすぎる ▪ 事前に発生しやすい問題は把握・対応できているので不具合は少なめ ◦ プラットフォームは定常 QA で確認しつつ徐々にリリース ◦ リリースは一台に投入して2週間以上様子を見てから ▪ 負荷に問題がないか
Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,
Inc. All Rights Reserved. 決してスマートとは 言えないやり方だが...
Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,
Inc. All Rights Reserved. どうにか難題を乗り越えて 僕たちが勝ち得たものとは
Copyright © GREE, Inc. All Rights Reserved. 負荷の改善 • 50%ほど
load avergae が改善された ◦ Web サーバを 40% 削減 PHP 5.2 PHP 5.5
Copyright © GREE, Inc. All Rights Reserved. レガシーからの脱却 • バージョンアップ前
(2015年時点) ◦ Trusty & PHP5.5:全体の 20% • バージョンアップ後 (2016年時点) ◦ Trusty & PHP5.5:全体の 90% ▪ Lenny & PHP5.2 で残ったもの • サーバ管理システム等 • オンプレのネイティブゲーム
Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,
Inc. All Rights Reserved. そんな数字よりも。。。
Copyright © GREE, Inc. All Rights Reserved. 僕たちが真に勝ち得たもの • 互いのシステムへの相互理解
◦ サーバサイドエンジニアのインフラへの理解 ◦ インフラエンジニアのアプリケーションへの理解 • 組織を超えた強力なチームワーク ◦ 一つの目標に向かって一丸となって進む力 ◦ 自分の領域に囚われずに協力し合う信頼関係
Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,
Inc. All Rights Reserved. AWS に行こう
Copyright © GREE, Inc. All Rights Reserved. AWS 移行したモチベーション システム観点では。。。
• オンプレサーバの老朽化 ◦ 2017年には EOSL を迎えてしまう ◦ HDDおよびメモリの故障率の増加 ◦ パフォーマンスの限界
Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,
Inc. All Rights Reserved. でも、それだけじゃない
Copyright © GREE, Inc. All Rights Reserved. AWS 移行したモチベーション •
一丸となってやれば何でもできる自信 ◦ 10年来の超大規模レガシーから抜け出した自信 • 次のチャレンジへの意欲向上 ◦ PHP7 ◦ 疎結合化 ◦ etc...
Copyright © GREE, Inc. All Rights Reserved. AWS 移行したモチベーション •
やりたいことは非常に多い • でも、さすがに一気に全部やるのは怖いので • AWS 移行しつつ、並行して PHP7 の準備をしました
Copyright © GREE, Inc. All Rights Reserved. 1年でゲームを全部 AWS に移行した
• 2016年 SNS & ゲームプラットフォーム ブラウザゲーム & ネイティブゲーム 広告 メディア事業など オンプレ AWS
Copyright © GREE, Inc. All Rights Reserved. 1年でゲームを全部 AWS に移行した
SNS & ゲームプラットフォーム ブラウザゲーム & スマホゲーム 広告 メディア事業など オンプレ AWS • 2017年
Copyright © GREE, Inc. All Rights Reserved. 移行したサービス • ブラウザゲーム
◦ 密結合なものも含めて全て • スマホ向けネイティブゲーム ◦ ブラウザゲームで得たノウハウを活かして PHP Version Up も同時に ◦ ネイティブ向けのゲームプラットフォームも • ゲーム以外も ◦ コーポレート、広告・メディア事業系のサイト 20を超えるサービス、数千台規模のサーバを AWS に移行
Copyright © GREE, Inc. All Rights Reserved. どうやって移行したか? • Direct
Connect 使った ◦ 事前に MySQL のレプリカを AWS 上に作る ▪ AWS 側のレプリカを一台、オンプレのサービスに入れて クエリ検証やレスポンス速度等を確認 • 密結合な内製ブラウザゲームの場合、プラットフォームがオンプレに残るので AWS からオンプレへのレスポンス速度も重要 ◦ テスト用の別ドメインを AWS 側につけてテスト実施 ▪ AWS からオンプレの本番 DB にアクセスして確認 • 移行日の深夜メンテで切替 ◦ MySQL マスタ切替 & DNS 切替 ◦ 最終的な動作チェック
Copyright © GREE, Inc. All Rights Reserved. 移行して良かったこと • サーバ費用の削減
◦ 40% 近い削減を達成 ▪ ハードウェア性能向上による負荷低減 • サーバリソースの在庫調整が不要に ◦ オンプレではサーバ増加における調達のために在庫が必要だった • PHP5.5 に出来ていなかったサービスも完全移行 ◦ オンプレに残っていたネイティブゲーム等
Copyright © GREE, Inc. All Rights Reserved. AWS 移行で起きた問題 •
深夜メンテを入れて移行できなかったのは最初の一回だけ ◦ 原因は疎結合化を同時にやろうとしたことによるテスト不足 • メンテ当日の準備不足 ◦ テスト用端末がログインできないプロダクトがあり 当日慌てて対応した 大きなトラブルはほとんどなかった
Copyright © GREE, Inc. All Rights Reserved. なぜ一年で数千台規模を移行できたのか • 普通に
PDCA 回した ◦ 最初の移行ミスでプロジェクト並行する問題が把握できた ◦ 事前にやる作業や修正を次の移行プロダクトに共有した ◦ 負荷予測の精度も移行を経るごとに高くなった • 円滑なコミュニケーション ◦ PHPバージョンアップした時からの信頼関係 ◦ 相互に仕組みを理解しているため話が早く 問題を早く検知しやすい ▪ 認識齟齬などに問題も少なかった
Copyright © GREE, Inc. All Rights Reserved. 今後のチャレンジ • PHP7
on Xenial ◦ 一部サービスでは導入を開始 ▪ memcached への connection 数が改善 ▪ cpu 負荷も半分程度に • HTTP2 を使った通信の高速化 • オンプレに残ったサービスのハイブリッドクラウド
Copyright © GREE, Inc. All Rights Reserved. まとめ • 強靭な意志でレガシーから抜け出せる
• 勝ち得たチームワークは次のチャレンジの大きな財産! • パフォーマンスの改善はその副産物
Copyright © GREE, Inc. All Rights Reserved. Copyright © GREE,
Inc. All Rights Reserved. 技術負債は 人的資源に変える 大きなチャンス!