使用 Dapr 和 Amazon EKS 精簡微服務開發

微服務和容器正在革新現代應用程式在雲端中的建置、部署和管理方式。然而,開發和運營微服務可能會引入相當複雜性,通常需要開發人員花費寶貴的時間處理橫跨關注點,如服務發現、狀態管理和可觀察性。

Dapr,即分散式應用程式運行時,是用於在雲端和邊緣環境中構建微服務的開源運行時。它提供跨平台的基本組件,如服務發現、狀態管理、發布/訂閱消息和可觀察性。Dapr已達到CNCF(Cloud Native Computing Foundation)的成熟等級並目前被許多企業使用。

當與亞馬遜彈性Kubernetes服務(Amazon EKS)結合使用時,這是來自AWS的受管Kubernetes服務,Dapr可以加速微服務和容器的採用,使開發人員能夠專注於編寫業務邏輯,而無需擔心基礎架構的技術細節。Amazon EKS使管理Kubernetes叢集變得輕鬆,可以在工作負載變化時輕鬆進行擴展。

在本篇部落格文章中,我們將探索Dapr如何簡化在Amazon EKS上的微服務開發。我們將首先深入探討兩個基本組件:服務調用狀態管理

服務調用

微服務之間無縫且可靠的通信至關重要。然而,開發者經常面臨複雜的任務,例如服務發現、API 標準化、通信通道安全、優雅處理故障以及執行可觀察性。

使用 Dapr 的 服務調用,這些問題成為過去。您的服務可以輕鬆地使用行業標準協議,如 gRPC 和 HTTP/HTTPS 進行互相通信。服務調用處理所有繁重的工作,從服務註冊和發現到請求重試、加密、訪問控制和分布式追蹤。

狀態管理

Dapr的狀態管理建構模塊簡化了開發人員在應用程序中處理狀態的方式。它提供了一致的API,用於存儲和檢索狀態數據,無論底層的狀態存儲是什麼(例如Redis,AWS DynamoDB,Azure Cosmos DB)。

這種抽象使開發人員能夠構建具有狀態的應用程序,而無需擔心管理和擴展狀態存儲的複雜性。

先決條件

為了跟隨本文,您應該具有以下內容:

應用架構

在下面的圖表中,我們有兩個微服務:一個 Python 應用程序和一個 Node.js 應用程序。Python 應用程序生成訂單數據並調用 Node.js 應用程序暴露的 /neworder 端點。Node.js 應用程序將傳入的訂單數據寫入狀態存儲(在這種情況下為 Amazon ElastiCache),並將訂單 ID 作為響應返回給 Python 應用程序。

通過利用 Dapr 的服務調用構建塊,Python 應用程序可以無縫地與 Node.js 應用程序進行通信,而不必擔心服務發現、API 標準化、通信通道安全、故障處理或可觀察性。它實現了 mTLS 以提供安全的服務對服務通信。

Dapr 處理這些橫向關注點,使開發人員能夠專注於編寫核心業務邏輯。

此外,Dapr 的狀態管理構建模塊簡化了 Node.js 應用與狀態存儲(Amazon ElastiCache)的交互。Dapr 提供了一致的 API 來存儲和檢索狀態數據,抽象了管理和擴展底層狀態存儲的複雜性。這種抽象使開發人員能夠構建有狀態的應用程序,而無需擔心狀態存儲管理的細節。

Amazon EKS 集群託管了一個名為 dapr-system 的命名空間,其中包含了 Dapr 控制平面組件。dapr-sidecar-injector 會自動將 Dapr 運行時注入到啟用了 Dapr 的微服務的 pod 中。

服務調用步驟

  1. 訂單生成器服務(Python 應用程序)調用 Node 應用程序的方法 /neworder。此請求發送到本地 Dapr sidecar,該 sidecar 在與 Python 應用程序相同的 pod 中運行。
  2. Dapr 使用 Amazon EKS 集群的 DNS 提供程序解析目標應用程序並將請求發送到 Node 應用程序的 sidecar。
  3. Node 應用程序的 sidecar 然後將請求發送到 Node 應用程序的微服務。
  4. Node 應用程序然後將從 Python 應用程序接收的訂單 ID 寫入 Amazon ElasticCache。
  5. Node 應用程序將響應發送到其本地 Dapr sidecar。
  6. Node 應用程序的 sidecar 將響應轉發到 Python 應用程序的 Dapr sidecar。
  7. Python 應用程序 sidecar 將響應返回給發起對 Node 應用程序方法 /neworder 的 Python 應用程序。

部署步驟

建立並確認 EKS 叢集

要設置 Amazon EKS(彈性 Kubernetes 服務)叢集,您需要按照幾個步驟進行操作。以下是此過程的高層級概述:

先決條件

  • 安裝並配置 AWS CLI
  • 安裝 eksctlkubectl 和 AWS IAM Authenticator

1. 建立一個 EKS 叢集。 使用 eksctl 創建基本叢集的命令如下:

Shell

 

2. 配置 kubectl。更新您的 kubeconfig 以連接到新叢集:

Shell

 

3. 驗證叢集。 檢查您的節點是否就緒:

Shell

 

在您的 EKS 叢集上安裝 DAPR

1. 安裝 DAPR CLI:

Shell

 

2. 驗證安裝:

Shell

 

3. 安裝 DAPR 並進行驗證:

Shell

 

在預設命名空間中創建 Dapr 元件 statestorepubsub。您可以使用以下命令進行檢查:

Shell

 

將 Amazon ElastiCache 配置為您的 Dapr StateStore

創建 Amazon ElastiCache 以存儲微服務的狀態。在此示例中,我們使用 ElastiCache 無伺服器,快速創建一個快取,並根據應用程式流量需求自動調整規模,無需管理任何伺服器。

配置ElastiCache的安全组,以允许与您的EKS集群建立连接。为简单起见,请将其保留在与您的EKS集群相同的VPC中。记下缓存端点,我们将在后续步骤中需要。

运行示例应用

1. 克隆示例应用的Git存储库:

Shell

 

2. 创建redis-state.yaml,并为redisHost提供一个Amazon ElasticCache端点:

YAML

 

使用kubectl应用yaml配置以设置状态存储组件。

Shell

 

3. 部署带有边车的微服务。

对于微服务节点应用,转到/quickstarts/tutorials/hello-kubernetes/deploy/node.yaml文件,您将注意到以下注释。它告诉Dapr控制平面注入一个边车,并为Dapr应用分配一个名称。

YAML

 

node.yaml中添加一个注释service.beta.kubernetes.io/aws-load-balancer-scheme: “internet-facing”以创建AWS ELB。

YAML

 

使用kubectl部署节点应用。转到目录/quickstarts/tutorials/hello-kubernetes/deploy并执行以下命令。

Shell

 

获取AWS NLB,在下面命令的输出中显示为External IP。

Shell

 

转到/quickstarts/tutorials/hello-kubernetes目录,其中包含sample.json文件,以执行以下步骤。

Shell

 

您可以通过在浏览器中使用负载均衡器访问/order端点来验证输出。

Plain Text

 

你將會看到輸出為{“OrderId”:“42”}

接著,部署第二個微服務Python應用程式,其具有每秒生成新訂單ID的業務邏輯,並調用Node應用程式的方法/neworder

前往目錄/quickstarts/tutorials/hello-kubernetes/deploy並執行以下命令。

Shell

 

4. 驗證和測試應用程式部署。

現在我們已經部署了兩個微服務。Python應用程式正在生成訂單並調用/neworder,如下面的日誌所示。

Shell

 

SystemVerilog

 

我們可以看到Node應用程式正在接收請求並將數據寫入我們示例中的狀態存儲Amazon ElasticCache。 

Shell

 

SystemVerilog

 

為了確認數據是否持久存在於Amazon ElasticCache中,我們訪問下面的端點/order。它會返回最新生成的訂單ID,這是由Python應用程式生成的。

Plain Text

 

你將會看到一個包含最新訂單的輸出如{“OrderId”:“370”}。 

清理

運行以下命令來刪除部署的Node應用程式和Python應用程式以及狀態存儲組件。 

前往/quickstarts/tutorials/hello-kubernetes/deploy目錄以執行以下命令。

YAML

 

您可以使用eksctl命令拆除您的EKS集群並刪除Amazon ElastiCache。

前往包含用於在第一步創建集群的cluster.yaml文件的目錄。

Shell

 

結論

Dapr 和 Amazon EKS 組成了一個強大的聯盟,專注於微服務開發。Dapr 簡化了跨領域的關注點,而 EKS 管理 Kubernetes 基礎架構,使開發人員能夠專注於核心業務邏輯並提高生產力。

這種組合加速了可擴展、具韌性和可觀察應用程式的創建,顯著減少了運營開銷。這是您微服務旅程的理想基礎。請關注即將發佈的文章,深入探討 Dapr 和 EKS 在分佈式追蹤和可觀察性方面的能力,提供更深入的見解和最佳實踐。

Source:
https://dzone.com/articles/streamline-microservices-development-with-dapr-amazon-eks