Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
大規模タイトルを ノーメンテで運用するコツ
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
COLOPL Inc.
October 31, 2023
Technology
2.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
大規模タイトルを ノーメンテで運用するコツ
COLOPL Inc.
October 31, 2023
More Decks by COLOPL Inc.
See All by COLOPL Inc.
Claude Code 再入門 会話の渡し方の4つの道具 - Claude Codeスキル・ハーネス社内勉強会
colopl
0
420
Copilot / Claude Code 両方で使えるスキル・ハーネスの紹介 - Claude Codeスキル・ハーネス社内勉強会
colopl
0
560
実務で動くAIエージェントを作ろう!MCP×Mastraをライブコーディングで実践
colopl
0
490
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
2.6k
PHPStan をできる限り高速化してみる
colopl
1
1.4k
コロプラ最新作インフラ構成について
colopl
0
380
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
2.5k
コロプラのオンボーディングを採用から語りたい
colopl
7
2.9k
怖くない!ゼロから始めるPHPソースコードコンパイル入門
colopl
1
1k
Other Decks in Technology
See All in Technology
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2.1k
AI de Idea
kawaguti
PRO
2
130
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
160
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
130
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
310
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
4
680
「どのログを見ればいい?」 から始めた サーバーレス障害解析
y_waka1
1
110
「守り」で活用するオンデバイスLLM 〜写ってはいけないを総力戦で防ぐ〜 / iOSDC Japan 2026
nakamuuu
0
180
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
130
`t*(42&t>>10)`だけで音楽が鳴る、Swiftで実装するBytebeat / iOSDC Japan 2026
yutailang0119
0
120
リアーキテクチャ後の障害ゼロを目指したShadow Testingの取り組み
nihonbuson
PRO
1
160
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
A Tale of Four Properties
chriscoyier
163
24k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Ruling the World: When Life Gets Gamed
codingconduct
0
340
What's in a price? How to price your products and services
michaelherold
247
13k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
460
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
330
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Deep Space Network (abreviated)
tonyrice
0
310
The untapped power of vector embeddings
frankvandijk
2
1.9k
Skip the Path - Find Your Career Trail
mkilby
1
230
Transcript
大規模タイトルを ノーメンテで運用するコツ 西川 蒼太郎
氏名 : 部署 : • 2020年度新卒入社(4年目) • 運用タイトルのサーバーエンジニアとして バリバリ運用開発中 •
最近のマイブームはシュークリームを肴に 白ビールを飲むこと 西川 蒼太郎 2 自己紹介 技術基盤本部 第2バックエンドエンジニア部 第1グループ 第3チーム
今日お話する内容 3 ノーメンテナンス運用 (ノーメンテ)
今日お話する内容 ノーメンテ・・・?
コロプラのノーメンテ主義(引用)
要するに • ユーザー体験を損ねないように • ノンストップでアップデートをリリースする ということ コロプラのノーメンテ主義(引用)
• メンテあり・なしのリリースフローの違い • ノーメンテを実現する手法 ◦ 様々なリリース手法 ◦ リリーススケジュールの組み立て 今日お話する内容 7
※インフラ周りの話はあまりしません ※一部PHPのコードが登場しますが、雰囲気で理解してもらえればOKです 今日お話する内容
9 メンテあり・なしの リリースフローの違い
(前提)モバイルゲームにおける機能開発 サーバ アプリ 10 サーバーエンジニア担当 クライアントエンジニア担当
(前提)モバイルゲームにおける機能開発 サーバ for v1.0 アプリ v1.0 アプリ v2.0 11 ストアで公開
デプロイ(更新) サーバ for v2.0 新機能入り 新機能入り サーバーエンジニア担当 クライアントエンジニア担当
メンテありの リリースフローの例
メンテありのリリースフローの例 サーバ for v1.0 13 アプリ v1.0
メンテありのリリースフローの例 サーバ for v1.0 14 ①メンテナンス開始 ❌ アプリ v1.0
メンテありのリリースフローの例 サーバ for v1.0 15 サーバ for v2.0 ②デプロイ ❌
アプリ v1.0
メンテありのリリースフローの例 サーバ for v1.0 アプリ v2.0 16 ❌ アプリ v1.0
③ストアで公開 サーバ for v2.0
メンテありのリリースフローの例 サーバ for v1.0 17 アプリ v2.0 サーバ for v2.0
④メンテナンス終了 メンテ明けと同時に 古いアプリが使えなくなる アプリ v1.0
• サーバーは常に1つのバージョンだけが運用される • アプリとサーバーのバージョンは常にマッチする ※あくまで一例なので、タイトルによっては異なる可能性もあります メンテありのリリースフローの例
ノーメンテの リリースフロー
ノーメンテのリリースフロー サーバ for v1.0 アプリ v1.0 20
ノーメンテのリリースフロー サーバ for v1.0 アプリ v1.0 アプリ v2.0 21 ①ストアで公開
ノーメンテのリリースフロー アプリ v1.0 22 サーバ for v1.0 アプリ v2.0 ②デプロイ
サーバ for v1.0~2.0
ノーメンテのリリースフロー アプリ v1.0 23 サーバ for v1.0 アプリ v2.0 サーバ
for v1.0~2.0 ③古いサーバーが フェードアウト
ノーメンテのリリースフロー サーバ for v1.0 アプリ v1.0 24 アプリ v2.0 サーバ
for v1.0~2.0 ④特定のタイミングで 古いアプリが使えなくなる
• 「ローリングアップデート」という手法でデプロイを行うため ◦ 複数のサーバーをちょっとずつアップデートしていく方式 ◦ ちょっとずつアップデートしていくので、当然新旧が混ざる • ローリングアップデートのメリット・デメリット ◦ 無停止でサーバーのバージョンアップができる(=ノーメンテ!)
◦ ただし新旧サーバーが混ざるので管理は大変 ◦ 詳細について今回は割愛 補足:なぜ新旧サーバーが混ざるのか? カナリア サーバ 新サーバ 新サーバ 旧サーバ
• アプリ・サーバーのバージョンが複数存在しうる ◦ 『新しいサーバー』に『v1.0 と v2.0 の両方のアプリ』からアクセスが来るし、 『古いサーバー』にも『v1.0 と v2.0
の両方のアプリ』からアクセスが来る ◦ アプリもサーバーも常に後方互換性を担保しなくてはいけない • Q. どうしてこんなことになるのか? ◦ A. 「メンテナンス」という「切り替えタイミング」を設けることができないため ◦ つらい! • じゃあどうするか? ◦ 様々な手法でリリースタイミングをコントロールする! ノーメンテのリリースフロー
27 リリースを コントロールする
• 様々なリリース手法 ◦ アプリバージョンによるリリース ◦ 日時によるリリース ◦ FutureRelease ◦ データによるリリース
• 実際にリリーススケジュールを組んでみる リリースをコントロールする
様々な リリース手法
• リクエストからアプリバージョンを受け取り、 任意のバージョン以上の時だけ処理を行うという手法 • たとえば以下のようなケースに効果的 ◦ バージョンごとに受け取るリクエストの値が変化するとき ◦ バージョンごとに違うレスポンスを返したいとき //
リクエストからアプリバージョンを取得する $requestVersion = $request->getVersion(); // 対象バージョンを設定する $targetVersion = '1.1.0'; if ($requestVersion >= $targetVersion) { // 「アプリバージョン」>=「対象バージョン」なら処理を行う // NOTE: 本当はもっと適切にバージョン文字列を比較する方法がありますが、今回は割愛 } バージョンによるリリース
• リクエスト日時を基準として、 リリース日時以降の時だけ処理を行うという手法 • 主なケースは以下の通り ◦ あらかじめリリース日時を告知したい時 ◦ デプロイ時に新旧サーバーの処理を混ぜたくない時 //
リクエストが着信した日時を取得する $requestDateTime = $request->getDateTime(); // リリース日時を設定する $targetDateTime = new DateTime('2023-10-24 19:00:00'); if ($requestDateTime >= $targetDateTime) { // 「リクエスト日時」>=「リリース日時」なら処理を行う } 日時によるリリース
FutureRelease • コロプラ独自の FutureRelease というリリース手法もある ◦ 「アプリバージョン」と「リリース日時」の合せ技 • アプリ側のリリースタイミングをサーバー側で管理できる! サーバ
②新Ver対応 デプロイ アプリ ①新Ver リリース ④フラグ返却 ③リリース日時 到達 32 新機能 リリース
• データそのものに開始日時を持たせる手法 ◦ 親データが開始するまで、紐づくデータがすべてリリースされない データによるリリース イベント 開始:10/30 19:00 終了:11/13 11:00
キャラB キャラA スキルA スキルB スキルC スキルD 33 開始:11/06 19:00 10/30 19:00 時点 初めから開放
• データそのものに開始日時を持たせる手法 ◦ 親データが開始するまで、紐づくデータがすべてリリースされない ◦ リリース日時を超えると、紐づくデータが自動でリリースされる データによるリリース イベント 開始:10/30 19:00
終了:11/13 11:00 キャラB キャラA スキルA スキルB スキルC スキルD 34 11/06 19:00 以降 New New
実際に リリーススケジュールを 組んでみる
• 様々なリリース手法があることは分かった • Q. 実際には「どのリリース手法」を「どんな時」に使うのか? ◦ A. ケースバイケース ◦ 1つのイベントをリリースするために複数の手法を組み合わせることが多い
◦ 各セクションへのヒアリングが必須 実際にリリーススケジュールを組んでみる
各セクションにヒアリング クライアント エンジニアさん 10/30 19:00 から 新イベントを開始したい です 既存機能を改修しました 新しいバージョンのアプリでは
リクエストパラメータが 変わります イベント開始と同時に 新しいUIを表示したいです イベント開始と同時に パラメータの計算方法を 修正したいです プランナーさん
各セクションにヒアリング クライアント エンジニアさん 10/30 19:00 から 新イベントを開始したい です 既存機能を改修しました 新しいバージョンのアプリでは
リクエストパラメータが 変わります イベント開始と同時に 新しいUIを表示したいです イベント開始と同時に パラメータの計算方法を 修正したいです プランナーさん ↓データリリース ↑日時リリース ↓バージョンリリース ↑FutureRelease
リリーススケジュールを組み立てる データリリース イベント開始 日時リリース パラメータ計算方法 の修正 バージョンリリース リクエスト改修 FutureRelease 新UIの表示
新バージョンアプリ公開 イベントデータを DB に insert サーバーデプロイ イベント開始
• リリース作業の大半はサーバーエンジニアの担当 ◦ =リリース作業の全体を見通すのはサーバーエンジニアの役目 ◦ =スケジュールの組み立てはサーバーエンジニアが牽引する • サーバー観点のチェックは必須 ◦ それぞれのリリース手段は適切か?
◦ リリース手順に漏れは無いか? ◦ データミスはないか? ノーメンテリリースはサーバーのオペレーションに懸かっている! リリーススケジュールを組み立てる
まとめ
まとめ • コロプラはノーメンテ主義です • でもノーメンテのリリースは大変 ◦ リリースタイミングのハンドリングが重要 • 様々な手法でリリースコントロールを行っています ◦
バージョン、日時、データなどなど ◦ サーバーエンジニアの腕の見せ所! 42
まとめ ノーメンテ運用は大変ですが、 どんな時でもユーザーが24時間ゲームを楽しめるように 日々頑張っています! 43