コンテンツにスキップ
BlackOps1.xは試験的なバージョンです。Production Readyは2.xを予定しています。Releases
BlackOps
Esc
navigateopen⌘Jpreview
このページの内容

Deployment

HTTP WorkerとDeferred WorkerをProductionで運用するための責務と確認順を理解する。

Productionでは、Requestを受けるHTTP WorkerとDeferred Operationを処理するWorkerを別Processとして管理します。BlackOpsはKubernetes、systemd、Supervisor等のOrchestrator Integrationを提供しません。Process配置、TLS、Secret配布、Health Check、Resource Limit、Restart Policy、MonitoringはApplicationと運用環境が所有します。

Deploy前の順序

  1. Releaseと同じSourceからDependencyとCompile済みApplication Bootstrapを作ります。
  2. MigrationのStatusとDry Runを確認し、明示的に適用します。
  3. Frontend利用時は同じBuildからfrontend:generatefrontend:checkを実行します。
  4. HTTP WorkerとDeferred Workerへ同じBuild ID、Artifact、Database Configurationを渡します。
  5. OperationStatusAuthorizerをProduction PolicyへBindingします。
  6. HTTP WorkerのRequest上限とRestart、Deferred WorkerのHeartbeat、Retry、Graceful Shutdownを設定します。
  7. Journal、Outcome、Dead Letter、Process Exit、Database接続を監視します。
  8. Retentionの期間、Hold、Purge Auditを運用Policyとして確定します。

Local RuntimeのCompose構成はApplicationを手元で動かすReferenceであり、そのままProduction Topologyを規定しません。Production ImageはRuntime起動時にSource Discovery、Artifact Compile、MigrationへFallbackしない構成にしてください。

QuickstartのSame-origin Status AuthorizerをProduction Tenant Policyとしてそのまま使わず、Authentication、Tenant/Resource認可、TLS、Canonical Store暗号化、Access Control、Retentionを構成します。FrontendとBackendのBuildがずれると.status().wait()unexpected_responseで安全に停止します。

Workerの停止と回復

Deferred WorkerへSIGTERMまたはSIGINTを送り、新しいClaimを止めてGrace Period内のHandler完了を待ちます。Heartbeat失敗やGrace Timeout時は成功として確定せず、Lease ExpiryとRecoveryへ委ねます。Retry Scheduled、Failed、Dead Letterを同じ成功扱いにせず、Inline and DeferredTroubleshootingのLifecycleを監視へ反映してください。

.wait()のDeadline超過はOperationのCancelではありません。Clientがpoll_timeoutを返してもWorkerは処理を継続できます。Client待機時間とWorker処理SLOを別に監視し、無限WaitでProcess Supervisorの責務を代替しません。

HTTP Request/Deferred Attemptの開始時、BlackOpsは生成済みApplication ConnectionをHealth Checkします。切断を検知すると同じDBAL ObjectをCloseして一度だけ再接続し、復旧しなければそのRequest/Attemptを失敗させます。正常終了時はConnectionを再利用しますが、Transaction Leakまたは処理中のThrowableでは生成済みApplication ConnectionをCloseするため、次回の開始境界で再接続されます。Heartbeat ConnectionはApplication Connectionとは別Lifecycleです。

この回復境界は業務QueryやTransactionのRetryではありません。Database停止中の5xx/Worker Exitを監視し、Database復旧後に新しいRequest/Attemptが成功することをDeploy前に確認してください。Commit結果不明時の自動再実行やExactly-onceをBlackOpsへ期待せず、重複可能性がある処理にはIdempotency KeyやTransactional Outboxを用意します。

公開前にはSecurityの責任分界とReleasesのStable/main差、既知制約を確認してください。