上的基礎設施範例 AWS - AWS 方案指引

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

上的基礎設施範例 AWS

本節提供在 上 AWS 設計應用程式基礎設施的範例,可用來實作六邊形架構。我們建議您從簡單的架構開始,以建置最低可行產品 (MVP)。大多數微服務需要單一進入點來處理用戶端請求、執行程式碼的運算層,以及存放資料的持久性層。下列 AWS 服務非常適合做為六邊形架構中的用戶端、主要轉接器和次要轉接器使用:

  • 用戶端:Amazon API Gateway、Amazon Simple Queue Service (Amazon SQS)、Elastic Load Balancing、Amazon EventBridge

  • 主要轉接器: AWS Lambda、Amazon Elastic Container Service (Amazon ECS)、Amazon Elastic Kubernetes Service (Amazon EKS)、Amazon Elastic Compute Cloud (Amazon EC2)

  • 次要轉接器:Amazon DynamoDB、Amazon Relational Database Service (Amazon RDS)、Amazon Aurora、API Gateway、Amazon SQS、Elastic Load Balancing、EventBridge、Amazon Simple Notification Service (Amazon SNS)

下列各節會更詳細地討論六邊形架構內容中的這些服務。

啟動簡單

當您使用六邊形架構來建構應用程式時,建議您以簡單的方式開始。在此範例中,API Gateway 用作用戶端 (REST API),Lambda 用作主要轉接器 (運算),而 DynamoDB 用作次要轉接器 (持久性)。閘道用戶端會呼叫進入點,在此案例中,該進入點是 Lambda 處理常式。

簡單六邊形架構

此架構完全無伺服器,為架構師提供了良好的起點。我們建議您在網域中使用 命令模式,因為它可讓程式碼更容易維護,並且可以適應新的業務和非功能需求。此架構可能足以透過幾個操作建置簡單的微服務。

套用 CQRS 模式

如果網域上的操作數量將擴展,建議您切換到 CQRS 模式。您可以使用下列範例,將 CQRS 模式套用為 中的 AWS 完全無伺服器架構。

在六邊形架構中套用 CQRS 模式

此範例使用兩個 Lambda 處理常式,一個用於查詢,另一個用於命令。使用 API 閘道做為用戶端,以同步方式執行查詢。使用 Amazon SQS 做為用戶端,以非同步方式執行命令。

此架構包含多個用戶端 (API Gateway 和 Amazon SQS) 和多個主要轉接器 (Lambda),由其對應的進入點 (Lambda 處理常式) 呼叫。所有元件都屬於相同的邊界內容,因此它們位於相同的網域內。

新增容器、關聯式資料庫和外部 API,以發展架構

容器是長時間執行任務的好選項。如果您有預先定義的資料結構描述,並想要受益於 SQL 語言的強大功能,您可能也想要使用關聯式資料庫。此外,網域必須與外部 APIs通訊。您可以發展架構範例以支援這些需求,如下圖所示。

透過新增容器、關聯式資料庫和外部 API 來發展六邊形架構

此範例使用 Amazon ECS 做為啟動網域中長時間執行任務的主要轉接器。發生特定事件時,Amazon EventBridge (用戶端) 會啟動 Amazon ECS 任務 (進入點)。架構包含 Amazon RDS 作為儲存關聯式資料的另一個次要轉接器。它也會新增另一個 API 閘道做為次要轉接器,以叫用外部 API 呼叫。因此,該架構使用多個主要和次要轉接器,這些轉接器依賴一個商業網域中的不同基礎運算層。

網域一律會透過稱為連接埠的抽象,鬆散地與所有主要和次要轉接器耦合。網域使用連接埠定義從外部世界所需的內容。由於轉接器必須負責實作連接埠,因此從一個轉接器切換到另一個轉接器不會影響網域。例如,您可以撰寫新的轉接器,從 Amazon DynamoDB 切換到 Amazon RDS,而不會影響網域。

新增更多網域 (向外縮小)

六角形架構與微服務架構的原則非常一致。目前顯示的架構範例包含單一網域 (或邊界內容)。應用程式通常包含多個網域,這些網域需要透過主要和次要轉接器進行通訊。每個網域都代表微服務,與其他網域鬆散耦合。

將網域新增至您的六邊形架構

在此架構中,每個網域會使用不同的一組運算環境 (運算環境)。(每個網域也可能有多個運算環境,如上一個範例所示。) 每個網域都會定義其必要的界面,以透過連接埠與其他網域通訊。連接埠是使用主要和次要轉接器實作。如此一來,如果轉接器發生變更,網域不會受到影響。此外,網域會彼此分離。

在上圖所示的架構範例中,Lambda、Amazon EC2、Amazon ECS 和 AWS Fargate 會用作主要轉接器。API Gateway、Elastic Load Balancing、EventBridge 和 Amazon SQS 會用作次要轉接器。