《Practical Microservices with Dapr and .NET》翻譯:初識Dapr


該部分主要是給出學習dapr的入門,描述dapr全貌告訴你dapr是啥以及介紹dapr的主要功能與組件

該部分分為兩章:

第一章:介紹dapr

第二章:調試dapr的解決方案項目

 

一. 介紹dapr

該章節將會為你介紹分布式應用運行時Distributed Application Runtime (Dapr)項目,可以讓你學到dapr架構的核心概念,也為你開發dapr提供准備。

dapr能夠助力搭建雲原生應用的開發,以及簡化使用微服務架構的難度。

在該章節,我們將會闡述一下幾個主題:

1)dapr的概述

2)dapr的架構

3)dapr的入門

4)搭建一個dapr樣例

 在這個階段,學習這些主題是非常重要的,它可以為我們學習dapr打下堅實的基礎,也為去理解微服務架構提供便捷,通過本書剩下的章節,可以指導我們學習dapr。

首先,開啟探索dapr的第一步就是理解它是如何工作的。

1. 專業准備

在github上找到源碼:https://github.com/
PacktPublishing/Practical-Microservices-with-Dapr-and-.NET/
tree/main/chapter01

在這個章節,找到需要運行的腳本與代碼路徑<repositorypath>\chapter01

2.dapr的整體概述

Dapr是有微軟公司研發並開源的基於事件驅動、易擴展的運行時。目前正在開發階段,已經發布1.0版本,現在可以商用了

在dapr的定義中着重強調了事件驅動這個概念,這說明事件驅動在以微服務架構的應用中起到重要作用,從外部系統或者本系統的其他部分,都是以事件的形式將通知其他服務以便執行后續的業務邏輯。

 dapr的擴展性主要表現在它可以在你的開發機上以self-hosted方式啟動,也可以部署在系統邊緣(邊緣計算?)或者部署在kubernets上

如下圖可以展示出dapr架構中的多種構建模塊:

 

 

可移植性是超出了現有的托管環境,這是微軟在dapr上的一項創舉,dapr可以在本地或者雲上,比如 Microsoft

Azure, Amazon AWS, Google GCP 或者其他雲服務商。

Dapr是部署在由微軟研發具有超大規模開發建設經驗的雲原生應用,它的靈感來自Orleans和Service Fabric的設計,這使許多Microsoft Azure雲服務可以在以下位置彈性運行規模大。

Dapr為開發者提供了基於微服務架構風格的一種設計方法,一種構建工具,一個應用的運行時。

微服務可以為復雜度增長的團隊與產品管理提供很多有效的幫助,但是通常在開始階段,也會給團隊帶來比較大的負擔。

如果您可以利用諸如Dapr之類的運行時來幫助您解決常見問題,該怎么辦?
您可能需要采用和簡化操作的模式?

如下圖,展示的是兩種dapr的啟動方式:

 

                                                                         圖1.2 Dapr的邊車設計

如圖1.2所示,Dapr運行時在Sidecar進程中運行,將應用程序與環境的復雜度解耦,極大程度的簡化了開發和運維成本。 這些Sidecar進程可以在本地開發環境運行或者部署在Kubernetes的Pod的容器中。

 從應用程序的角度,Dapr就是一種可以通過Http/gRPC調用,或者是使用更為簡單的SDKs調用的API。目前客戶端支持語言包含:.NET Core, Java, Go, Python, C++, JavaScript, Rust。

正如我們所希望的是,在將來,我們不僅采用SDK的方式在應用中使用Dapr,而是希望使用比較簡單的Http調用方式調用Dapr服務,比如這樣的服務endpoint:

http://localhost:3500/v1.0/invoke/<app-id>/method/<method name>.

盡管如此,如果使用Dapr這種模式去寫一個服務,使用SDK還是會給你帶來比較多的好處。

3. Dapr不能做到

 盡管我們希望Dapr可以引起你的注意且你會化大量的時間學習這本書,但是當聊起Dapr的時候我都會澄清Dapr不能做到哪些方面,這樣會讓你對Dapr減少不必要的誤解而更清楚Dapr到底是啥:

1)Dapr的目標不是強迫開發人員采用具有嚴格規則和約束的編程模型。相反,Dapr是助力於開發者從很多復雜的微服務實現中解脫出來。舉個例子,在Dapr中存儲的數據庫連接池的管理的狀態(下章節會介紹)將會轉換成微服務應用代碼。

2)Dapr不是Service Mesh。盡管有很多相似點存在於Dapr與service mesh之間,Dapr在應用程序層級提供服務而service mesh卻是在infrastructure層進行操作。例如Dapr在與存儲組件和服務交互時需要重試邏輯,但是這個職責是開發者根據Dapr返回的錯誤信息決定如何處理錯誤

是把錯誤返回給客戶端還是采取重試機制(netcore下Polly可以支持),這對開發者來說是可以選擇一個明確的選擇。Dapr只是集成service mesh,比如Istio,在本書中不做贅述。

3)Dapr不是微軟的雲服務:它能幫助開發者在雲端搭建微服務應用,現在它不光能支持集成在Azure雲,而且還支持其他雲商,比如AWS,GCP,其他等。Dapr運行在K8s上的效果都一致。

4. Dapr的架構

Dapr一開始就被設計為一組可插拔的構建模塊(building blocks):

開發者可以通過底層支持服務搭建新應用,而運維者可以采用簡單的更改配置項來運維應用程序。

如下是一個Dapr的工具和組件的詳細列表:

1)Dapr CLI:一個跨平台的命令行工具,可以配置管理監控Dapr環境。也可以在本機debug Dapr應用程序。

2)Dapr API:定義應用與Dapr之間的交互,以便於利用其公用的構建模塊

3)Dapr runtime:這是Dapr的核心邏輯,它實現了API的接口。如果你是一個有好奇感的人,你可以去github倉庫去看一下這塊源碼是怎么設計的:https://github.com/dapr/dapr

4)Dapr host:在你本機的開發環境,host主機作為一個獨立的進程運行,在K8s上,在你應用程序Pod里這塊作為一個邊車容器運行。

5)Dapr operator:特定於K8s模式,運維人員管理綁定關系與配置相關。

6)Dapr邊車注入器:在K8s模式下一旦被構建啟動,這個注入器就會以邊車的形式運行在你的應用程序Pod內。

7)Dapr搭建服務:此服務的目的是分發Dapr容器里面的Actor實例。

8)Dapr安全:Dapr使用內置證書機制來管理服務之間的mTLS協議。

Dapr提供了很多構建模塊,微服務開發者可以有選擇的按需選取:

1)服務調用:服務之間的調用可以讓你的代碼可以去訪問在相同host環境下的其他服務,同時注意重試策略。(第三章介紹服務調用)

2)狀態管理:為了可以支持后端使用有狀態或無狀態服務,狀態管理提供了一套簡單有效的管理狀態的k-v鍵值對。Dapr可以提供多種存儲介質,包含redis、Azure CosmosDB, Azure SQL Server, PostgreSQL,這些都是可以通過配置文件插拔式使用(第四章介紹狀態管理)

3)發布訂閱消息:發布訂閱模式是通過依賴servicebus中消息在微服務之間發布消費的方式實現的。(第五章介紹發布訂閱)

4)資源綁定:這就是消息驅動的亮點:通過Twilio(貌似是消息發送者)發送一個SMS消息就能觸發你的應用程序,做到資源綁定中的弱關聯。(第六章介紹資源綁定)

5)Actors:actor模型的目的是通過使用大量的計算單元拆分高並發,大吞吐量的請求。小的計算單元是比較小但是獨立運行獨立空間的進程。(第七章介紹使用Actors)

6)監控:Dapr可以讓開發者與運維人員很好的監控系統應用的行為而不用深入侵入進去(第九章介紹追蹤Dapr應用)

7)安全:這是一個通用的需求,一個健康的微服務就要必須將自己的代碼放置在一個安全的環境中,包括在開發環境使用了線上的連接串等,這些Dapr都可以使用安全組件實現。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM