アーキテクチャ (IT)DevOpsエンジニア, バックエンド開発者

ゼロダウンタイムデプロイメントとは何ですか?ITシステムのアーキテクチャにおけるその実現方法は?

Hintsage AIアシスタントで面接を突破

回答。

ゼロダウンタイムデプロイメントとは、ユーザーに対して中断やアクセス不能なしにアプリケーションを更新する実践です。これは、古いインスタンスを段階的にシャットダウンし、新しいインスタンスを導入することで実現されます。

statelessアプリケーションをクラウドで実装する例(Kubernetesを使用):

  1. 古いインスタンスを殺さずに、新しいバージョンのポッドをデプロイする。
  2. 新しいインスタンスが健全であることを確認する。
  3. その後でトラフィックを新しいインスタンスに切り替える(blue-green/releaseまたはrolling update)。
  4. 新しいバージョンへの完全な確信の後、古いコンテナを徐々にシャットダウンする。

rolling updateのためのdeployment.yamlの例:

apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 4 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: my-app spec: containers: - name: app image: my-app:v2

主な特徴:

  • statelessサービスまたは状態の移行のための専門的な戦略が必要です。
  • 通常、rolling updateやblue-greenデプロイメントを介して実現されます。
  • データベースレベルでのゼロダウンタイムには、複数段階の移行(backward/forward-compatibleスキーム)が必要です。

ひっかけ質問。

データスキーマの変更時にゼロダウンタイムデプロイメントは不可能ですか?

可能です。スキーマの移行を2段階で実施する場合: 最初にコードが古いスキーマと新しいスキーマの両方と互換性を持つようにし、次に実際の移行とレガシーコードの削除を行います。

アプリケーションがstatelessであれば、ゼロダウンタイムデプロイメントは常に保証されますか?

いいえ!外部の状態、接続のタイムアウト、未処理のリクエスト、API内の非互換の変更が制約要因となる場合があります。

ゼロダウンタイムデプロイメントは大企業だけに必要ですか?

いいえ。小規模なスタートアップやSaaSソリューションでも、ゼロダウンタイムはユーザーエクスペリエンスにとって重要な要素です(特にグローバル市場や高負荷な状況で)。