web100tips’s blog

webエンジニアが知っておくべきこと100を1日1投稿します

ゼロダウンタイムデプロイを極める|Blue-Green, Rolling Update, 実践手法まとめ

 

デプロイ時のゼロダウンタイムの工夫

本記事では、Webアプリケーションを稼働させたまま新しいバージョンをデプロイする「ゼロダウンタイムデプロイメント(Zero Downtime Deployment)」について、仕組み・技術・実装方法・注意点まで徹底的に解説します。

1. なぜゼロダウンタイムが重要か

  • ユーザー体験の維持:稼働中のサービスにアクセス障害を出さない
  • 業務影響の回避:ビジネス上の損失を防ぐ
  • システム信頼性:継続的デリバリーの実現には必須

2. ゼロダウンタイムを実現する主なアプローチ

2.1 Blue-Green Deployment

本番環境を「Blue(旧)」と「Green(新)」に分け、完全に切り替える方式。切替後すぐにロールバック可能。

2.2 Rolling Update

インスタンスを少しずつ入れ替える方式。コンテナ環境でよく使われる(例:KubernetesのRolling Update戦略)。

2.3 Canary Release

一部のユーザーに新バージョンを提供し、問題がなければ段階的に切り替える。

2.4 Feature Toggle(機能フラグ)

アプリにコードをデプロイしておきつつ、ユーザーに公開するかどうかはフラグで制御。

3. 技術的な工夫と構成

4. インフラ構成例


  +-----------+      +----------------+
  | User      | ---> | Load Balancer  | ---> Green環境
  +-----------+      +----------------+
                          |
                          +---------> Blue環境(切替前)
  

5. Docker/Kubernetesにおける実装

5.1 Docker ComposeでのRolling Updateは困難

Docker SwarmやKubernetesが推奨。

5.2 Kubernetesの例


  kubectl set image deployment/myapp myapp-container=myapp:v2
  

このコマンドで、Rolling Updateが開始され、段階的に新しいPodへ切り替えられる。

6. ゼロダウンタイムを阻む要因とその対策

  • DBのロック → 後方互換マイグレーション戦略
  • キャッシュの不整合 → キャッシュバージョン管理の導入
  • セッション状態の保持 → 外部セッションストレージ

7. CI/CDツールとの連携

  • GitHub Actions でのWorkflow定義
  • ArgoCD や Spinnaker などのK8s向けデプロイ管理ツール

8. ロールバック戦略

自動ロールバック設定(ヘルスチェック失敗時)、Blue-Greenでの即時切替、バージョン管理

まとめ

  • ゼロダウンタイムデプロイには複数の技術と設計思想の理解が必要
  • システムの構成に応じて最適な手法を選定することが鍵
  • テスト・監視・ロールバック体制が運用品質を左右する

本記事がゼロダウンタイムの基礎と実践の理解に役立てば幸いです。