Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
KubernetesでPHPを動かした話
Search
gree_tech
PRO
June 27, 2019
Technology
0
320
KubernetesでPHPを動かした話
「第139回 PHP勉強会@東京」で発表された資料です。
https://phpstudy.doorkeeper.jp/events/93038
gree_tech
PRO
June 27, 2019
Tweet
Share
More Decks by gree_tech
See All by gree_tech
LLM翻訳ツールの開発と海外のお客様対応等への社内導入事例
gree_tech
PRO
0
640
ヘブンバーンズレッドのレンダリングパイプライン刷新
gree_tech
PRO
0
650
ヘブンバーンズレッドにおける、世界観を活かしたミニゲーム企画の作り方
gree_tech
PRO
0
640
「魔法少女まどか☆マギカ Magia Exedra」のグローバル展開を支える、開発チームと翻訳チームの「意識しない協創」を実現するローカライズシステム
gree_tech
PRO
0
640
「魔法少女まどか☆マギカ Magia Exedra」での負荷試験の実践と学び
gree_tech
PRO
0
690
「魔法少女まどか☆マギカ Magia Exedra」の必殺技演出を徹底解剖! -キャラクターの魅力を最大限にファンに届けるためのこだわり-
gree_tech
PRO
0
650
ヒューリスティック評価を用いたゲームQA実践事例
gree_tech
PRO
0
640
ライブサービスゲームQAのパフォーマンス検証による品質改善の取り組み
gree_tech
PRO
0
640
コミュニケーションに鍵を見いだす、エンジニア1年目の経験談
gree_tech
PRO
0
140
Other Decks in Technology
See All in Technology
COVESA VSSによる車両データモデルの標準化とAWS IoT FleetWiseの活用
osawa
1
290
Agile PBL at New Grads Trainings
kawaguti
PRO
1
430
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
10k
BPaaSにおける人と協働する前提のAIエージェント-AWS登壇資料
kentarofujii
0
140
AWSで始める実践Dagster入門
kitagawaz
1
620
2025年になってもまだMySQLが好き
yoku0825
8
4.8k
OCI Oracle Database Services新機能アップデート(2025/06-2025/08)
oracle4engineer
PRO
0
150
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
3
220
Terraformで構築する セルフサービス型データプラットフォーム / terraform-self-service-data-platform
pei0804
1
180
AWSを利用する上で知っておきたい名前解決のはなし(10分版)
nagisa53
10
3.1k
Android Audio: Beyond Winning On It
atsushieno
0
850
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
220
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
GitHub's CSS Performance
jonrohan
1032
460k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
How to Ace a Technical Interview
jacobian
279
23k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Transcript
で を動かした話 藤田貴大
自己紹介 藤田貴大(@takfjt) グリー株式会社Wright Flyer事業本部Game Publishing部Serverチーム ゲームアプリのサーバエンジニアです
はじめてGKEでゲームサーバを構築 負荷試験とその対策などで携わる 今回は、負荷試験の際に見えてきた Kubernetes上でPHPのサービスを動かしたときの躓き を紹介したいと思います はじめに
Kubernetesそのものの話はしません PHP、コンテナ、Kubernetesに関する話は ふんわりまざっています 厳密じゃないです と、いうことで
「ホストのクラスターを横断してアプリケーションコンテ ナを自動デプロイ、スケーリング、操作するためのプ ラットフォーム」 「Kubernetes」(参照 2019-03-19) 『ウィキペディア日本語版』 Kubernetesとは
Apacheパラメータ未調整問題
なんか遅いなーと思って調べたらApacheの パラメータに調整すべきところがいくつかあった
いままで、php.iniくらいまではインフラチームの担当範 囲だった コンテナを導入すると、Dockerfileくらいまではゲーム チームの担当範囲になる → chefなどからノウハウを回収
DNS Lookup溢れる問題
高負荷をかけるとDNS Lookupのエラーが頻発 kube-dnsのCPUが100%にはりついていた
Kubernetes DNS service1 kube-system DNS kubernetes cluster Cloud SQL Cloud
Spanner Cloud Memorystore The Internet
かなり仕事が多い service1 kube-system DNS kubernetes cluster Cloud SQL Cloud Spanner
Cloud Memorystore The Internet クラスタ内の名前解決 Google Cloud内の 名前解決 インターネット側の 名前解決
PHPであることによる原因 Kubernetesであることによる原因 クラウドであることによる原因 実装による原因 複合的な原因
コネクションプールができない 実際には、PDOでも各種拡張モジュールでも 持続的接続の方法はけっこうあるが、 やったことがなかった → リクエスト毎にDNS Lookup PHPであることによる原因
IPv6をdisableにするなど、OSのコアの設定に 手がだしにくい 使っていないAAAAレコードの問い合わせが多発 PHP(を含めて多くの言語)はOSがIPv6をenableにしてると 問い合わせに行く dns_get_record関数ならAレコードだけ、みたいな制御は効くが、 ext/mysqliにホスト名を渡した時などは制御できない Kubernetesであることによる原因
マネージドサービスを使うと、 基本、名前でエンドポイントが与えられる RDB memcached redis etc... クラウドであることによる原因
テーブル毎に別コネクションになっている ソーシャルゲームの事情で、DBをテーブルで 分割することがよくあり、このような実装 実装による原因
sidecarとしてdnsmasqを動かしておく 原因を1つずつつぶして行くのは厳しかった 解決案
Sidecar方式で解決 service1 kube-system DNS kubernetes cluster Cloud SQL Cloud Spanner
Cloud Memorystore The Internet DNS DNS DNS DNS ご存じの方は、この図だとDaemonSet?って 思うかもしれませんが、実際にはsidecar方式で 解決しました うまい図が浮かばなくてこうなっています。すいません
「みんなのDocker/Kubernetes」にDaemonSetでやってると書いてあっ たのですけど、どうやったらできるか知っている人がいたら教えてくだ さい
だが...
dnsmasq先に死ぬ問題
デプロイ時など、コンテナのシャットダウンが 一斉に開始 httpのコネクションが無くなるまで待機 実際はまだdnsmasqが立ち上がっていない問題もあっ た apacheの起動を53番が開くまで待つ対応も入れた
ついでに宣伝
https://github.com/gree/php-custom-environment-v ariables 連想配列の特定の値を、環境変数をつかって変更で きる コンテナは環境変数で設定したいことが多い getenvだとyamlとかjsonでつらい