

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在線上遷移期間撰寫新資料
<a name="migration-online-dw"></a>

線上遷移計畫的第一步是確保應用程式寫入的任何新資料都存放在兩個資料庫、您現有的 Cassandra 叢集和 Amazon Keyspaces 中。目標是跨兩個資料存放區提供一致的檢視。您可以將所有新的寫入套用至兩個資料庫來執行此操作。若要實作雙寫入，請考慮下列三個選項之一。
+ **ZDM Dual Write Proxy for Amazon Keyspaces Migration** – 使用 [Github](https://github.com/aws-samples/amazon-keyspaces-examples/blob/main/migration/online/zdm-proxy/README.md) 上提供的 ZDM Proxy for Amazon Keyspaces，您可以將 Apache Cassandra 工作負載遷移至 Amazon Keyspaces，而不會造成應用程式停機。此增強型解決方案實作AWS最佳實務，並擴展官方 ZDM Proxy 功能。
  + 在 Apache Cassandra 和 Amazon Keyspaces 之間執行線上遷移。
  + 在不重構應用程式的情況下，同時將資料寫入來源和目標資料表。
  + 透過雙讀取操作驗證查詢。

  解決方案提供下列增強功能，以使用 AWS和 Amazon Keyspaces。
  + **容器部署** – 使用來自 Amazon Elastic Container Registry (Amazon ECR) 的預先設定 Docker 映像進行 VPC 可存取的部署。
  + **基礎設施即程式碼** – 使用 AWS CloudFormation範本部署以自動設定AWS Fargate。
  + **Amazon Keyspaces 相容性** – 使用 Amazon Keyspaces 的自訂調整來存取系統資料表。

  解決方案透過 Fargate 在 Amazon ECS 上執行，根據您的工作負載需求提供無伺服器可擴展性。網路負載平衡器會將傳入的應用程式流量分散到多個 Amazon ECS 任務，以獲得高可用性。  
![\[實作 ZDM 雙寫入代理，將資料從 Apache Cassandra 遷移至 Amazon Keyspaces。\]](http://docs.aws.amazon.com/zh_tw/keyspaces/latest/devguide/images/migration/online-migration-zdm.png)
+ **應用程式雙重寫入** – 您可以利用現有的 Cassandra 用戶端程式庫和驅動程式，在應用程式程式碼變更最少的情況下實作雙重寫入。您可以在現有應用程式中實作雙寫入，或在架構中建立新的 layer 來處理雙寫入。如需詳細資訊，以及顯示如何在現有應用程式中實作雙重寫入的客戶案例研究，請參閱 [Cassandra 遷移案例研究](https://aws.amazon.com/solutions/case-studies/intuit-apache-migration-case-study/)。

  實作雙重寫入時，您可以將一個資料庫指定為領導者，將另一個資料庫指定為跟隨者。這可讓您繼續寫入原始來源或領導資料庫，而不會讓後續的寫入失敗，或目的地資料庫中斷應用程式的關鍵路徑。

  您可以使用 Amazon Simple Queue Service 在[無效字母佇列 (DLQ)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) 中記錄失敗的寫入，而不是重試失敗的寫入至追隨者。DLQ 可讓您分析對追隨者的失敗寫入，並判斷為什麼在目的地資料庫中處理未成功。

  如需更複雜的雙寫入實作，您可以遵循使用 [saga 模式](https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/saga.html)設計一系列本機交易的AWS最佳實務。saga 模式可確保如果交易失敗，saga 會執行補償性交易，以還原先前交易所做的資料庫變更。

  使用雙寫入進行線上遷移時，您可以依照 saga 模式設定雙寫入，以便每次寫入都是本機交易，以確保異質資料庫之間的原子操作。如需使用建議的 設計模式來設計分散式應用程式的詳細資訊AWS 雲端，請參閱[雲端設計模式、架構和實作](https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/introduction)。  
![\[從 Apache Cassandra 遷移至 Amazon Keyspaces 時，在應用程式層實作雙寫入。\]](http://docs.aws.amazon.com/zh_tw/keyspaces/latest/devguide/images/migration/online-migration-dual-writes.png)
+ **訊息層雙重寫入** – 您可以使用現有的訊息層對 Cassandra 和 Amazon Keyspaces 執行雙重寫入，而不是在應用程式層實作雙重寫入。

  若要這樣做，您可以將其他消費者設定為您的簡訊平台，將寫入傳送至這兩個資料存放區。此方法使用訊息層提供簡單的低程式碼策略，在兩個資料庫之間建立兩個最終一致的檢視。