ゼロダウンタイムデプロイメントとは、ユーザーに対して中断やアクセス不能なしにアプリケーションを更新する実践です。これは、古いインスタンスを段階的にシャットダウンし、新しいインスタンスを導入することで実現されます。
statelessアプリケーションをクラウドで実装する例(Kubernetesを使用):
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
主な特徴:
データスキーマの変更時にゼロダウンタイムデプロイメントは不可能ですか?
可能です。スキーマの移行を2段階で実施する場合: 最初にコードが古いスキーマと新しいスキーマの両方と互換性を持つようにし、次に実際の移行とレガシーコードの削除を行います。
アプリケーションがstatelessであれば、ゼロダウンタイムデプロイメントは常に保証されますか?
いいえ!外部の状態、接続のタイムアウト、未処理のリクエスト、API内の非互換の変更が制約要因となる場合があります。
ゼロダウンタイムデプロイメントは大企業だけに必要ですか?
いいえ。小規模なスタートアップやSaaSソリューションでも、ゼロダウンタイムはユーザーエクスペリエンスにとって重要な要素です(特にグローバル市場や高負荷な状況で)。