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
ゼロダウンタイムでミドルウェアの バージョンアップを実現した手法と課題
Search
つっつん
November 08, 2025
Programming
400
0
Share
ゼロダウンタイムでミドルウェアの バージョンアップを実現した手法と課題
つっつん
November 08, 2025
Other Decks in Programming
See All in Programming
【ディップ|26年新卒研修資料】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
170
AI Agent と正しく分析するための環境作り
yoshyum
2
510
Spec Driven Development | AI Summit Vilnius
danielsogl
PRO
1
160
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
1
120
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
460
AWSはOSSをどのように 考えているのか?
akihisaikeda
0
120
ソフトウェア設計の結合バランス #phperkaigi
kajitack
0
510
ハーネスエンジニアリングとは?
kinopeee
13
7k
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Practices for Loading WebAssembly (Spring 2026)
petamoriken
5
1.1k
「なんか〇〇ライブラリで脆弱性あるみたいなんだけど。。。」から始める脆弱性対応 / First Steps in Vulnerability Response
mackey0225
2
130
20260514 - build with ai 2026 - build LINE Bot with Gemini CLI
line_developers_tw
PRO
0
450
KMP × Kotlin 2.3 - How Android Got Slower While iOS Builds Improved by 47%
rio432
0
200
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
460
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.7k
Become a Pro
speakerdeck
PRO
31
5.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.6k
Practical Orchestrator
shlominoach
191
11k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.2k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
390
Color Theory Basics | Prateek | Gurzu
gurzu
0
310
Information Architects: The Missing Link in Design Systems
soysaucechin
0
920
Facilitating Awesome Meetings
lara
57
6.8k
Evolving SEO for Evolving Search Engines
ryanjones
0
190
Transcript
2025年11月8日 PHPカンファレンス福岡2025 つっつん (@tsuttsun_wind) ゼロダウンタイムでミドルウェアの バージョンアップを実現した手法と課題
自己紹介 名前 : つっつん (X: @tsuttsun_wind) 所属 : 株式会社PR TIMES
領域 : バックエンド 趣味 : お酒、野球観戦、ダーツ カンファレンス初登壇です 🙇
検索リクエスト 検索結果返却 PR TIMES AWS OpenSearch Service 背景 PR TIMESの検索はOpenSearch上で運用されている
バージョンアップ前まで1.3で運用 1分間に平均約3,000回の検索リクエストが飛んでいる 数百万件のドキュメントを保管している ピーク時は1~3分間に約2500件のドキュメントが追加される
AWSからEOLのアナウンス 運用していたバージョンは対象外だが...? 将来のEOLリスクを見据えて、バージョンアップの実施を決定 3.1がリリースされているが、まずは2.19へ上げる 一気にバージョンを上げると変更が多くなる可能性があるため回避
移行にあたっての要件 本番環境のOpenSearchは停止させることが不可 検索機能や更新バッチなどのコア機能がOpenSearchに依存しているため そのため、ゼロダウンタイムでの移行が必要 また、既存で動いている機能のコード変更は、 インシデント発生時に切り戻しが大変になる 障害発生時には速やかにロールバック可能であることが求められる
:リクエスト : 切り替え 旧クラスター 新クラスター クライアント 方針 新クラスターを別途作成して少しずつ移行を進める 1.新旧クラスターの同時運用をしばらく実施する 2.障害発生時の影響を最小限にするため、範囲を限定した上で少しずつ
新クラスターへ切り替える 3.移行が完全に完了した時点で、旧クラスターを廃止する 追加のリソースが必要なため、余計にお金が掛かることに注意が必要
ユーザーを振り分ける仕組みを導入 ユーザー振り分け機能 特定ユーザーのみに移行先のクラスターを使用した検索を提供する ユーザーの振り分けはCookieで各ユーザーにランダムな数値を割り当て、 重みが下回っていたら新機能を提供 10%、20%...と段階的に解放していく 機能提供可否の確認 振り分け結果を返却 クライアント
ユーザーを振り分ける仕組み 割り当てられた数値と重みを比較した結果を返却する
Feature Flag Feature Flagを設定する Feature Flagでユーザー振り分けのオン・オフを管理、 CookieとIPアドレスを確認した上で機能の切り替えを行なっている 有効の場合、結果に応じて処理を分ける 無効の場合、既存の処理を維持する 問題が発生した場合は無効にすることでロールバックが可能
Flagのオン・オフ設定 Flagの状態で処理を分ける クライアント
Feature Flag
既存設計の問題点 インスタンスを直接生成するコードが数十箇所に存在している状態 何が問題? 宛先URLの引数に定数が直接入れられている 次回以降のバージョンアップでも対象コード全てを置き換える必要がある 参照元が多いため、コンストラクタの変更が困難 原因? 実装を参考にした結果コピペで増殖してしまった可能性が高い
既存設計を改善する Factory-Patternの導入 Clientクラスの呼び出しはFactory内で管理、将来的な変更はFactory内で完結 Cookie管理不可のバッチを除き、Feature Flagで切り替え可能
改善したコード 新たにFactory Classを追加、インスタンスの生成箇所は1箇所にまとめる PHPStanのCustom Rule導入も視野 Feature Flagは将来変更が必要な際に適宜導入する
運用時のパフォーマンス比較 移行元 移行先 ドキュメント登録量は変わらず、検索量は増加 ドキュメント処理速度は少々増加、検索処理速度はほぼ変わらず 左上: ドキュメント登録量 右上: 検索量 左下: ドキュメント処理速度 右下:
検索処理速度
結果 課題を解決しつつゼロダウンタイムでのミドルウェア移行を実現 🙌
まとめ 既存設計の課題を解決しつつ、ゼロダウンタイム移行の実現! 新クラスターを作成して少しずつの移行を実施 Feature Flag+ユーザ振り分けで“止めない・壊さない・すぐ戻せる”を実現 入口を1か所に固定させるFactoryを作成
We’re Hiring! カジュアル面談 開発者ブログ PR TIMESでは現在エンジニアを募集しています!