diff --git a/docs/deployment.md b/docs/deployment.md index 961a5597033..eb0b992cbbb 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -6,6 +6,8 @@ description: Choose a supported Durable Workflow v2 self-hosting path and the ar # Self-Hosting Deployments +For self-hosted or Cloud runtime changes, follow [moving between runtimes](/docs/polyglot/runtime-migration/). Keep existing runs at their source while new starts move. + Durable Workflow v2 supports several self-hosted shapes. Pick the smallest path that matches the environment you operate, then keep the image, database, cache, auth, readiness, and upgrade contract explicit. diff --git a/docs/laravel-adoption.md b/docs/laravel-adoption.md index f11982b3b5b..c16303ed68f 100644 --- a/docs/laravel-adoption.md +++ b/docs/laravel-adoption.md @@ -563,6 +563,8 @@ that explicit validated import operation creates Server-owned state. Retiring an old package, queue, table, secret, or Waterline deployment is the last step, never the cutover mechanism. +For moves between service-mode runtimes, use [moving between runtimes](/docs/polyglot/runtime-migration/). Server-sourced history export is not live-state import. + ## Continue with the chosen path - [Stable v1 installation](/docs/1.x/installation/) diff --git a/docs/polyglot/cloud-control-plane.md b/docs/polyglot/cloud-control-plane.md index f08d98b2f73..a626b2ebda1 100644 --- a/docs/polyglot/cloud-control-plane.md +++ b/docs/polyglot/cloud-control-plane.md @@ -548,6 +548,8 @@ pause/resume operation. Planned SLA terms use the same provisioned-time model at own rates, minimums and caps. Use the plan's returned `billing_terms` when interpreting usage; historical invoices keep their accepted terms. +Before deprovisioning, follow [moving between runtimes](/docs/polyglot/runtime-migration/#preserve-evidence): retain verified history and payload evidence, and confirm that all source-owned runs are terminal. Capacity billing continues while the source remains provisioned. + Export the same evidence as CSV or a JSON report when a downstream finance system needs a file handoff: diff --git a/docs/polyglot/deployment-modes.md b/docs/polyglot/deployment-modes.md index d7e2afe55f5..5ad234ed7ff 100644 --- a/docs/polyglot/deployment-modes.md +++ b/docs/polyglot/deployment-modes.md @@ -150,6 +150,8 @@ Three migration rules are non-negotiable: ## Related References +[Moving between runtimes](/docs/polyglot/runtime-migration/) covers self-hosted-to-self-hosted, self-hosted-to-Cloud and Cloud-to-self-hosted drain and cutover. + - [Installation](/docs/installation) - [Server](/docs/polyglot/server) - [PHP SDK](/docs/polyglot/php) diff --git a/docs/polyglot/runtime-migration.md b/docs/polyglot/runtime-migration.md new file mode 100644 index 00000000000..00895959080 --- /dev/null +++ b/docs/polyglot/runtime-migration.md @@ -0,0 +1,48 @@ +--- +title: "Moving between runtimes" +description: "Drain existing runs and move new starts between self-hosted Server deployments and Cloud." +tags: + - migration + - operations + - polyglot +--- + +# Moving between runtimes + +Move new starts to the destination while existing runs finish on their source. This procedure covers independent service-mode runtimes. A history export preserves evidence; it does not transfer a live Server-sourced run. The supported [embedded-v2 import](./embedded-to-server.md#phase-e-import-eligible-embedded-v2-runs) accepts eligible embedded sources only. + +## Choose the destination {#paths} + +| Move | Destination preparation | +| --- | --- | +| Self-hosted Server to another self-hosted Server | Deploy the destination with its own authoritative database, payload storage and credentials. Follow the [deployment guide](../deployment.md). | +| Self-hosted Server to Cloud | Provision the destination namespace and verify its returned runtime URL, credentials and capabilities. Follow [Cloud setup](./cloud-control-plane.md). | +| Cloud to self-hosted Server | Prepare the self-hosted destination and its SDK workers before changing application traffic. Keep the Cloud source provisioned while its runs drain. | + +## Prepare both runtimes {#prepare} + +Record each source endpoint, namespace, workflow instance and run ID, task queue, workflow/activity type and payload-store dependency. Preserve a tested recovery path for self-hosted storage. A Cloud move does not grant access to a database backup or copy Cloud credentials to the destination. Verify the actual destination release and capabilities, role credentials, worker registrations and advertised types. + +## Switch new starts in small groups {#cutover} + +1. Run the destination and its workers beside the source. Complete a uniquely identified canary with representative activities and results. Keep its side effects isolated from real business work. +2. Inventory every start producer: application calls, schedules, webhook/bridge adapters and service calls. Choose a cutover point for one workflow family. Coordinate schedule pauses and destination registration so both runtimes do not start the same occurrence. +3. Route that family’s new starts to the destination. Keep an application-owned record of which endpoint and namespace accepted each workflow. Reusing a business key on another runtime does not provide cross-runtime deduplication. +4. Keep signals, approvals, updates, queries, cancellation and result/history reads pointed at the runtime owning the run. Keep source workers, queues, timers, credentials and payload access available. Changing a client URL does not move accepted work or its activity leases. +5. Check outcomes and failures before moving the next family. If a start has an uncertain transport outcome, resolve it at the original runtime before submitting it elsewhere. A long-lived run that never reaches terminal state has not drained. + +## Preserve evidence before retirement {#preserve-evidence} + +Export the history you must retain, including every required continuation run, original payload bytes and codecs. Check completeness and integrity with a compatible consumer, and retain the exact producer identity. [History export and replay guidance](../testing.md#service-sdk-replay) explains the separate checks. Audit exports do not make Server-sourced runs eligible for live import. + +Use the producer actually serving the export. Core 2.11.4 alone does not qualify Server, bundled CLI, SDK HTTP or Cloud exports. Follow the separate [Server HTTP producer/image qualification](https://github.com/durable-workflow/server/issues/692). Old lossy bundles remain invalid. Do not change numbers or checksums to force acceptance, and do not destroy the authoritative source while required evidence is unavailable or unverifiable. + +## Retire the source last {#retire-source} + +Confirm that no source-owned nonterminal runs remain across every relevant namespace and all list pages. Include waiting parents/children and runs created by remaining start producers. A healthy endpoint, an empty first page or unavailable metrics does not prove zero open work. Confirm that no callers, callbacks or workers still depend on the source and that required archives are readable. + +Only then retire self-hosted resources or deprovision the Cloud runtime. Cloud capacity charges continue while it remains provisioned, including while idle or draining. Deprovisioning removes active runtime data and credentials and is not pause/resume. Use the existing plan’s returned billing terms; this procedure creates no automatic refund or billing exception. + +## Roll back routing without moving runs {#rollback} + +Route future starts back only to a healthy, compatible source. Runs already accepted by the destination remain destination-owned and need its workers and command routing until terminal. Preserve both ownership records and prevent duplicate starts. Do not restore old source storage over newer accepted state or resume a second live copy of a run. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/deployment.md b/i18n/de/docusaurus-plugin-content-docs/current/deployment.md index 6290ecee1e3..4796cad3261 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/deployment.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/deployment.md @@ -6,6 +6,8 @@ description: Einen unterstützten Selbsthosting-Weg für Durable Workflow v2 und # Selbsthosting-Bereitstellungen {#self-hosting-deployments} +Für den Wechsel zwischen selbst gehosteten Laufzeiten und Cloud folgen Sie [Workloads zwischen Laufzeiten verschieben](/docs/polyglot/runtime-migration/). Bestehende Läufe bleiben auf der Quelle, während neue Starts verlagert werden. + Durable Workflow v2 unterstützt mehrere selbst gehostete Formen. Wählen Sie den kleinsten Weg, der zu Ihrer Betriebsumgebung passt, und halten Sie Verträge für Image, Datenbank, Cache, Authentifizierung, Bereitschaft und Upgrades explizit. Dieser Leitfaden behandelt die eigenständige Serverdistribution. Betreiben Sie das Laravel-Paket eingebettet in Ihrer Anwendung, verwenden Sie stattdessen die Seiten zu Paketinstallation und -konfiguration. Durable Workflow Cloud ist eine separate verwaltete Dienstoption, bei der Cloud Laufzeit, Persistenz, Platzierung und Wiederherstellung betreibt. Ein selbst gehosteter Server wird niemals an Cloud angebunden. Siehe [Verwaltete Cloud-Laufzeit](/docs/polyglot/cloud-control-plane). Der aktuelle Cloud-Vertrag umfasst eine verwaltete Laufzeit und Wiederherstellungsgrenze in einer einzelnen Region. Er verspricht keine regionsübergreifende Replikation, automatisches regionales Failover oder Failback. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/laravel-adoption.md b/i18n/de/docusaurus-plugin-content-docs/current/laravel-adoption.md index 704108188c7..662f8563cc3 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/laravel-adoption.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/laravel-adoption.md @@ -486,6 +486,8 @@ Verwenden Sie für den Selbsthosting-Import das vollständige [Migrationsverfahr Ein altes Paket, eine Warteschlange, Tabelle, ein Geheimnis oder eine Waterline-Bereitstellung wird zuletzt stillgelegt. Dies ist nie der Umstellungsmechanismus. +Für Wechsel zwischen Laufzeiten im Service-Modus verwenden Sie [Workloads zwischen Laufzeiten verschieben](/docs/polyglot/runtime-migration/). Server-Verlaufsexport ist kein Import laufenden Zustands. + ## Mit dem gewählten Weg fortfahren {#continue-with-the-chosen-path} - [Stabile v1-Installation](/docs/1.x/installation/) diff --git a/i18n/de/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md b/i18n/de/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md index 2803b45becc..ae42868b964 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md @@ -568,6 +568,8 @@ dasselbe Modell bereitgestellter Zeit mit eigenen Sätzen, Mindest- und Höchstbeträgen. Verwenden Sie beim Interpretieren der Nutzung die vom Plan zurückgegebenen `billing_terms`. Historische Rechnungen behalten ihre akzeptierten Bedingungen. +Folgen Sie vor der Deprovisionierung [Workloads zwischen Laufzeiten verschieben](/docs/polyglot/runtime-migration/#preserve-evidence): Bewahren Sie geprüfte Verlaufs- und Payload-Nachweise auf und bestätigen Sie den Endzustand aller Quell-Läufe. Kapazitätskosten laufen weiter, solange die Quelle bereitgestellt ist. + Exportieren Sie dieselben Nachweise als CSV oder JSON-Bericht, wenn ein nachgelagertes Finanzsystem eine Datei benötigt: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md b/i18n/de/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md index daaca33cd94..73b93ee069d 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md @@ -98,6 +98,8 @@ Drei Regeln sind verbindlich: ## Weitere Referenzen {#related-references} +[Workloads zwischen Laufzeiten verschieben](/docs/polyglot/runtime-migration/) beschreibt das Auslaufen und Umschalten zwischen selbst gehosteten Servern, von Server zu Cloud und von Cloud zu Server. + - [Installation](/docs/installation) - [Server](/docs/polyglot/server) - [PHP-SDK](/docs/polyglot/php) diff --git a/i18n/de/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md b/i18n/de/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md new file mode 100644 index 00000000000..4c3466d9082 --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md @@ -0,0 +1,48 @@ +--- +title: "Workloads zwischen Laufzeiten verschieben" +description: "Bestehende Läufe beenden lassen und neue Starts zwischen selbst gehosteten Servern und Cloud verlagern." +tags: + - migration + - operations + - polyglot +--- + +# Workloads zwischen Laufzeiten verschieben + +Leiten Sie neue Starts zum Ziel, während bestehende Läufe auf ihrer Quelle enden. Dieses Verfahren gilt für unabhängige Laufzeiten im Service-Modus. Ein Verlaufsexport erhält Nachweise, überträgt aber keinen laufenden Server-Lauf. Der unterstützte [Embedded-v2-Import](./embedded-to-server.md#phase-e-import-eligible-embedded-v2-runs) akzeptiert nur geeignete Embedded-Quellen. + +## Ziel auswählen {#paths} + +| Wechsel | Zielvorbereitung | +| --- | --- | +| Selbst gehosteter Server zu anderem selbst gehosteten Server | Stellen Sie das Ziel mit eigener maßgeblicher Datenbank, Payload-Speicher und Zugangsdaten bereit. Folgen Sie der [Bereitstellungsanleitung](../deployment.md). | +| Selbst gehosteter Server zu Cloud | Stellen Sie den Ziel-Namespace bereit und prüfen Sie zurückgegebene Laufzeit-URL, Zugangsdaten und Fähigkeiten. Folgen Sie der [Cloud-Einrichtung](./cloud-control-plane.md). | +| Cloud zu selbst gehostetem Server | Bereiten Sie Ziel und SDK-Worker vor, bevor Sie den Anwendungsverkehr ändern. Lassen Sie die Cloud-Quelle bereitgestellt, während ihre Läufe enden. | + +## Beide Laufzeiten vorbereiten {#prepare} + +Erfassen Sie Quell-Endpunkt, Namespace, Workflow-Instanz- und Lauf-ID, Task Queue, Workflow-/Activity-Typen und Payload-Speicherabhängigkeiten. Erhalten Sie einen getesteten Wiederherstellungsweg für selbst gehosteten Speicher. Ein Cloud-Wechsel gewährt keinen Zugriff auf ein Datenbankbackup und kopiert keine Cloud-Zugangsdaten zum Ziel. Prüfen Sie tatsächliche Zielversion und Fähigkeiten, Rollen-Zugangsdaten, Worker-Registrierungen und gemeldete Typen. + +## Neue Starts in kleinen Gruppen umstellen {#cutover} + +1. Betreiben Sie Ziel und Worker neben der Quelle. Schließen Sie einen eindeutig identifizierten Canary-Lauf mit repräsentativen Activities und Ergebnissen ab. Trennen Sie seine Auswirkungen von echten Geschäftsvorgängen. +2. Erfassen Sie alle Startquellen: Anwendungsaufrufe, Zeitpläne, Webhook-/Bridge-Adapter und Service-Aufrufe. Wählen Sie einen Umschaltpunkt für eine Workflow-Familie. Stimmen Sie Zeitplanpausen und Zielregistrierung so ab, dass beide Laufzeiten nicht denselben Termin starten. +3. Leiten Sie neue Starts dieser Familie zum Ziel. Halten Sie in der Anwendung fest, welcher Endpunkt und Namespace jeden Workflow angenommen hat. Ein erneut verwendeter Geschäftsschlüssel auf einer anderen Laufzeit bietet keine laufzeitübergreifende Deduplizierung. +4. Leiten Sie Signale, Freigaben, Updates, Abfragen, Abbrüche sowie Ergebnis- und Verlaufsabrufe weiter zur zuständigen Laufzeit. Erhalten Sie Quell-Worker, Queues, Timer, Zugangsdaten und Payload-Zugriff. Eine geänderte Client-URL verschiebt weder angenommene Arbeit noch deren Activity-Leases. +5. Prüfen Sie Ergebnisse und Fehler vor der nächsten Familie. Bei ungewissem Startergebnis durch Transportfehler klären Sie es zuerst auf der ursprünglichen Laufzeit, bevor Sie anderswo starten. Ein langlebiger Lauf ohne Endzustand ist noch nicht abgeschlossen. + +## Nachweise vor der Stilllegung sichern {#preserve-evidence} + +Exportieren Sie den aufzubewahrenden Verlauf einschließlich aller erforderlichen Fortsetzungsläufe, ursprünglichen Payload-Bytes und Codecs. Prüfen Sie Vollständigkeit und Integrität mit einem kompatiblen Verbraucher und bewahren Sie die genaue Erzeugeridentität auf. Die [Anleitung zu Verlaufsexport und Replay](../testing.md#service-sdk-replay) erklärt die getrennten Prüfungen. Audit-Exporte erlauben keinen Import laufenden Server-Zustands. + +Prüfen Sie den Erzeuger, der den Export tatsächlich liefert. Core 2.11.4 allein qualifiziert keine Server-, mitgelieferten CLI-, SDK-HTTP- oder Cloud-Exporte. Beachten Sie die separate [Qualifikation des Server-HTTP-Erzeugers und Images](https://github.com/durable-workflow/server/issues/692). Alte verlustbehaftete Bundles bleiben ungültig. Ändern Sie weder Zahlen noch Prüfsummen, um die Annahme zu erzwingen, und zerstören Sie die maßgebliche Quelle nicht, solange erforderliche Nachweise fehlen oder nicht prüfbar sind. + +## Quelle zuletzt stilllegen {#retire-source} + +Bestätigen Sie für alle relevanten Namespaces und alle Listenseiten, dass keine nicht terminalen Quell-Läufe verbleiben. Berücksichtigen Sie wartende Eltern/Kinder und Läufe verbleibender Startquellen. Ein gesunder Endpunkt, eine leere erste Seite oder fehlende Metriken beweisen keine leere Arbeitsmenge. Prüfen Sie, dass keine Aufrufer, Callbacks oder Worker mehr von der Quelle abhängen und erforderliche Archive lesbar sind. + +Entfernen Sie erst dann selbst gehostete Ressourcen oder deprovisionieren Sie die Cloud-Laufzeit. Cloud-Kapazitätskosten laufen weiter, solange sie bereitgestellt ist, auch im Leerlauf oder beim Auslaufen. Die Deprovisionierung entfernt aktive Laufzeitdaten und Zugangsdaten und ist keine Pause mit Fortsetzung. Es gelten die zurückgegebenen Bedingungen des bestehenden Plans; dieses Verfahren schafft weder automatische Erstattung noch Abrechnungsausnahme. + +## Routing zurücknehmen, ohne Läufe zu verschieben {#rollback} + +Leiten Sie künftige Starts nur zu einer gesunden, kompatiblen Quelle zurück. Vom Ziel bereits angenommene Läufe bleiben dort und benötigen dessen Worker und Befehlsrouting bis zum Endzustand. Erhalten Sie beide Zuständigkeitsverzeichnisse und verhindern Sie doppelte Starts. Stellen Sie keinen alten Quellspeicher über neuerem angenommenem Zustand wieder her und starten Sie keine zweite aktive Kopie eines Laufs. diff --git a/i18n/de/source-hashes.json b/i18n/de/source-hashes.json index 5f2cf249aab..add20ca3f3e 100644 --- a/i18n/de/source-hashes.json +++ b/i18n/de/source-hashes.json @@ -27,7 +27,7 @@ "defining-workflows/workflow-id.md": "91b94211e2f8f405895ad82cfe2ef9baadb7a2cbd06e9c1e7aa6362231e0d424", "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", - "deployment.md": "dd0b6bd184eda12e67922121a09c7f3c98346bde01be1d4c3217f168db5fd7ca", + "deployment.md": "9742b8637f568aafd5b61e7de97a368aad6faf95a4efd40323269477edfdfba1", "failures-and-recovery.md": "7df0b7ce4139b789d8988ce2bf640c388225daa28731b88719e4777f61e40a4c", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", @@ -59,7 +59,7 @@ "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", "installation.md": "1e2e04a8f23414d0e81c72b166700fd6350129ab81b2f22a6205856c23741967", "introduction.md": "06bf96d164d402d4e376c6308b20f96d324110b2e0cf96c2a1a67b39906072e3", - "laravel-adoption.md": "978f2333bf5ce38ebc58619ca3f50a087572a3b0c28d52bc06843bc341010684", + "laravel-adoption.md": "dd998f6ac33691f793ffcecce78dea82aef7c6d22b1344d5d6ab5234619db8a8", "mcp-workflows.md": "1c0b5bb7f2e5c7ca835dfdfa57bbe8f6624172c855f4e225057ac2377abf360e", "migration.md": "53659987d64f3fc66c935bed55ec4227689185a23970f31327773fa408f5cf22", "monitoring.md": "202278c1196508df5ff00d34cfe94fd2d60dfb7fd2fcb768cf37864c7605de0a", @@ -71,8 +71,8 @@ "polyglot/cli-python-parity.md": "acf1acbf15ca9cdf069154699c5fbf8c1d1fd3241a32d201ac10b8ec76c038be", "polyglot/cli-reference.md": "b20db162aa91cc85ea64528a061753a99f053b33b6141664ce1194e711c641cc", "polyglot/cli.mdx": "024a3f73e1c700a7fa142ec64a7edde03303f12507f4eb4a9161e0e944f7431b", - "polyglot/cloud-control-plane.md": "09a3487e496100dfcef854c56bc12cb8193c7267236cd992b7defc40b7ecb706", - "polyglot/deployment-modes.md": "ee38a2ca890e6ba5d52fffa1fa0bc65e64a1fc82e47af92463983e523d4e3f49", + "polyglot/cloud-control-plane.md": "bb375e598dd1afa3207171047fb81b0cb82c382ce535ab415cb09dc10f6d748e", + "polyglot/deployment-modes.md": "7b508db4be86c92de76cfd8dfd946d93941c8a6f0a601a161d4d3fd1711bf97f", "polyglot/embedded-to-server.md": "21a7e4c9439a73db3a97fd9b0610749faabf7c449806fe0ad55a0924f50d3b80", "polyglot/external-execution.md": "410728db1107c328d0cb129cbf0c58f4fa8c6427e0406610d6801dfeb8a2db31", "polyglot/invocable-carrier.md": "d32d8b5c7c33204b342f977e0af734166d91e96073db1a49ccb4d414a6d67380", @@ -83,6 +83,7 @@ "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", "polyglot/python.md": "d55056ca7638df07b7267bc6d62e635b954957b99620478e861df90558860df3", + "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "af91b22c93a7fe6833df156371d99bb105740684915bc73af4576f6de2897e10", "polyglot/server-api-reference.md": "e94af77a13b341d6fdc9941d4ee94e5053ab932d2e77069b238eb33351414e83", diff --git a/i18n/es/docusaurus-plugin-content-docs/current/deployment.md b/i18n/es/docusaurus-plugin-content-docs/current/deployment.md index 6a959c6a55b..a1d0c384322 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/deployment.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/deployment.md @@ -6,6 +6,8 @@ description: Elige una opción admitida de alojamiento propio de Durable Workflo # Despliegues autogestionados {#self-hosting-deployments} +Para cambiar entre runtimes autogestionados o Cloud, siga [trasladar cargas entre runtimes](/docs/polyglot/runtime-migration/). Las ejecuciones existentes permanecen en el origen mientras se trasladan los nuevos inicios. + Durable Workflow v2 admite varias topologías autogestionadas. Elige la más sencilla que corresponda al entorno que operas y define explícitamente el contrato de imagen, base de datos, caché, autenticación, disponibilidad y actualización. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/laravel-adoption.md b/i18n/es/docusaurus-plugin-content-docs/current/laravel-adoption.md index 474a646603d..ab9acd08430 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/laravel-adoption.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/laravel-adoption.md @@ -554,6 +554,8 @@ auditoría/depuración. Solo esa importación explícita validada crea estado de Retirar un paquete, cola, tabla, secreto o Waterline antiguo es el último paso, nunca el mecanismo de transición. +Para traslados entre runtimes de modo servicio, use [trasladar cargas entre runtimes](/docs/polyglot/runtime-migration/). Exportar historial de Server no es importar estado activo. + ## Continúa por la opción elegida {#continue-with-the-chosen-path} - [Instalación v1 estable](/docs/1.x/installation/) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md b/i18n/es/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md index 001c3242662..fb284f66431 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md @@ -367,6 +367,8 @@ El contador de tiempo de Cloud Dev comienza al activar el runtime aislado y term Los runtimes inactivos siguen generando cargos de capacidad. Retirarlos detiene esa facturación y elimina datos activos y credenciales; no es una pausa reanudable. Los SLA previstos utilizan el mismo modelo de tiempo aprovisionado con sus propias tasas, mínimos y máximos. Interpreta el uso según los `billing_terms` devueltos; las facturas históricas conservan sus condiciones aceptadas. +Antes de desaprovisionar, siga [trasladar cargas entre runtimes](/docs/polyglot/runtime-migration/#preserve-evidence): conserve evidencia verificada de historial y payloads y confirme que todas las ejecuciones del origen son terminales. La facturación de capacidad continúa mientras el origen siga aprovisionado. + Exporta la misma evidencia como CSV o informe JSON si un sistema financiero posterior necesita un archivo: ```bash diff --git a/i18n/es/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md b/i18n/es/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md index 77deec8c7f9..c8e36a7829f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md @@ -133,6 +133,8 @@ Respeta estas tres reglas: ## Referencias relacionadas {#related-references} +[Trasladar cargas entre runtimes](/docs/polyglot/runtime-migration/) cubre el drenaje y el corte entre Server autogestionados, de Server a Cloud y de Cloud a Server. + - [Instalación](/docs/installation) - [Server](/docs/polyglot/server) - [SDK PHP](/docs/polyglot/php) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md b/i18n/es/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md new file mode 100644 index 00000000000..f3b331c9f7f --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md @@ -0,0 +1,48 @@ +--- +title: "Trasladar cargas entre runtimes" +description: "Drene las ejecuciones existentes y dirija nuevos inicios entre Server autogestionados y Cloud." +tags: + - migration + - operations + - polyglot +--- + +# Trasladar cargas entre runtimes + +Dirija nuevos inicios al destino mientras las ejecuciones existentes terminan en su origen. Este procedimiento cubre runtimes independientes de modo servicio. Exportar el historial conserva evidencia, pero no transfiere una ejecución activa originada en Server. La [importación de embedded v2](./embedded-to-server.md#phase-e-import-eligible-embedded-v2-runs) admite solo orígenes embedded elegibles. + +## Elegir el destino {#paths} + +| Traslado | Preparación del destino | +| --- | --- | +| Server autogestionado a otro Server autogestionado | Despliegue el destino con su propia base de datos autoritativa, almacenamiento de payloads y credenciales. Siga la [guía de despliegue](../deployment.md). | +| Server autogestionado a Cloud | Aprovisione el namespace de destino y compruebe la URL del runtime, credenciales y capacidades devueltas. Siga la [configuración de Cloud](./cloud-control-plane.md). | +| Cloud a Server autogestionado | Prepare el destino autogestionado y sus workers SDK antes de cambiar el tráfico de la aplicación. Mantenga el origen Cloud aprovisionado mientras se drenan sus ejecuciones. | + +## Preparar ambos runtimes {#prepare} + +Registre cada endpoint de origen, namespace, ID de instancia y ejecución, cola de tareas, tipos de workflow/activity y dependencias del almacén de payloads. Conserve una vía de recuperación probada para el almacenamiento autogestionado. Trasladarse desde Cloud no concede acceso a una copia de la base de datos ni copia sus credenciales al destino. Verifique la versión y capacidades reales del destino, credenciales por rol, registros de workers y tipos anunciados. + +## Cambiar nuevos inicios en grupos pequeños {#cutover} + +1. Ejecute el destino y sus workers junto al origen. Complete un canario con identidad única, actividades representativas y resultados. Aísle sus efectos del trabajo empresarial real. +2. Inventaríe todos los productores de inicios: llamadas de aplicación, programaciones, adaptadores webhook/bridge y llamadas de servicio. Elija un punto de corte para una familia de workflows. Coordine las pausas de programaciones y el registro del destino para que ambos runtimes no inicien la misma ocurrencia. +3. Dirija los nuevos inicios de esa familia al destino. Mantenga en la aplicación un registro del endpoint y namespace que aceptaron cada workflow. Reutilizar una clave de negocio en otro runtime no ofrece deduplicación entre runtimes. +4. Mantenga señales, aprobaciones, actualizaciones, consultas, cancelación y lecturas de resultados/historial en el runtime propietario. Conserve workers, colas, temporizadores, credenciales y acceso a payloads del origen. Cambiar la URL del cliente no mueve trabajo aceptado ni sus leases de actividad. +5. Compruebe resultados y fallos antes de trasladar la siguiente familia. Si el resultado de un inicio es incierto por el transporte, resuélvalo en el runtime original antes de enviarlo a otro. Una ejecución de larga duración que nunca alcanza un estado terminal no se ha drenado. + +## Conservar evidencia antes de retirar el origen {#preserve-evidence} + +Exporte el historial que deba conservar, incluida cada ejecución de continuación necesaria, los bytes originales de payload y los codecs. Compruebe integridad y completitud con un consumidor compatible y conserve la identidad exacta del productor. La [guía de exportación y replay](../testing.md#service-sdk-replay) explica las comprobaciones separadas. Los archivos de auditoría no habilitan la importación activa de ejecuciones originadas en Server. + +Use el productor que realmente sirve la exportación. Core 2.11.4 por sí solo no califica las exportaciones de Server, CLI incluido, SDK HTTP o Cloud. Siga la [calificación independiente del productor HTTP y la imagen de Server](https://github.com/durable-workflow/server/issues/692). Los paquetes antiguos con pérdida siguen siendo inválidos. No cambie números ni checksums para forzar su aceptación, ni destruya el origen autoritativo mientras la evidencia necesaria no esté disponible o no pueda verificarse. + +## Retirar el origen al final {#retire-source} + +Confirme que no quedan ejecuciones no terminales del origen en todos los namespaces relevantes y todas las páginas de listas. Incluya padres/hijos en espera y ejecuciones creadas por productores restantes. Un endpoint sano, una primera página vacía o métricas no disponibles no prueban que no haya trabajo abierto. Confirme que ningún cliente, callback o worker depende del origen y que los archivos necesarios se pueden leer. + +Solo entonces retire recursos autogestionados o desaprovisione el runtime Cloud. Los cargos de capacidad Cloud continúan mientras esté aprovisionado, incluso inactivo o drenando. Desaprovisionar elimina datos activos y credenciales; no es pausar y reanudar. Use los términos devueltos por el plan vigente; este procedimiento no crea reembolsos automáticos ni excepciones de facturación. + +## Revertir el enrutamiento sin trasladar ejecuciones {#rollback} + +Devuelva los inicios futuros únicamente a un origen sano y compatible. Las ejecuciones ya aceptadas por el destino siguen siendo suyas y necesitan sus workers y su enrutamiento de comandos hasta terminar. Conserve ambos registros de propiedad y evite inicios duplicados. No restaure almacenamiento antiguo sobre estado aceptado más reciente ni reactive una segunda copia de una ejecución. diff --git a/i18n/es/source-hashes.json b/i18n/es/source-hashes.json index 5f2cf249aab..add20ca3f3e 100644 --- a/i18n/es/source-hashes.json +++ b/i18n/es/source-hashes.json @@ -27,7 +27,7 @@ "defining-workflows/workflow-id.md": "91b94211e2f8f405895ad82cfe2ef9baadb7a2cbd06e9c1e7aa6362231e0d424", "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", - "deployment.md": "dd0b6bd184eda12e67922121a09c7f3c98346bde01be1d4c3217f168db5fd7ca", + "deployment.md": "9742b8637f568aafd5b61e7de97a368aad6faf95a4efd40323269477edfdfba1", "failures-and-recovery.md": "7df0b7ce4139b789d8988ce2bf640c388225daa28731b88719e4777f61e40a4c", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", @@ -59,7 +59,7 @@ "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", "installation.md": "1e2e04a8f23414d0e81c72b166700fd6350129ab81b2f22a6205856c23741967", "introduction.md": "06bf96d164d402d4e376c6308b20f96d324110b2e0cf96c2a1a67b39906072e3", - "laravel-adoption.md": "978f2333bf5ce38ebc58619ca3f50a087572a3b0c28d52bc06843bc341010684", + "laravel-adoption.md": "dd998f6ac33691f793ffcecce78dea82aef7c6d22b1344d5d6ab5234619db8a8", "mcp-workflows.md": "1c0b5bb7f2e5c7ca835dfdfa57bbe8f6624172c855f4e225057ac2377abf360e", "migration.md": "53659987d64f3fc66c935bed55ec4227689185a23970f31327773fa408f5cf22", "monitoring.md": "202278c1196508df5ff00d34cfe94fd2d60dfb7fd2fcb768cf37864c7605de0a", @@ -71,8 +71,8 @@ "polyglot/cli-python-parity.md": "acf1acbf15ca9cdf069154699c5fbf8c1d1fd3241a32d201ac10b8ec76c038be", "polyglot/cli-reference.md": "b20db162aa91cc85ea64528a061753a99f053b33b6141664ce1194e711c641cc", "polyglot/cli.mdx": "024a3f73e1c700a7fa142ec64a7edde03303f12507f4eb4a9161e0e944f7431b", - "polyglot/cloud-control-plane.md": "09a3487e496100dfcef854c56bc12cb8193c7267236cd992b7defc40b7ecb706", - "polyglot/deployment-modes.md": "ee38a2ca890e6ba5d52fffa1fa0bc65e64a1fc82e47af92463983e523d4e3f49", + "polyglot/cloud-control-plane.md": "bb375e598dd1afa3207171047fb81b0cb82c382ce535ab415cb09dc10f6d748e", + "polyglot/deployment-modes.md": "7b508db4be86c92de76cfd8dfd946d93941c8a6f0a601a161d4d3fd1711bf97f", "polyglot/embedded-to-server.md": "21a7e4c9439a73db3a97fd9b0610749faabf7c449806fe0ad55a0924f50d3b80", "polyglot/external-execution.md": "410728db1107c328d0cb129cbf0c58f4fa8c6427e0406610d6801dfeb8a2db31", "polyglot/invocable-carrier.md": "d32d8b5c7c33204b342f977e0af734166d91e96073db1a49ccb4d414a6d67380", @@ -83,6 +83,7 @@ "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", "polyglot/python.md": "d55056ca7638df07b7267bc6d62e635b954957b99620478e861df90558860df3", + "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "af91b22c93a7fe6833df156371d99bb105740684915bc73af4576f6de2897e10", "polyglot/server-api-reference.md": "e94af77a13b341d6fdc9941d4ee94e5053ab932d2e77069b238eb33351414e83", diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/deployment.md b/i18n/fr/docusaurus-plugin-content-docs/current/deployment.md index 3b83077fff7..6d39bba33a5 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/deployment.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/deployment.md @@ -6,6 +6,8 @@ description: Choisir un parcours d'auto-hébergement Durable Workflow v2 pris en # Déploiements auto-hébergés {#self-hosting-deployments} +Pour changer de runtime autohébergé ou Cloud, suivez [déplacer les charges entre runtimes](/docs/polyglot/runtime-migration/). Les exécutions existantes restent à la source pendant que les nouveaux démarrages changent de destination. + Durable Workflow v2 prend en charge plusieurs topologies auto-hébergées. Choisissez la plus petite adaptée à votre environnement, puis explicitez les contrats d'image, de base, de cache, d'authentification, de disponibilité et de diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/laravel-adoption.md b/i18n/fr/docusaurus-plugin-content-docs/current/laravel-adoption.md index 82f12677327..7cc5b764479 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/laravel-adoption.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/laravel-adoption.md @@ -562,6 +562,8 @@ de diagnostic. Seule cette opération explicite et validée crée l'état Server Le retrait d'un ancien paquet, file, table, secret ou déploiement Waterline est la dernière étape, jamais le mécanisme de transition. +Pour changer de runtime en mode service, consultez [déplacer les charges entre runtimes](/docs/polyglot/runtime-migration/). Un export d’historique Server n’est pas un import d’état actif. + ## Continuer le parcours choisi {#continue-with-the-chosen-path} - [Installation v1 stable](/docs/1.x/installation/) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md b/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md index 58781fcd6cf..9e320d9da7f 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md @@ -579,6 +579,8 @@ suivent le même modèle de temps provisionné avec leurs propres tarifs, minimums et plafonds. Interprétez l'usage avec les `billing_terms` retournés par l'offre ; les factures historiques conservent leurs conditions acceptées. +Avant de déprovisionner, suivez [déplacer les charges entre runtimes](/docs/polyglot/runtime-migration/#preserve-evidence) : conservez des preuves vérifiées d’historique et de payloads et confirmez que toutes les exécutions de la source sont terminales. La facturation de capacité continue tant que la source reste provisionnée. + Exportez ces mêmes éléments en CSV ou rapport JSON si un système financier aval nécessite un fichier : diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md b/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md index 39ddbbb4005..be42915ae1c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md @@ -158,6 +158,8 @@ Trois règles de migration sont impératives : ## Références associées {#related-references} +[Déplacer les charges entre runtimes](/docs/polyglot/runtime-migration/) couvre drainage et bascule entre Server autohébergés, de Server vers Cloud et de Cloud vers Server. + - [Installation](/docs/installation) - [Server](/docs/polyglot/server) - [SDK PHP](/docs/polyglot/php) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md b/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md new file mode 100644 index 00000000000..db49c47e45a --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md @@ -0,0 +1,48 @@ +--- +title: "Déplacer les charges entre runtimes" +description: "Laissez finir les exécutions existantes et déplacez les nouveaux démarrages entre Server autohébergés et Cloud." +tags: + - migration + - operations + - polyglot +--- + +# Déplacer les charges entre runtimes + +Dirigez les nouveaux démarrages vers la destination pendant que les exécutions existantes se terminent à la source. Cette procédure couvre des runtimes indépendants en mode service. Un export d’historique conserve des preuves, mais ne transfère pas une exécution active issue de Server. L’[import embedded v2](./embedded-to-server.md#phase-e-import-eligible-embedded-v2-runs) accepte uniquement les sources embedded éligibles. + +## Choisir la destination {#paths} + +| Déplacement | Préparation de la destination | +| --- | --- | +| Server autohébergé vers un autre Server autohébergé | Déployez la destination avec sa propre base autoritative, son stockage de payloads et ses identifiants. Suivez le [guide de déploiement](../deployment.md). | +| Server autohébergé vers Cloud | Provisionnez l’espace de noms cible et vérifiez l’URL du runtime, les identifiants et les capacités renvoyés. Suivez la [configuration Cloud](./cloud-control-plane.md). | +| Cloud vers Server autohébergé | Préparez la destination et ses workers SDK avant de modifier le trafic applicatif. Gardez la source Cloud provisionnée pendant que ses exécutions se terminent. | + +## Préparer les deux runtimes {#prepare} + +Consignez chaque endpoint source, espace de noms, ID d’instance et d’exécution, file de tâches, types de workflow/activity et dépendances du stockage de payloads. Conservez une voie de récupération testée pour le stockage autohébergé. Quitter Cloud ne donne pas accès à une sauvegarde de base et ne copie pas les identifiants Cloud vers la destination. Vérifiez la version et les capacités réelles de la destination, les identifiants par rôle, les workers enregistrés et les types annoncés. + +## Basculer les nouveaux démarrages par petits groupes {#cutover} + +1. Exécutez la destination et ses workers à côté de la source. Terminez une exécution canari identifiée de manière unique, avec des activités et résultats représentatifs. Isolez ses effets du travail métier réel. +2. Inventoriez tous les producteurs de démarrages : appels applicatifs, planifications, adaptateurs webhook/bridge et appels de service. Choisissez un point de bascule pour une famille de workflows. Coordonnez les pauses de planifications et leur enregistrement à destination pour éviter de lancer la même occurrence sur les deux runtimes. +3. Dirigez les nouveaux démarrages de cette famille vers la destination. Conservez dans l’application l’endpoint et l’espace de noms ayant accepté chaque workflow. Réutiliser une clé métier sur un autre runtime ne fournit pas de déduplication entre runtimes. +4. Dirigez signaux, approbations, mises à jour, requêtes, annulations et lectures de résultats/historique vers le runtime propriétaire de l’exécution. Gardez les workers, files, timers, identifiants et accès aux payloads de la source. Changer l’URL du client ne déplace ni le travail accepté ni ses baux d’activité. +5. Vérifiez résultats et échecs avant de déplacer la famille suivante. Si le résultat d’un démarrage est incertain à cause du transport, résolvez-le sur le runtime d’origine avant de le soumettre ailleurs. Une exécution longue qui n’atteint jamais un état terminal n’est pas drainée. + +## Conserver les preuves avant le retrait {#preserve-evidence} + +Exportez l’historique à conserver, notamment chaque exécution de continuation nécessaire, les octets originaux des payloads et les codecs. Vérifiez intégrité et exhaustivité avec un consommateur compatible et conservez l’identité exacte du producteur. Le [guide d’export et de replay](../testing.md#service-sdk-replay) explique les contrôles distincts. Les exports d’audit ne rendent pas les exécutions Server éligibles à l’import d’état actif. + +Vérifiez le producteur qui sert réellement l’export. Core 2.11.4 seul ne qualifie pas les exports Server, CLI inclus, SDK HTTP ou Cloud. Suivez la [qualification séparée du producteur HTTP et de l’image Server](https://github.com/durable-workflow/server/issues/692). Les anciens bundles avec pertes restent invalides. Ne modifiez ni nombres ni sommes de contrôle pour forcer leur acceptation, et ne détruisez pas la source autoritative tant que les preuves requises sont indisponibles ou invérifiables. + +## Retirer la source en dernier {#retire-source} + +Confirmez l’absence d’exécutions non terminales appartenant à la source dans tous les espaces de noms concernés et toutes les pages de listes. Incluez parents/enfants en attente et exécutions créées par les producteurs restants. Un endpoint sain, une première page vide ou des métriques indisponibles ne prouvent pas l’absence de travail ouvert. Confirmez qu’aucun appelant, callback ou worker ne dépend encore de la source et que les archives requises sont lisibles. + +Retirez alors seulement les ressources autohébergées ou déprovisionnez le runtime Cloud. Les frais de capacité Cloud continuent tant qu’il reste provisionné, y compris au repos ou pendant le drainage. Le déprovisionnement supprime les données actives et les identifiants et n’est pas une pause avec reprise. Utilisez les conditions renvoyées par le plan existant ; cette procédure ne crée ni remboursement automatique ni exception de facturation. + +## Revenir sur le routage sans déplacer les exécutions {#rollback} + +Renvoyez les démarrages futurs uniquement vers une source saine et compatible. Les exécutions déjà acceptées par la destination y restent et ont besoin de ses workers et du routage de leurs commandes jusqu’à leur état terminal. Conservez les deux registres de propriété et évitez les démarrages en double. Ne restaurez pas un ancien stockage sur un état accepté plus récent et ne réactivez pas une seconde copie de l’exécution. diff --git a/i18n/fr/source-hashes.json b/i18n/fr/source-hashes.json index 5f2cf249aab..add20ca3f3e 100644 --- a/i18n/fr/source-hashes.json +++ b/i18n/fr/source-hashes.json @@ -27,7 +27,7 @@ "defining-workflows/workflow-id.md": "91b94211e2f8f405895ad82cfe2ef9baadb7a2cbd06e9c1e7aa6362231e0d424", "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", - "deployment.md": "dd0b6bd184eda12e67922121a09c7f3c98346bde01be1d4c3217f168db5fd7ca", + "deployment.md": "9742b8637f568aafd5b61e7de97a368aad6faf95a4efd40323269477edfdfba1", "failures-and-recovery.md": "7df0b7ce4139b789d8988ce2bf640c388225daa28731b88719e4777f61e40a4c", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", @@ -59,7 +59,7 @@ "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", "installation.md": "1e2e04a8f23414d0e81c72b166700fd6350129ab81b2f22a6205856c23741967", "introduction.md": "06bf96d164d402d4e376c6308b20f96d324110b2e0cf96c2a1a67b39906072e3", - "laravel-adoption.md": "978f2333bf5ce38ebc58619ca3f50a087572a3b0c28d52bc06843bc341010684", + "laravel-adoption.md": "dd998f6ac33691f793ffcecce78dea82aef7c6d22b1344d5d6ab5234619db8a8", "mcp-workflows.md": "1c0b5bb7f2e5c7ca835dfdfa57bbe8f6624172c855f4e225057ac2377abf360e", "migration.md": "53659987d64f3fc66c935bed55ec4227689185a23970f31327773fa408f5cf22", "monitoring.md": "202278c1196508df5ff00d34cfe94fd2d60dfb7fd2fcb768cf37864c7605de0a", @@ -71,8 +71,8 @@ "polyglot/cli-python-parity.md": "acf1acbf15ca9cdf069154699c5fbf8c1d1fd3241a32d201ac10b8ec76c038be", "polyglot/cli-reference.md": "b20db162aa91cc85ea64528a061753a99f053b33b6141664ce1194e711c641cc", "polyglot/cli.mdx": "024a3f73e1c700a7fa142ec64a7edde03303f12507f4eb4a9161e0e944f7431b", - "polyglot/cloud-control-plane.md": "09a3487e496100dfcef854c56bc12cb8193c7267236cd992b7defc40b7ecb706", - "polyglot/deployment-modes.md": "ee38a2ca890e6ba5d52fffa1fa0bc65e64a1fc82e47af92463983e523d4e3f49", + "polyglot/cloud-control-plane.md": "bb375e598dd1afa3207171047fb81b0cb82c382ce535ab415cb09dc10f6d748e", + "polyglot/deployment-modes.md": "7b508db4be86c92de76cfd8dfd946d93941c8a6f0a601a161d4d3fd1711bf97f", "polyglot/embedded-to-server.md": "21a7e4c9439a73db3a97fd9b0610749faabf7c449806fe0ad55a0924f50d3b80", "polyglot/external-execution.md": "410728db1107c328d0cb129cbf0c58f4fa8c6427e0406610d6801dfeb8a2db31", "polyglot/invocable-carrier.md": "d32d8b5c7c33204b342f977e0af734166d91e96073db1a49ccb4d414a6d67380", @@ -83,6 +83,7 @@ "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", "polyglot/python.md": "d55056ca7638df07b7267bc6d62e635b954957b99620478e861df90558860df3", + "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "af91b22c93a7fe6833df156371d99bb105740684915bc73af4576f6de2897e10", "polyglot/server-api-reference.md": "e94af77a13b341d6fdc9941d4ee94e5053ab932d2e77069b238eb33351414e83", diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/deployment.md b/i18n/ja/docusaurus-plugin-content-docs/current/deployment.md index 015aa5393eb..b6cbaca211f 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/deployment.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/deployment.md @@ -6,6 +6,8 @@ description: サポートする Durable Workflow v2 のセルフホスト経路 # セルフホストのデプロイ {#self-hosting-deployments} +セルフホストと Cloud のランタイム変更には、[ランタイム間でワークロードを移す](/docs/polyglot/runtime-migration/)を参照してください。新規開始を切り替える間も、既存の実行は移行元に残します。 + Durable Workflow v2 は複数のセルフホスト構成に対応します。運用環境に合う最小の経路を選び、イメージ、DB、キャッシュ、認証、準備状態、アップグレードの契約を明示してください。 このガイドはスタンドアロン Server の配布を扱います。Laravel アプリに組み込む場合は、パッケージのインストール・設定ページを使います。Durable Workflow Cloud は、ランタイム、永続化、配置、復旧を Cloud が運用する別のマネージドサービスです。セルフホスト Server を Cloud に接続することはありません。[Cloud マネージドランタイム](/docs/polyglot/cloud-control-plane)を参照してください。現在の契約は単一リージョンのランタイム・復旧境界であり、マルチリージョン複製、自動リージョンフェイルオーバー、フェイルバックを約束しません。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/laravel-adoption.md b/i18n/ja/docusaurus-plugin-content-docs/current/laravel-adoption.md index 433c93d3d81..d0d5016f8a8 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/laravel-adoption.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/laravel-adoption.md @@ -486,6 +486,8 @@ Composer 要件の変更では、処理中ワークフロー、履歴、遅延 旧パッケージ、キュー、テーブル、秘密、Waterline の廃止は最後の手順であり、切り替えの仕組みではありません。 +サービスモードのランタイム間の移行には、[ランタイム間でワークロードを移す](/docs/polyglot/runtime-migration/)を参照してください。Server の履歴エクスポートは、稼働状態のインポートではありません。 + ## 選んだ経路へ進む {#continue-with-the-chosen-path} - [安定版 v1 のインストール](/docs/1.x/installation/) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md b/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md index a1c47670ae6..85a4f7c04e0 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md @@ -366,6 +366,8 @@ Cloud Dev の時間計測は、分離ランタイムの有効化時に始まり アイドルランタイムにも容量料金が発生します。プロビジョニング解除は容量請求を止め、有効なランタイムデータと認証情報を削除します。一時停止・再開操作ではありません。予定 SLA 条件は同じ時間モデルをそれぞれの料金、最低額、上限で使います。使用量の解釈にはプランが返す `billing_terms` を使います。過去の請求書は承諾済み条件を維持します。 +デプロビジョニング前に[ランタイム間の移行手順](/docs/polyglot/runtime-migration/#preserve-evidence)に従い、検証済みの履歴とペイロードの証跡を保持し、移行元の実行がすべて終端状態であることを確認します。移行元がプロビジョニングされている間は容量料金が続きます。 + 下流の財務システムにファイルで渡す必要がある場合、同じ証跡を CSV または JSON レポートでエクスポートします。 ```bash diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md b/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md index 136cce6c1cc..5b62b008290 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md @@ -98,6 +98,8 @@ Laravel を使うチームには、[Laravel の導入とランタイム移行ガ ## 関連リファレンス {#related-references} +[ランタイム間でワークロードを移す](/docs/polyglot/runtime-migration/)は、セルフホスト間、セルフホストから Cloud、Cloud からセルフホストのドレインと切り替えを扱います。 + - [インストール](/docs/installation) - [Server](/docs/polyglot/server) - [PHP SDK](/docs/polyglot/php) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md b/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md new file mode 100644 index 00000000000..a19acff28c4 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md @@ -0,0 +1,48 @@ +--- +title: "ランタイム間でワークロードを移す" +description: "既存の実行を完了させ、新規開始をセルフホスト Server と Cloud の間で切り替えます。" +tags: + - migration + - operations + - polyglot +--- + +# ランタイム間でワークロードを移す + +既存の実行は移行元で完了させ、新規開始を移行先に送ります。この手順は独立したサービスモードのランタイムを対象とします。履歴のエクスポートは証跡の保存であり、Server で開始した実行を稼働状態のまま転送する機能ではありません。対応する [embedded v2 インポート](./embedded-to-server.md#phase-e-import-eligible-embedded-v2-runs)は、条件を満たす embedded の移行元だけを受け付けます。 + +## 移行先を選ぶ {#paths} + +| 移行 | 移行先の準備 | +| --- | --- | +| セルフホスト Server から別のセルフホスト Server | 独自の正本データベース、ペイロードストレージ、認証情報で移行先をデプロイします。[デプロイガイド](../deployment.md)に従ってください。 | +| セルフホスト Server から Cloud | 移行先の名前空間をプロビジョニングし、返されたランタイム URL、認証情報、機能を確認します。[Cloud の設定](./cloud-control-plane.md)に従ってください。 | +| Cloud からセルフホスト Server | アプリケーションのトラフィックを変更する前に、移行先と SDK ワーカーを準備します。移行元の実行が完了するまでは Cloud をプロビジョニング済みのまま維持します。 | + +## 両方のランタイムを準備する {#prepare} + +移行元の各エンドポイント、名前空間、ワークフローインスタンス ID、実行 ID、タスクキュー、ワークフローとアクティビティの型、ペイロードストレージの依存関係を記録します。セルフホストのストレージには検証済みの復旧手段を確保します。Cloud からの移行は、データベースバックアップへのアクセスや認証情報のコピーを許可するものではありません。移行先の実際のリリースと機能、ロール別認証情報、ワーカー登録、公開された型を確認してください。 + +## 新規開始を小さな単位で切り替える {#cutover} + +1. 移行元と並行して移行先とワーカーを起動します。一意の ID を持つカナリア実行で、代表的なアクティビティと結果まで完了させます。実際の業務に影響しないよう副作用を隔離してください。 +2. アプリケーション呼び出し、スケジュール、webhook/bridge アダプター、サービス呼び出しなど、開始元をすべて把握します。ワークフローの1系統について切り替え時点を決めます。スケジュールの一時停止と移行先への登録を調整し、同じ予定を両方のランタイムで開始しないようにします。 +3. その系統の新規開始を移行先に送ります。各ワークフローを受理したエンドポイントと名前空間をアプリケーション側で記録します。別のランタイムで同じ業務キーを使っても、ランタイム間の重複排除にはなりません。 +4. シグナル、承認、更新、クエリ、キャンセル、結果と履歴の読み取りは、実行を所有するランタイムに送り続けます。移行元のワーカー、キュー、タイマー、認証情報、ペイロードへのアクセスを維持します。クライアントの URL を変えても、受理済みの処理やアクティビティのリースは移りません。 +5. 次の系統に進む前に結果と失敗を確認します。通信の問題で開始結果が不明な場合は、別のランタイムへ送信する前に元のランタイムで結果を確認します。終端状態にならない長期間の実行は、ドレインできていません。 + +## 廃止する前に証跡を保存する {#preserve-evidence} + +必要な継続実行すべて、元のペイロードバイト列、コーデックを含め、保持する必要がある履歴をエクスポートします。互換性のある読み取り側で完全性と整合性を確認し、正確な生成側の識別情報を保存します。[履歴エクスポートとリプレイのガイド](../testing.md#service-sdk-replay)で、それぞれの確認を説明しています。監査用エクスポートによって、Server の実行を稼働状態でインポートできるようにはなりません。 + +実際にエクスポートを提供する生成側を確認してください。Core 2.11.4 だけでは、Server、付属 CLI、SDK HTTP、Cloud のエクスポートは検証済みになりません。別途行われる [Server HTTP 生成側とイメージの検証](https://github.com/durable-workflow/server/issues/692)を確認してください。過去の欠損したバンドルは無効なままです。数値やチェックサムを書き換えて受理させてはいけません。必要な証跡を取得または検証できない間は、正本の移行元を破棄しないでください。 + +## 移行元は最後に廃止する {#retire-source} + +対象の名前空間すべてと一覧の全ページを確認し、移行元が所有する非終端の実行が残っていないことを確かめます。待機中の親子や、残った開始元が作る実行も対象です。正常なエンドポイント、空の最初のページ、取得不能なメトリクスだけでは、未完了の処理がない証明にはなりません。呼び出し元、コールバック、ワーカーに依存が残っておらず、必要なアーカイブを読めることを確認してください。 + +その後でセルフホストのリソースを廃止するか、Cloud ランタイムをデプロビジョニングします。Cloud の容量料金は、アイドル中やドレイン中も、プロビジョニングされている間は発生します。デプロビジョニングは稼働データと認証情報を削除する操作であり、一時停止と再開ではありません。既存プランから返された課金条件を使用してください。この手順による自動返金や課金の例外はありません。 + +## 実行を移さずルーティングを戻す {#rollback} + +今後の新規開始を戻す場合は、正常で互換性のある移行元だけを使います。移行先がすでに受理した実行は引き続き移行先が所有し、終端状態になるまでそのワーカーとコマンドのルーティングが必要です。両方の所有記録を保ち、重複した開始を防いでください。新しく受理した状態に古い移行元のストレージを上書きしたり、同じ実行の2つ目の稼働コピーを再開したりしてはいけません。 diff --git a/i18n/ja/source-hashes.json b/i18n/ja/source-hashes.json index 5f2cf249aab..add20ca3f3e 100644 --- a/i18n/ja/source-hashes.json +++ b/i18n/ja/source-hashes.json @@ -27,7 +27,7 @@ "defining-workflows/workflow-id.md": "91b94211e2f8f405895ad82cfe2ef9baadb7a2cbd06e9c1e7aa6362231e0d424", "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", - "deployment.md": "dd0b6bd184eda12e67922121a09c7f3c98346bde01be1d4c3217f168db5fd7ca", + "deployment.md": "9742b8637f568aafd5b61e7de97a368aad6faf95a4efd40323269477edfdfba1", "failures-and-recovery.md": "7df0b7ce4139b789d8988ce2bf640c388225daa28731b88719e4777f61e40a4c", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", @@ -59,7 +59,7 @@ "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", "installation.md": "1e2e04a8f23414d0e81c72b166700fd6350129ab81b2f22a6205856c23741967", "introduction.md": "06bf96d164d402d4e376c6308b20f96d324110b2e0cf96c2a1a67b39906072e3", - "laravel-adoption.md": "978f2333bf5ce38ebc58619ca3f50a087572a3b0c28d52bc06843bc341010684", + "laravel-adoption.md": "dd998f6ac33691f793ffcecce78dea82aef7c6d22b1344d5d6ab5234619db8a8", "mcp-workflows.md": "1c0b5bb7f2e5c7ca835dfdfa57bbe8f6624172c855f4e225057ac2377abf360e", "migration.md": "53659987d64f3fc66c935bed55ec4227689185a23970f31327773fa408f5cf22", "monitoring.md": "202278c1196508df5ff00d34cfe94fd2d60dfb7fd2fcb768cf37864c7605de0a", @@ -71,8 +71,8 @@ "polyglot/cli-python-parity.md": "acf1acbf15ca9cdf069154699c5fbf8c1d1fd3241a32d201ac10b8ec76c038be", "polyglot/cli-reference.md": "b20db162aa91cc85ea64528a061753a99f053b33b6141664ce1194e711c641cc", "polyglot/cli.mdx": "024a3f73e1c700a7fa142ec64a7edde03303f12507f4eb4a9161e0e944f7431b", - "polyglot/cloud-control-plane.md": "09a3487e496100dfcef854c56bc12cb8193c7267236cd992b7defc40b7ecb706", - "polyglot/deployment-modes.md": "ee38a2ca890e6ba5d52fffa1fa0bc65e64a1fc82e47af92463983e523d4e3f49", + "polyglot/cloud-control-plane.md": "bb375e598dd1afa3207171047fb81b0cb82c382ce535ab415cb09dc10f6d748e", + "polyglot/deployment-modes.md": "7b508db4be86c92de76cfd8dfd946d93941c8a6f0a601a161d4d3fd1711bf97f", "polyglot/embedded-to-server.md": "21a7e4c9439a73db3a97fd9b0610749faabf7c449806fe0ad55a0924f50d3b80", "polyglot/external-execution.md": "410728db1107c328d0cb129cbf0c58f4fa8c6427e0406610d6801dfeb8a2db31", "polyglot/invocable-carrier.md": "d32d8b5c7c33204b342f977e0af734166d91e96073db1a49ccb4d414a6d67380", @@ -83,6 +83,7 @@ "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", "polyglot/python.md": "d55056ca7638df07b7267bc6d62e635b954957b99620478e861df90558860df3", + "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "af91b22c93a7fe6833df156371d99bb105740684915bc73af4576f6de2897e10", "polyglot/server-api-reference.md": "e94af77a13b341d6fdc9941d4ee94e5053ab932d2e77069b238eb33351414e83", diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/deployment.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/deployment.md index 1dc44f9a84a..781e57bf46e 100644 --- a/i18n/pt-BR/docusaurus-plugin-content-docs/current/deployment.md +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/deployment.md @@ -6,6 +6,8 @@ description: Escolha um caminho suportado de implantação do Durable Workflow v # Implantações sob sua administração {#self-hosting-deployments} +Para mudanças entre runtimes próprios ou Cloud, siga [mover cargas entre runtimes](/docs/polyglot/runtime-migration/). As execuções existentes ficam na origem enquanto novos inícios mudam. + O Durable Workflow v2 suporta várias topologias sob sua administração. Escolha o menor caminho que corresponda ao ambiente que você opera e mantenha explícito o contrato de imagem, banco de dados, cache, autenticação, prontidão e atualização. diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/laravel-adoption.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/laravel-adoption.md index be323265c68..7b9dda29f1d 100644 --- a/i18n/pt-BR/docusaurus-plugin-content-docs/current/laravel-adoption.md +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/laravel-adoption.md @@ -569,6 +569,8 @@ validada de importação cria estado sob responsabilidade do Server. Retirar um pacote, fila, tabela, segredo ou implantação Waterline antiga é a última etapa, nunca o mecanismo de transição. +Para mudanças entre runtimes em modo serviço, use [mover cargas entre runtimes](/docs/polyglot/runtime-migration/). Exportar histórico do Server não é importar estado ativo. + ## Continue pelo caminho escolhido {#continue-with-the-chosen-path} - [Instalação da v1 estável](/docs/1.x/installation/) diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md index bbb8e35d62e..7fb95fe0aed 100644 --- a/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md @@ -556,6 +556,8 @@ de pausar/retomar. Termos SLA planejados usam o mesmo modelo de tempo provisionado com suas próprias taxas, mínimos e tetos. Use os `billing_terms` retornados pelo plano ao interpretar o uso; faturas históricas mantêm os termos aceitos. +Antes de desprovisionar, siga [mover cargas entre runtimes](/docs/polyglot/runtime-migration/#preserve-evidence): retenha evidências verificadas de histórico e payloads e confirme que todas as execuções da origem são terminais. A cobrança de capacidade continua enquanto a origem estiver provisionada. + Exporte as mesmas evidências como CSV ou relatório JSON quando um sistema financeiro downstream precisar de um arquivo: diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md index 0da490ef598..14af4dbb87e 100644 --- a/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md @@ -151,6 +151,8 @@ Três regras de migração são obrigatórias: ## Referências relacionadas {#related-references} +[Mover cargas entre runtimes](/docs/polyglot/runtime-migration/) cobre drenagem e corte entre Server próprios, de Server para Cloud e de Cloud para Server. + - [Instalação](/docs/installation) - [Server](/docs/polyglot/server) - [SDK PHP](/docs/polyglot/php) diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md new file mode 100644 index 00000000000..9403d7470b6 --- /dev/null +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md @@ -0,0 +1,48 @@ +--- +title: "Mover cargas entre runtimes" +description: "Drene execuções existentes e mova novos inícios entre Server próprios e Cloud." +tags: + - migration + - operations + - polyglot +--- + +# Mover cargas entre runtimes + +Direcione novos inícios ao destino enquanto as execuções existentes terminam na origem. Este procedimento cobre runtimes independentes em modo serviço. Exportar o histórico preserva evidências, mas não transfere uma execução ativa originada no Server. A [importação de embedded v2](./embedded-to-server.md#phase-e-import-eligible-embedded-v2-runs) aceita apenas origens embedded elegíveis. + +## Escolha o destino {#paths} + +| Mudança | Preparação do destino | +| --- | --- | +| Server próprio para outro Server próprio | Implante o destino com seu próprio banco autoritativo, armazenamento de payloads e credenciais. Siga o [guia de implantação](../deployment.md). | +| Server próprio para Cloud | Provisione o namespace de destino e verifique a URL do runtime, as credenciais e as capacidades retornadas. Siga a [configuração do Cloud](./cloud-control-plane.md). | +| Cloud para Server próprio | Prepare o destino próprio e seus workers SDK antes de alterar o tráfego da aplicação. Mantenha a origem Cloud provisionada enquanto suas execuções drenam. | + +## Prepare os dois runtimes {#prepare} + +Registre cada endpoint de origem, namespace, ID da instância e da execução, fila de tarefas, tipos de workflow/activity e dependências do armazenamento de payloads. Preserve um caminho de recuperação testado para o armazenamento próprio. Sair do Cloud não concede acesso a backup do banco nem copia credenciais Cloud ao destino. Verifique a versão e as capacidades reais do destino, credenciais por papel, registros de workers e tipos anunciados. + +## Mude novos inícios em grupos pequenos {#cutover} + +1. Execute o destino e seus workers ao lado da origem. Conclua um canário com identidade única, atividades representativas e resultados. Isole seus efeitos do trabalho real do negócio. +2. Inventarie todos os produtores de inícios: chamadas da aplicação, agendamentos, adaptadores webhook/bridge e chamadas de serviço. Escolha um ponto de corte para uma família de workflows. Coordene pausas de agendamentos e registro no destino para que os dois runtimes não iniciem a mesma ocorrência. +3. Direcione os novos inícios dessa família ao destino. Mantenha na aplicação um registro do endpoint e namespace que aceitaram cada workflow. Reutilizar uma chave de negócio em outro runtime não fornece deduplicação entre runtimes. +4. Mantenha sinais, aprovações, atualizações, consultas, cancelamento e leitura de resultados/histórico no runtime que possui a execução. Preserve workers, filas, timers, credenciais e acesso aos payloads da origem. Alterar a URL do cliente não move trabalho aceito nem suas leases de atividade. +5. Verifique resultados e falhas antes de mover a próxima família. Se o resultado de um início for incerto por causa do transporte, esclareça-o no runtime original antes de enviá-lo a outro. Uma execução longa que nunca chega ao estado terminal não foi drenada. + +## Preserve evidências antes da retirada {#preserve-evidence} + +Exporte o histórico que precisa reter, incluindo cada execução de continuação necessária, bytes originais dos payloads e codecs. Verifique integridade e completude com um consumidor compatível e retenha a identidade exata do produtor. O [guia de exportação e replay](../testing.md#service-sdk-replay) explica as verificações separadas. Exportações de auditoria não tornam execuções do Server elegíveis à importação de estado ativo. + +Use o produtor que realmente fornece a exportação. Core 2.11.4 sozinho não qualifica exportações do Server, CLI incluída, SDK HTTP ou Cloud. Acompanhe a [qualificação separada do produtor HTTP e da imagem do Server](https://github.com/durable-workflow/server/issues/692). Pacotes antigos com perdas continuam inválidos. Não altere números ou checksums para forçar aceitação nem destrua a origem autoritativa enquanto as evidências necessárias estiverem indisponíveis ou não verificáveis. + +## Retire a origem por último {#retire-source} + +Confirme que não restam execuções não terminais da origem em todos os namespaces relevantes e em todas as páginas de listagem. Inclua pais/filhos em espera e execuções criadas por produtores restantes. Um endpoint saudável, uma primeira página vazia ou métricas indisponíveis não comprovam ausência de trabalho aberto. Confirme que nenhum chamador, callback ou worker depende da origem e que os arquivos necessários podem ser lidos. + +Só então retire recursos próprios ou desprovisione o runtime Cloud. As cobranças de capacidade Cloud continuam enquanto ele estiver provisionado, inclusive ocioso ou drenando. Desprovisionar remove dados ativos e credenciais e não é pausar/retomar. Use os termos retornados pelo plano vigente; este procedimento não cria reembolso automático nem exceção de cobrança. + +## Reverta o roteamento sem mover execuções {#rollback} + +Direcione inícios futuros de volta apenas a uma origem saudável e compatível. Execuções já aceitas pelo destino continuam pertencendo a ele e precisam de seus workers e do roteamento de comandos até terminarem. Preserve os dois registros de propriedade e evite inícios duplicados. Não restaure armazenamento antigo sobre estado aceito mais recente nem retome uma segunda cópia ativa da execução. diff --git a/i18n/pt-BR/source-hashes.json b/i18n/pt-BR/source-hashes.json index 5f2cf249aab..add20ca3f3e 100644 --- a/i18n/pt-BR/source-hashes.json +++ b/i18n/pt-BR/source-hashes.json @@ -27,7 +27,7 @@ "defining-workflows/workflow-id.md": "91b94211e2f8f405895ad82cfe2ef9baadb7a2cbd06e9c1e7aa6362231e0d424", "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", - "deployment.md": "dd0b6bd184eda12e67922121a09c7f3c98346bde01be1d4c3217f168db5fd7ca", + "deployment.md": "9742b8637f568aafd5b61e7de97a368aad6faf95a4efd40323269477edfdfba1", "failures-and-recovery.md": "7df0b7ce4139b789d8988ce2bf640c388225daa28731b88719e4777f61e40a4c", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", @@ -59,7 +59,7 @@ "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", "installation.md": "1e2e04a8f23414d0e81c72b166700fd6350129ab81b2f22a6205856c23741967", "introduction.md": "06bf96d164d402d4e376c6308b20f96d324110b2e0cf96c2a1a67b39906072e3", - "laravel-adoption.md": "978f2333bf5ce38ebc58619ca3f50a087572a3b0c28d52bc06843bc341010684", + "laravel-adoption.md": "dd998f6ac33691f793ffcecce78dea82aef7c6d22b1344d5d6ab5234619db8a8", "mcp-workflows.md": "1c0b5bb7f2e5c7ca835dfdfa57bbe8f6624172c855f4e225057ac2377abf360e", "migration.md": "53659987d64f3fc66c935bed55ec4227689185a23970f31327773fa408f5cf22", "monitoring.md": "202278c1196508df5ff00d34cfe94fd2d60dfb7fd2fcb768cf37864c7605de0a", @@ -71,8 +71,8 @@ "polyglot/cli-python-parity.md": "acf1acbf15ca9cdf069154699c5fbf8c1d1fd3241a32d201ac10b8ec76c038be", "polyglot/cli-reference.md": "b20db162aa91cc85ea64528a061753a99f053b33b6141664ce1194e711c641cc", "polyglot/cli.mdx": "024a3f73e1c700a7fa142ec64a7edde03303f12507f4eb4a9161e0e944f7431b", - "polyglot/cloud-control-plane.md": "09a3487e496100dfcef854c56bc12cb8193c7267236cd992b7defc40b7ecb706", - "polyglot/deployment-modes.md": "ee38a2ca890e6ba5d52fffa1fa0bc65e64a1fc82e47af92463983e523d4e3f49", + "polyglot/cloud-control-plane.md": "bb375e598dd1afa3207171047fb81b0cb82c382ce535ab415cb09dc10f6d748e", + "polyglot/deployment-modes.md": "7b508db4be86c92de76cfd8dfd946d93941c8a6f0a601a161d4d3fd1711bf97f", "polyglot/embedded-to-server.md": "21a7e4c9439a73db3a97fd9b0610749faabf7c449806fe0ad55a0924f50d3b80", "polyglot/external-execution.md": "410728db1107c328d0cb129cbf0c58f4fa8c6427e0406610d6801dfeb8a2db31", "polyglot/invocable-carrier.md": "d32d8b5c7c33204b342f977e0af734166d91e96073db1a49ccb4d414a6d67380", @@ -83,6 +83,7 @@ "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", "polyglot/python.md": "d55056ca7638df07b7267bc6d62e635b954957b99620478e861df90558860df3", + "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "af91b22c93a7fe6833df156371d99bb105740684915bc73af4576f6de2897e10", "polyglot/server-api-reference.md": "e94af77a13b341d6fdc9941d4ee94e5053ab932d2e77069b238eb33351414e83", diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/deployment.md b/i18n/uk/docusaurus-plugin-content-docs/current/deployment.md index 080fcba5a98..09012ea7518 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/current/deployment.md +++ b/i18n/uk/docusaurus-plugin-content-docs/current/deployment.md @@ -6,6 +6,8 @@ description: Вибір підтримуваного шляху самостій # Самостійне розгортання {#self-hosting-deployments} +Для переходів між власними або Cloud-середовищами див. [перехід між середовищами виконання](/docs/polyglot/runtime-migration/). Наявні запуски залишаються у джерелі, поки нові старти переносяться. + Durable Workflow v2 підтримує кілька варіантів самостійного розгортання. Оберіть найпростіший, що відповідає вашому середовищу, і явно визначте образ, базу даних, кеш, автентифікацію, готовність до роботи та контракт оновлення. diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/laravel-adoption.md b/i18n/uk/docusaurus-plugin-content-docs/current/laravel-adoption.md index 543160b6546..eb3be659e40 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/current/laravel-adoption.md +++ b/i18n/uk/docusaurus-plugin-content-docs/current/laravel-adoption.md @@ -569,6 +569,8 @@ SDK. Fake клієнта не виконує код віддаленого worke Прибирання старого пакета, черги, таблиці, секрету чи розгортання Waterline є останнім кроком, а не механізмом cutover. +Для переходів між service mode середовищами див. [перехід між середовищами виконання](/docs/polyglot/runtime-migration/). Експорт історії із Server не є імпортом активного стану. + ## Продовжуйте вибраним шляхом {#continue-with-the-chosen-path} - [Стабільне встановлення v1](/docs/1.x/installation/) diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md b/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md index 4a7294e5542..c5dea40fd3d 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md +++ b/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md @@ -566,6 +566,8 @@ capacity billing і видаляє активні runtime data та credentials. Для читання usage використовуйте повернені `billing_terms` плану. Історичні invoices зберігають прийняті ними terms. +До видалення середовища виконайте [процедуру переходу](/docs/polyglot/runtime-migration/#preserve-evidence): збережіть перевірені докази історії та payload і підтвердьте термінальний стан усіх запусків джерела. Плата за потужність триває, поки джерело виділене. + Експортуйте ті самі дані у CSV чи JSON report для передачі файлу до downstream finance system: diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md b/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md index 28ef15d8e67..711dc1498a3 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md +++ b/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md @@ -153,6 +153,8 @@ Waterline. Оператори власного Server можуть викори ## Пов’язані довідники {#related-references} +[Перехід між середовищами виконання](/docs/polyglot/runtime-migration/) охоплює завершення запусків і перемикання між власними Server, із власного Server до Cloud і з Cloud до власного Server. + - [Встановлення](/docs/installation) - [Server](/docs/polyglot/server) - [PHP SDK](/docs/polyglot/php) diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md b/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md new file mode 100644 index 00000000000..7eb8bcf15c0 --- /dev/null +++ b/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md @@ -0,0 +1,48 @@ +--- +title: "Перехід між середовищами виконання" +description: "Завершіть наявні запуски та перенесіть нові старти між власними Server і Cloud." +tags: + - migration + - operations + - polyglot +--- + +# Перехід між середовищами виконання + +Спрямовуйте нові старти до цільового середовища, поки наявні запуски завершуються у вихідному. Ця процедура стосується незалежних середовищ service mode. Експорт історії зберігає докази, але не переносить активний запуск із Server. Підтримуваний [імпорт embedded v2](./embedded-to-server.md#phase-e-import-eligible-embedded-v2-runs) приймає лише придатні embedded-джерела. + +## Виберіть цільове середовище {#paths} + +| Перехід | Підготовка цілі | +| --- | --- | +| Власний Server до іншого власного Server | Розгорніть ціль із власною авторитетною базою даних, сховищем payload і обліковими даними. Дотримуйтеся [посібника з розгортання](../deployment.md). | +| Власний Server до Cloud | Створіть цільовий простір імен і перевірте повернуті URL середовища, облікові дані та можливості. Див. [налаштування Cloud](./cloud-control-plane.md). | +| Cloud до власного Server | Підготуйте власний Server і його SDK-воркери до зміни трафіку застосунку. Зберігайте вихідне Cloud-середовище, поки його запуски завершуються. | + +## Підготуйте обидва середовища {#prepare} + +Запишіть для джерела endpoint, простір імен, ID екземпляра workflow та запуску, чергу завдань, типи workflow/activity і залежності сховища payload. Збережіть перевірений шлях відновлення власного сховища. Перехід із Cloud не надає доступу до резервної копії бази та не переносить облікові дані Cloud у ціль. Перевірте фактичний реліз і можливості цілі, облікові дані ролей, реєстрації воркерів і оголошені типи. + +## Перемикайте нові старти невеликими групами {#cutover} + +1. Запустіть цільове середовище та його воркери поряд із джерелом. Завершіть canary-запуск з унікальним ID, характерними activity та результатами. Ізолюйте його побічні ефекти від реальних бізнес-операцій. +2. Врахуйте всіх виробників стартів: виклики застосунку, розклади, адаптери webhook/bridge та service-виклики. Виберіть момент переходу для однієї родини workflow. Узгодьте призупинення розкладів і реєстрацію в цілі, щоб два середовища не запускали те саме спрацювання. +3. Спрямуйте нові старти цієї родини до цілі. Зберігайте в застосунку запис про endpoint і простір імен, які прийняли кожен workflow. Повторне використання бізнес-ключа в іншому середовищі не забезпечує дедуплікацію між ними. +4. Спрямовуйте сигнали, схвалення, оновлення, запити, скасування та читання результатів/історії до середовища-власника запуску. Зберігайте вихідні воркери, черги, таймери, облікові дані та доступ до payload. Зміна URL клієнта не переносить прийняту роботу чи її оренди activity. +5. Перевірте результати та помилки, перш ніж переносити наступну родину. Якщо результат старту невідомий через транспортну помилку, з’ясуйте його у вихідному середовищі до надсилання в інше. Довготривалий запуск, який не досяг термінального стану, не завершив зливання. + +## Збережіть докази до виведення з експлуатації {#preserve-evidence} + +Експортуйте потрібну історію, зокрема кожен необхідний запуск продовження, початкові байти payload і кодеки. Перевірте повноту та цілісність сумісним споживачем і збережіть точну ідентичність виробника. [Посібник з експорту історії та replay](../testing.md#service-sdk-replay) пояснює окремі перевірки. Аудитні експорти не роблять запуски із Server придатними для імпорту активного стану. + +Перевіряйте виробника, який фактично надає експорт. Сам Core 2.11.4 не підтверджує Server, вбудований CLI, SDK HTTP або Cloud-експорт. Стежте за окремою [кваліфікацією HTTP-виробника й образу Server](https://github.com/durable-workflow/server/issues/692). Старі пакети з втратою даних залишаються недійсними. Не змінюйте числа чи контрольні суми для примусового прийняття та не знищуйте авторитетне джерело, поки потрібні докази недоступні або неперевірені. + +## Виводьте джерело з експлуатації останнім {#retire-source} + +Підтвердьте відсутність нетермінальних запусків джерела в усіх відповідних просторах імен і на всіх сторінках списків. Врахуйте батьків/дітей в очікуванні та запуски від решти виробників стартів. Справний endpoint, порожня перша сторінка чи недоступні метрики не доводять відсутності відкритої роботи. Переконайтеся, що викликачі, callback і воркери більше не залежать від джерела, а потрібні архіви читаються. + +Лише після цього видаляйте власні ресурси або Cloud-середовище. Плата за Cloud-потужність триває, поки середовище виділене, зокрема під час простою чи завершення запусків. Видалення прибирає активні дані й облікові дані та не є паузою з відновленням. Використовуйте повернуті умови чинного плану; ця процедура не створює автоматичного повернення коштів чи винятку оплати. + +## Відкочуйте маршрутизацію без перенесення запусків {#rollback} + +Повертайте майбутні старти лише до справного сумісного джерела. Запуски, вже прийняті ціллю, залишаються її власністю та потребують її воркерів і маршрутизації команд до завершення. Зберігайте обидва записи власності й запобігайте дубльованим стартам. Не відновлюйте старе сховище поверх новішого прийнятого стану та не запускайте другу активну копію запуску. diff --git a/i18n/uk/source-hashes.json b/i18n/uk/source-hashes.json index 5f2cf249aab..add20ca3f3e 100644 --- a/i18n/uk/source-hashes.json +++ b/i18n/uk/source-hashes.json @@ -27,7 +27,7 @@ "defining-workflows/workflow-id.md": "91b94211e2f8f405895ad82cfe2ef9baadb7a2cbd06e9c1e7aa6362231e0d424", "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", - "deployment.md": "dd0b6bd184eda12e67922121a09c7f3c98346bde01be1d4c3217f168db5fd7ca", + "deployment.md": "9742b8637f568aafd5b61e7de97a368aad6faf95a4efd40323269477edfdfba1", "failures-and-recovery.md": "7df0b7ce4139b789d8988ce2bf640c388225daa28731b88719e4777f61e40a4c", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", @@ -59,7 +59,7 @@ "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", "installation.md": "1e2e04a8f23414d0e81c72b166700fd6350129ab81b2f22a6205856c23741967", "introduction.md": "06bf96d164d402d4e376c6308b20f96d324110b2e0cf96c2a1a67b39906072e3", - "laravel-adoption.md": "978f2333bf5ce38ebc58619ca3f50a087572a3b0c28d52bc06843bc341010684", + "laravel-adoption.md": "dd998f6ac33691f793ffcecce78dea82aef7c6d22b1344d5d6ab5234619db8a8", "mcp-workflows.md": "1c0b5bb7f2e5c7ca835dfdfa57bbe8f6624172c855f4e225057ac2377abf360e", "migration.md": "53659987d64f3fc66c935bed55ec4227689185a23970f31327773fa408f5cf22", "monitoring.md": "202278c1196508df5ff00d34cfe94fd2d60dfb7fd2fcb768cf37864c7605de0a", @@ -71,8 +71,8 @@ "polyglot/cli-python-parity.md": "acf1acbf15ca9cdf069154699c5fbf8c1d1fd3241a32d201ac10b8ec76c038be", "polyglot/cli-reference.md": "b20db162aa91cc85ea64528a061753a99f053b33b6141664ce1194e711c641cc", "polyglot/cli.mdx": "024a3f73e1c700a7fa142ec64a7edde03303f12507f4eb4a9161e0e944f7431b", - "polyglot/cloud-control-plane.md": "09a3487e496100dfcef854c56bc12cb8193c7267236cd992b7defc40b7ecb706", - "polyglot/deployment-modes.md": "ee38a2ca890e6ba5d52fffa1fa0bc65e64a1fc82e47af92463983e523d4e3f49", + "polyglot/cloud-control-plane.md": "bb375e598dd1afa3207171047fb81b0cb82c382ce535ab415cb09dc10f6d748e", + "polyglot/deployment-modes.md": "7b508db4be86c92de76cfd8dfd946d93941c8a6f0a601a161d4d3fd1711bf97f", "polyglot/embedded-to-server.md": "21a7e4c9439a73db3a97fd9b0610749faabf7c449806fe0ad55a0924f50d3b80", "polyglot/external-execution.md": "410728db1107c328d0cb129cbf0c58f4fa8c6427e0406610d6801dfeb8a2db31", "polyglot/invocable-carrier.md": "d32d8b5c7c33204b342f977e0af734166d91e96073db1a49ccb4d414a6d67380", @@ -83,6 +83,7 @@ "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", "polyglot/python.md": "d55056ca7638df07b7267bc6d62e635b954957b99620478e861df90558860df3", + "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "af91b22c93a7fe6833df156371d99bb105740684915bc73af4576f6de2897e10", "polyglot/server-api-reference.md": "e94af77a13b341d6fdc9941d4ee94e5053ab932d2e77069b238eb33351414e83", diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/deployment.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/deployment.md index ba932e25875..7dfb57319ec 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/deployment.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/deployment.md @@ -6,6 +6,8 @@ description: 选择受支持的 Durable Workflow v2 自托管路径及起始产 # 自托管部署 {#self-hosting-deployments} +在自托管与 Cloud 运行时之间迁移时,请遵循[运行时迁移指南](/docs/polyglot/runtime-migration/)。新启动切换期间,现有运行仍保留在来源端。 + Durable Workflow v2 支持多种自托管形态。选择与你运维环境相符的最小路径,然后明确镜像、数据库、缓存、身份验证、就绪和升级契约。 本指南涵盖独立 Server 发行版。如果将 Laravel 软件包嵌入自己的应用中运行,请改用软件包安装和配置页面。Durable Workflow Cloud 是独立的托管服务选择,由 Cloud 运维运行时、持久化、放置和恢复;自托管 Server 绝不会接入 Cloud。参见 [Cloud 托管运行时](/docs/polyglot/cloud-control-plane)。当前 Cloud 契约是单区域托管运行时和恢复边界,不承诺多区域复制、自动区域故障转移或故障回切。 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/laravel-adoption.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/laravel-adoption.md index 76471704ec9..2927c849014 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/laravel-adoption.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/laravel-adoption.md @@ -486,6 +486,8 @@ $workflows->assertResultRequested('order-1001'); 退役旧软件包、队列、表、密钥或 Waterline 部署是最后一步,绝不是切换机制。 +服务模式运行时之间迁移时,请参阅[运行时迁移指南](/docs/polyglot/runtime-migration/)。Server 历史导出不等同于活动状态导入。 + ## 按所选路径继续 {#continue-with-the-chosen-path} - [稳定 v1 安装](/docs/1.x/installation/) diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md index 084515e46e8..4e8ff103e44 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/cloud-control-plane.md @@ -365,6 +365,8 @@ Cloud Dev 的时间计量从隔离运行时激活开始,到取消配置时停 空闲运行时仍产生容量费用。取消配置会停止运行时容量计费,并删除活动运行时数据和凭据;它不是暂停/恢复操作。计划中的 SLA 条款使用相同的已配置时间模型,采用各自费率、最低费用和上限。解释用量时,使用套餐返回的 `billing_terms`;历史账单保留当时接受的条款。 +解除配置前,请遵循[运行时迁移指南](/docs/polyglot/runtime-migration/#preserve-evidence):保留已验证的历史和载荷证据,并确认所有来源运行都已终止。来源仍处于已配置状态时,容量计费会继续。 + 下游财务系统需要文件交接时,将相同证据导出为 CSV 或 JSON 报告: ```bash diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md index db141677271..9bbe184c759 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/deployment-modes.md @@ -98,6 +98,8 @@ Laravel 团队可以阅读专门的 [Laravel 采用与运行时迁移指南](/do ## 相关参考 {#related-references} +[运行时迁移指南](/docs/polyglot/runtime-migration/)涵盖自托管之间、自托管到 Cloud,以及 Cloud 到自托管的排空与切换。 + - [安装](/docs/installation) - [Server](/docs/polyglot/server) - [PHP SDK](/docs/polyglot/php) diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md new file mode 100644 index 00000000000..f9eb1fd5c9b --- /dev/null +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/runtime-migration.md @@ -0,0 +1,48 @@ +--- +title: "在运行时之间迁移工作负载" +description: "让现有运行完成,并在自托管 Server 与 Cloud 之间切换新启动。" +tags: + - migration + - operations + - polyglot +--- + +# 在运行时之间迁移工作负载 + +将新启动发送到目标,同时让现有运行在来源端完成。本流程适用于独立的服务模式运行时。历史导出用于保存证据,不能传输由 Server 创建的活动运行。受支持的 [embedded v2 导入](./embedded-to-server.md#phase-e-import-eligible-embedded-v2-runs)只接受符合条件的 embedded 来源。 + +## 选择目标 {#paths} + +| 迁移方向 | 目标准备 | +| --- | --- | +| 自托管 Server 到另一个自托管 Server | 为目标部署独立的权威数据库、载荷存储和凭据。遵循[部署指南](../deployment.md)。 | +| 自托管 Server 到 Cloud | 配置目标命名空间,验证返回的运行时 URL、凭据和能力。遵循 [Cloud 配置指南](./cloud-control-plane.md)。 | +| Cloud 到自托管 Server | 更改应用流量前,准备好自托管目标及其 SDK worker。在来源运行完成之前,保留已配置的 Cloud 来源。 | + +## 准备两个运行时 {#prepare} + +记录每个来源端点、命名空间、工作流实例 ID、运行 ID、任务队列、工作流与活动类型,以及载荷存储依赖。为自托管存储保留经过测试的恢复路径。从 Cloud 迁移不会授予数据库备份访问权限,也不会将 Cloud 凭据复制到目标。验证目标的实际版本和能力、角色凭据、worker 注册及其声明的类型。 + +## 按小组切换新启动 {#cutover} + +1. 在来源旁运行目标及其 worker。完成一个具有唯一标识的金丝雀运行,覆盖有代表性的活动与结果,并将其副作用与真实业务隔离。 +2. 盘点所有启动来源:应用调用、计划、webhook/bridge 适配器和服务调用。为一个工作流系列选择切换点。协调暂停来源计划及在目标注册计划,避免两个运行时启动同一次计划触发。 +3. 将该系列的新启动路由到目标。由应用记录接受每个工作流的端点和命名空间。在另一个运行时重用业务键不会提供跨运行时去重。 +4. 继续将信号、审批、更新、查询、取消、结果及历史读取发送到拥有该运行的运行时。保留来源 worker、队列、定时器、凭据和载荷访问。更改客户端 URL 不会移动已接受的工作或其活动租约。 +5. 迁移下一个系列前,检查结果和失败。如果传输问题导致启动结果不确定,应先在原运行时查明结果,再向其他运行时提交。永远不进入终态的长期运行尚未排空。 + +## 停用前保存证据 {#preserve-evidence} + +导出需要保留的历史,包括所有必需的延续运行、原始载荷字节和编解码器。使用兼容的消费端检查完整性与一致性,并保留准确的生成端身份。[历史导出与重放指南](../testing.md#service-sdk-replay)说明了各项独立检查。审计导出不会使 Server 来源运行具备活动状态导入资格。 + +检查实际提供导出的生成端。仅发布 Core 2.11.4 并不能证明 Server、随附 CLI、SDK HTTP 或 Cloud 导出已通过验证。请跟进独立的 [Server HTTP 生成端与镜像验证](https://github.com/durable-workflow/server/issues/692)。旧的有损数据包仍然无效。不得修改数值或校验和来强行接受;必需证据不可用或无法验证时,不要销毁权威来源。 + +## 最后停用来源 {#retire-source} + +检查所有相关命名空间及列表的全部页面,确认没有来源拥有的非终态运行。包括等待中的父子运行,以及剩余启动来源创建的运行。端点健康、第一页为空或指标不可用,都不能证明没有未完成工作。确认调用方、回调和 worker 不再依赖来源,且必需的归档可读。 + +之后才能停用自托管资源或解除 Cloud 运行时配置。只要 Cloud 仍处于已配置状态,容量费用就会继续,包括空闲和排空期间。解除配置会删除活动运行时数据和凭据,并非暂停后恢复。应使用现有套餐返回的计费条款;本流程不产生自动退款或计费例外。 + +## 回滚路由而不移动运行 {#rollback} + +仅将未来的新启动切回健康且兼容的来源。目标已经接受的运行仍归目标所有,在终态之前需要目标 worker 及命令路由。保留两边的归属记录并防止重复启动。不要用旧来源存储覆盖较新的已接受状态,也不要恢复同一运行的第二个活动副本。 diff --git a/i18n/zh-Hans/source-hashes.json b/i18n/zh-Hans/source-hashes.json index 5f2cf249aab..add20ca3f3e 100644 --- a/i18n/zh-Hans/source-hashes.json +++ b/i18n/zh-Hans/source-hashes.json @@ -27,7 +27,7 @@ "defining-workflows/workflow-id.md": "91b94211e2f8f405895ad82cfe2ef9baadb7a2cbd06e9c1e7aa6362231e0d424", "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", - "deployment.md": "dd0b6bd184eda12e67922121a09c7f3c98346bde01be1d4c3217f168db5fd7ca", + "deployment.md": "9742b8637f568aafd5b61e7de97a368aad6faf95a4efd40323269477edfdfba1", "failures-and-recovery.md": "7df0b7ce4139b789d8988ce2bf640c388225daa28731b88719e4777f61e40a4c", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", @@ -59,7 +59,7 @@ "how-it-works.md": "90454c37f4244297d5c11bcc59549859acf59f88d15ecd26f0a6951c115f86eb", "installation.md": "1e2e04a8f23414d0e81c72b166700fd6350129ab81b2f22a6205856c23741967", "introduction.md": "06bf96d164d402d4e376c6308b20f96d324110b2e0cf96c2a1a67b39906072e3", - "laravel-adoption.md": "978f2333bf5ce38ebc58619ca3f50a087572a3b0c28d52bc06843bc341010684", + "laravel-adoption.md": "dd998f6ac33691f793ffcecce78dea82aef7c6d22b1344d5d6ab5234619db8a8", "mcp-workflows.md": "1c0b5bb7f2e5c7ca835dfdfa57bbe8f6624172c855f4e225057ac2377abf360e", "migration.md": "53659987d64f3fc66c935bed55ec4227689185a23970f31327773fa408f5cf22", "monitoring.md": "202278c1196508df5ff00d34cfe94fd2d60dfb7fd2fcb768cf37864c7605de0a", @@ -71,8 +71,8 @@ "polyglot/cli-python-parity.md": "acf1acbf15ca9cdf069154699c5fbf8c1d1fd3241a32d201ac10b8ec76c038be", "polyglot/cli-reference.md": "b20db162aa91cc85ea64528a061753a99f053b33b6141664ce1194e711c641cc", "polyglot/cli.mdx": "024a3f73e1c700a7fa142ec64a7edde03303f12507f4eb4a9161e0e944f7431b", - "polyglot/cloud-control-plane.md": "09a3487e496100dfcef854c56bc12cb8193c7267236cd992b7defc40b7ecb706", - "polyglot/deployment-modes.md": "ee38a2ca890e6ba5d52fffa1fa0bc65e64a1fc82e47af92463983e523d4e3f49", + "polyglot/cloud-control-plane.md": "bb375e598dd1afa3207171047fb81b0cb82c382ce535ab415cb09dc10f6d748e", + "polyglot/deployment-modes.md": "7b508db4be86c92de76cfd8dfd946d93941c8a6f0a601a161d4d3fd1711bf97f", "polyglot/embedded-to-server.md": "21a7e4c9439a73db3a97fd9b0610749faabf7c449806fe0ad55a0924f50d3b80", "polyglot/external-execution.md": "410728db1107c328d0cb129cbf0c58f4fa8c6427e0406610d6801dfeb8a2db31", "polyglot/invocable-carrier.md": "d32d8b5c7c33204b342f977e0af734166d91e96073db1a49ccb4d414a6d67380", @@ -83,6 +83,7 @@ "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", "polyglot/python.md": "d55056ca7638df07b7267bc6d62e635b954957b99620478e861df90558860df3", + "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "af91b22c93a7fe6833df156371d99bb105740684915bc73af4576f6de2897e10", "polyglot/server-api-reference.md": "e94af77a13b341d6fdc9941d4ee94e5053ab932d2e77069b238eb33351414e83", diff --git a/sidebars.js b/sidebars.js index 25905d06d05..3782c8b936e 100644 --- a/sidebars.js +++ b/sidebars.js @@ -16,6 +16,7 @@ const sidebars = { }, items: [ 'polyglot/deployment-modes', + 'polyglot/runtime-migration', 'polyglot/cloud-control-plane', 'polyglot/server', 'polyglot/cancellation',