eコマースのスケーリングのための Kubernetes: トラフィックの急増から世界的な拡大まで
ブラック フライデーのトラフィックが急増すると、e コマースの負荷が数分以内に 10 ~ 50 倍に増加する可能性があります。 従来のサーバー インフラストラクチャでは十分な速度で応答できません。 Kubernetes は、最新の e コマース プラットフォームが閑散期に過剰なプロビジョニングを行わずに予測不可能な需要を処理するために必要な自動スケーリング、自己修復、およびトラフィック管理機能を提供します。
このガイドでは、フラッシュ セールの処理から、場所に関係なく 200 ミリ秒未満で顧客にサービスを提供する複数地域のストアフロントの構築まで、e コマース ワークロードに特化した Kubernetes アーキテクチャについて説明します。
重要なポイント
- 水平ポッド オートスケーラー (HPA) は、e コマース サービスを 90 秒以内に 2 ポッドから 200 ポッドまで拡張できます
- レート制限を備えた Ingress コントローラーがトラフィック急増時にバックエンド サービスを保護
- ステートフル ワークロード (データベース、検索インデックス) には、ステートレス サービスとは異なるスケーリング戦略が必要です
- マルチリージョンの Kubernetes デプロイメントにより、世界中の顧客ベースのレイテンシが 60 ~ 80% 削減されます
Kubernetes が e コマースに適している場合
Kubernetes が常に正しい答えであるとは限りません。運用が複雑になりますが、これはスケーリング要件によって正当化される必要があります。
意思決定マトリックス
| 係数 | Docker Compose は十分 | Kubernetes の正当化 |
|---|---|---|
| 毎月のご注文 | <10,000 | 10,000+ |
| 同時ユーザー | <500 | 500+ |
| サービス数 | <5 | 5+ |
| 交通量の変動 | <3x ピーク | 3 倍以上のピーク |
| サービス提供地域 | シングル | 複数 |
| チームの規模 (DevOps) | 0-1 | 2+ |
| 稼働時間要件 | 99.9% | 99.95%以上 |
あなたのビジネスが Docker Compose 列に該当する場合は、代わりに Docker 実稼働デプロイメント ガイド を参照してください。
eコマース向けの Kubernetes アーキテクチャ
クラスターのレイアウト
eCommerce Kubernetes クラスターには通常、次の名前空間が含まれます。
storefront: フロントエンド アプリケーション ポッドapi: バックエンド API サービスworkers: バックグラウンド ジョブ プロセッサ (注文処理、電子メール送信、在庫同期)data: データベース、キャッシュ、検索エンジン (またはマネージド外部サービス)ingress: Ingress コントローラーとロード バランサーmonitoring: プロメテウス、グラファナ、アラート
導入構成
# storefront-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: storefront
namespace: storefront
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: storefront
template:
metadata:
labels:
app: storefront
spec:
containers:
- name: storefront
image: registry.example.com/storefront:v2.1.0
ports:
- containerPort: 3000
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: 1000m
memory: 512Mi
readinessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 15
periodSeconds: 20
env:
- name: API_URL
value: "http://api-service.api.svc.cluster.local:3001"
- name: NODE_ENV
value: "production"
自動スケーリング構成
水平ポッドオートスケーラー
# storefront-hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: storefront-hpa
namespace: storefront
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: storefront
minReplicas: 3
maxReplicas: 50
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 70
behavior:
scaleUp:
stabilizationWindowSeconds: 30
policies:
- type: Percent
value: 100
periodSeconds: 60
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 10
periodSeconds: 60
scaleUp ポリシーでは、60 秒ごとにポッドを 2 倍にすることができます。これは、突然のトラフィックの急増に対処するために重要です。 scaleDown ポリシーは、スラッシングを防ぐために保守的 (1 分あたり 10%) です。
クラスター オートスケーラー
HPA はポッドをスケーリングしますが、ポッドにはノードが必要です。クラスター オートスケーラーは、保留中のポッド要求に基づいてノードを追加および削除します。
# cluster-autoscaler configuration
apiVersion: v1
kind: ConfigMap
metadata:
name: cluster-autoscaler-config
data:
balance-similar-node-groups: "true"
skip-nodes-with-local-storage: "false"
scale-down-delay-after-add: "10m"
scale-down-unneeded-time: "10m"
max-node-provision-time: "5m"
AWS EKS の場合、最小/最大サイズを使用してノード グループを構成します。
eksctl create nodegroup \
--cluster ecommerce-prod \
--name workers \
--node-type t3.large \
--nodes-min 3 \
--nodes-max 20 \
--node-volume-size 50 \
--managed
イングレスとトラフィックの管理
Nginx Ingress コントローラー
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ecommerce-ingress
annotations:
nginx.ingress.kubernetes.io/rate-limit: "100"
nginx.ingress.kubernetes.io/rate-limit-window: "1m"
nginx.ingress.kubernetes.io/proxy-body-size: "10m"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
tls:
- hosts:
- store.example.com
secretName: store-tls
rules:
- host: store.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 3001
- path: /
pathType: Prefix
backend:
service:
name: storefront-service
port:
number: 3000
フラッシュセールの処理
フラッシュ販売には事前スケーリングが必要です。既知の高トラフィック イベントについては、自動スケーリングのみに依存しないでください。
# Pre-scale 2 hours before a flash sale
kubectl scale deployment storefront --replicas=20 -n storefront
kubectl scale deployment api --replicas=15 -n api
kubectl scale deployment order-worker --replicas=10 -n workers
# After the sale, let HPA scale down naturally
Kubernetes でのデータベースのスケーリング
マネージド データベースとセルフホスト型データベース
| アプローチ | 長所 | 短所 |
|---|---|---|
| マネージド (RDS、Cloud SQL) | 自動バックアップ、パッチ適用、フェイルオーバー | コストが高く、カスタマイズが制限される |
| 自己ホスト型 (StatefulSet) | フルコントロール、低コスト | 運用上の負担、バックアップの責任 |
推奨事項: 本番の e コマースには管理されたデータベースを使用します。 Kubernetes で PostgreSQL を実行する場合の運用オーバーヘッドは、ほとんどの企業にとって正当なものではありません。
接続プーリング
# pgbouncer-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: pgbouncer
namespace: data
spec:
replicas: 2
template:
spec:
containers:
- name: pgbouncer
image: edoburu/pgbouncer:1.21.0
ports:
- containerPort: 5432
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: db-credentials
key: url
- name: MAX_CLIENT_CONN
value: "1000"
- name: DEFAULT_POOL_SIZE
value: "25"
- name: POOL_MODE
value: "transaction"
トランザクション プーリング モードの PgBouncer を使用すると、数百のアプリケーション ポッドがデータベース接続の限られたプールを共有できます。接続プーリングを使用しない場合、API ポッドを 50 個に拡張するには、50 x 20 = 1,000 のデータベース接続が必要となり、ほとんどの PostgreSQL インスタンスを圧倒します。
データベース スケーリング戦略の詳細については、データベース スケーリング ガイド を参照してください。
マルチリージョン展開
アーキテクチャ
マルチリージョン e コマース Kubernetes デプロイメントでは、以下を使用します。
- リージョン クラスター: 各リージョンの独立した Kubernetes クラスター
- グローバル ロード バランサー: ユーザーを最も近いリージョンにルーティングします (AWS Global Accelerator、Cloudflare)
- データベース レプリケーション: 1 つのリージョンにプライマリ、他のリージョンにリードレプリカ
- CDN: 世界中のエッジ ロケーションから提供される静的資産
レイテンシの影響
| ユーザーの所在地 | 単一リージョン (米国東部) | マルチリージョン |
|---|---|---|
| ニューヨーク | 20ミリ秒 | 20ミリ秒 |
| ロンドン | 120ミリ秒 | 25ミリ秒 |
| シンガポール | 250ミリ秒 | 30ミリ秒 |
| シドニー | 300ミリ秒 | 35ミリ秒 |
マルチリージョン展開により、海外の顧客の待ち時間が 60 ~ 90% 削減され、コンバージョン率が直接的に向上します。研究によると、遅延が 100 ミリ秒短縮されるごとに、e コマース コンバージョンが 1.1% 増加することが示されています。
Kubernetes eコマースの監視
重要なダッシュボード
- ビジネス指標: 1 分あたりの注文数、カート コンバージョン率、1 時間あたりの収益
- アプリケーション メトリクス: リクエスト レイテンシ (P50、P95、P99)、エラー率、アクティブ セッション
- インフラストラクチャ メトリクス: ポッドの CPU/メモリ、ノード使用率、HPA アクティビティ
- データベース メトリクス: 接続数、クエリ レイテンシ、レプリケーション ラグ
# prometheus-servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: api-monitor
namespace: monitoring
spec:
selector:
matchLabels:
app: api
endpoints:
- port: metrics
interval: 15s
path: /metrics
よくある質問
Kubernetes のコストは従来のホスティングと比較してどれくらいですか?
Kubernetes インフラストラクチャのコストは、コントロール プレーンのコスト、ロード バランサーの料金、ノードのオーバーヘッドにより、同等のベアメタル インスタンスやシンプルなクラウド インスタンスより 20 ~ 40% 高くなります。ただし、自動スケーリングでは、オフピーク時間のピーク容量に対して料金を支払う必要がないため、通常、総支出が 30 ~ 50% 削減されます。トラフィックが変動するほとんどの e コマース ビジネスにとって、最終的な効果は 10 ~ 25% のコスト削減です。
Kubernetes 上で Odoo を実行できますか?
はい、ただし注意点があります。 Odoo のファイルストアでは、複数のレプリカを実行する場合、共有永続ストレージ (EFS、NFS) が必要です。セッションを Redis に外部化しない限り、セッション アフィニティが必要です。データベース接続は PgBouncer 経由でプールする必要があります。ほとんどの Odoo デプロイメントでは、Docker Compose または ECS がより簡単で十分です。 Kubernetes は、同時ユーザーが 200 名を超える大規模な Odoo デプロイメントに適しています。
ダウンタイムを発生させずに Kubernetes のアップグレードを処理するにはどうすればよいですか?
コントロール プレーンのアップグレードを処理するマネージド Kubernetes サービス (EKS、GKE、AKS) を使用します。ノードのアップグレードの場合は、ローリング戦略を使用します。つまり、ノードを遮断し、そのポッドをドレインし (他のノードに再スケジュールされます)、ノードをアップグレードし、遮断を解除します。ポッド中断予算を適切に設定すれば、これは完全に自動化され、ダウンタイムはゼロになります。
本番環境の e コマースの最小クラスター サイズはどれくらいですか?
中規模の e コマース プラットフォーム用の最小実稼働クラスター: アプリケーション ワークロード用の 3 つのノード (t3.large または同等)、およびマネージド データベース インスタンス。これにより、約 500 人の同時ユーザーを処理でき、ピーク時の自動スケーリングの余地が得られます。インフラストラクチャの総コスト: 月額約 500 ~ 800 ドル。
次に何が起こるか
Kubernetes はスケーリングの基盤を提供しますが、それはインフラストラクチャのパズルの 1 ピースにすぎません。 CI/CD ベスト プラクティス、CDN 最適化、負荷テスト と組み合わせて、完全な e コマース運用プラットフォームを実現します。
Kubernetes コンサルティングおよび e コマース スケーリング戦略については ECOSIRE にお問い合わせ、Kubernetes でのマネージド ヘッドレス コマースについては Shopify 統合サービス をご覧ください。
ECOSIRE が発行 -- 企業による e コマース インフラストラクチャの世界規模の拡大を支援します。
執筆者
ECOSIRE Research and Development Team
ECOSIREでエンタープライズグレードのデジタル製品を開発。Odoo統合、eコマース自動化、AI搭載ビジネスソリューションに関するインサイトを共有しています。
関連記事
e コマース向け AI 詐欺検出: 優良顧客をブロックせずに収益を保護
AI 詐欺検出を導入して、不正取引の 95% 以上を捕捉し、誤検知を 50 ~ 70% 削減します。モデル、ルール、実装について説明します。
在庫最適化のための AI: 在庫切れを削減し、輸送コストを削減
AI を活用した在庫最適化を導入して、在庫切れを 30 ~ 50% 削減し、保管コストを 15 ~ 25% 削減します。需要予測、安全在庫、再注文ロジックをカバーします。
e コマース向け AI パーソナライゼーション: コンバージョンをもたらす個別化されたエクスペリエンス
製品レコメンデーション、動的コンテンツ、パーソナライズされた検索、カスタマー ジャーニーの最適化により、e コマース向け AI パーソナライゼーションを導入し、コンバージョン率を 15 ~ 30% 高めます。