Dapr-簡介及環境搭建

chaney1992發表於2021-10-17

一、Dapr是什麼?

 Dapr 是一個可移植的事件驅動的執行時,它使任何開發人員能夠輕鬆構建出彈性的、無狀態和有狀態的應用程式,並可執行在雲平臺或邊緣計算中,它同時也支援多種程式語言和開發框架。

 

 在上圖的第一行中,Dapr 為常見開發平臺提供特定於語言的 Sdk。 Dapr 1.0 版包含對go、Node.js、Python、.NET、Java 等的支援。

 儘管語言特定的 Sdk 增強了開發人員體驗,但 Dapr 不限平臺。 在後臺,Dapr 的程式設計模型通過標準 HTTP/gRPC 通訊協議公開功能。 任何程式設計平臺都可以通過其本機 HTTP 和 gRPC Api 呼叫 Dapr。

 圖中心的藍色框表示 Dapr 構建基塊。 每個都公開您的應用程式可以使用的分散式應用程式功能。每個構建塊都是獨立的,這意味著您可以採用其中一個、多個或全部來構建應用

 Dapr體系結構:

  • 構建基塊:可通過標準 HTTP 或 gRPC API 訪問的模組化最佳實踐

  構建塊解決了構建彈性微服務應用程式中的常見挑戰,並編纂了最佳實踐和模式。 Dapr由一組構建塊組成,並且具有可擴充套件性以新增新的構建塊。

  構建基塊從服務中抽象出分散式應用程式功能的實現:

    

  以下是 Dapr 提供的構建塊型別:

構建塊終結點說明
服務呼叫 /v1.0/invoke 服務呼叫使應用程式能夠通過 Http 或 gRPC 訊息形式相互通訊。 Dapr 提供了一個終結點,它充當反向代理與內建服務發現的組合,同時內建分散式跟蹤和錯誤處理。
狀態管理 /v1.0/state 應用程式狀態是應用程式想要保留在單個會話之外的任何內容。 Dapr 提供基於鍵 / 值的狀態 API ,使用可插拔的狀態儲存進行持久化。
釋出訂閱 /v1.0/publish /v1.0/subscribe 釋出/預訂是鬆散耦合的訊息傳遞模式,傳送方 (或釋出者) 將訊息推送到訂閱者預訂的主題。 Dapr 支援應用程式之間的釋出/訂閱模式。
資源繫結 /v1.0/bindings 繫結提供一個外部雲與本地服務或系統的雙向連線。 Dapr 允許您通過 Dapr 繫結 API 呼叫外部服務,也可以通過已連線的服務傳送的事件來觸發應用程式。
Actors /v1.0/actors 參與者是孤立的獨立計算單元,具有單執行緒執行。 Dapr提供了基於Virtual Actor模式的actor實現,該模式提供了單執行緒程式設計模型,並且在不使用actor時會對其進行垃圾回收。
可觀測性 Dapr 系統元件和執行時記錄 metrics,log 和 trace 以除錯,操作和監視 Dapr 系統服務,元件和使用者應用程式。
祕密 /v1.0/secrets Dapr 提供一個機密構建塊 API ,並與 Azure Key Vault 和 Kubernetes 等機密商店整合,以儲存機密。 服務程式碼可以呼叫金鑰 API 從 Dapr 支援的金鑰儲存中檢索金鑰。
  • 元件:被用於構建塊和應用程式的模組化功能

   Dapr 使用模組化設計,將功能作為元件來提供。 每個元件都有介面定義。 所有元件都是可插拔的,因此您可以將元件換為另一個具有相同介面的元件。

   Dapr 提供了以下元件型別:

元件型別
元件說明
服務發現 由服務呼叫構建基塊用來與宿主環境整合以提供服務到服務發現。
State 提供一個統一介面,用於與各種狀態儲存實現進行互動。
Pub/sub 提供一個統一介面,用於與各種訊息匯流排實現進行互動。
繫結 提供一個統一介面,用於從外部系統觸發應用程式事件,並呼叫具有可選資料有效負載的外部系統。
中介軟體 允許自定義中介軟體插入請求處理管道,並針對請求或響應呼叫其他操作。
機密儲存 提供用於與外部機密儲存(包括雲、邊緣、商業、開源服務)互動的統一介面。
  • Sidecar 體系結構

   Dapr 通過 sidecar 體系結構 公開其 構建基塊和元件。 Sidecar 使 Dapr 能夠與服務一起在單獨的記憶體程式或單獨容器中執行。 Sidecar 提供隔離和封裝,因為它們不是服務的一部分,但已連線到該服務。 這種分離使每個 都擁有自己的執行時環境,並基於不同的程式設計平臺進行構建

  

  • 託管環境

   Dapr可以託管在多個環境中,包括在Windows/Linux/macOS機器上自託管和Kubernetes

    • 自託管

     Dapr 執行一個單獨的 sidecar 程式,在您的服務程式碼中可以通過 HTTP 或 gRPC 呼叫它。 每個執行的服務都有一個 Dapr 執行時程式 (或 sidecar) ,配置為使用狀態儲存, pub/sub,繫結元件和其他構建塊。

     

    • 容器環境託管

     在託管在容器環境中(如 Kubernetes),Dapr 作為 sidecar 容器執行,和應用程式容器在同一個 pod 中。     

二、Dapr能幹什麼?

 開發人員習慣於 Web + 資料庫應用架構(例如經典 3 層設計),但對天然支援分散式的微服務應用架構卻感覺陌生。 成為分散式系統專家很難,並且你也不需要這麼做。 開發人員希望專注於業務邏輯,同時希望平臺為其提供可伸縮的、彈性的、可維護的和雲原生架構的其他功能。

 這就是Dapr所要解決的。 Dapr 將構建微服務應用的 最佳實踐 設計成開放、獨立和模組化的方式,讓你能夠使用任意的開發語言和框架構建可移植的應用程式。 每個構建塊都是完全獨立的,您可以採用其中一個、多個或全部來構建你的應用。

 此外,Dapr 是和平臺無關的,這意味著您可以在本地、Kubernetes 叢集或者其它整合 Dapr 的託管環境中執行應用程式。 這使得您能夠在雲平臺和邊緣計算中執行微服務應用。

 使用 Dapr,您可以使用任何語言、框架輕鬆構建微服務應用,執行在任何地方。

 Dapr 的核心是幫助降低分散式微服務應用程式固有的複雜性。 它基於構建基塊 API 的概念而構建。 Dapr 構建基塊公開常見的分散式應用程式功能,例如狀態管理、服務到服務呼叫和釋出/子訊息傳送。 Dapr 元件位於構建基塊下面,併為每項功能提供具體實現。 應用程式通過配置檔案繫結到各種元件

三、Dapr環境安裝?

  • 安裝Dapr CLI腳手架工具

   Dapr CLI 是您用於各種 Dapr 相關任務的主要工具。 您可以使用它來執行一個帶有Dapr sidecar的應用程式, 以及檢視sidecar日誌、列出執行中的服務、執行 Dapr 儀表板。 

   後續案例將使用windows 下的自託管模式進行驗證。

   1.下載最新dapr包:釋出包 ;下載後解壓到指定目錄;並新增到環境變數中。

   2. 檢查dapr是否安裝成功,在命令列中輸入:

dapr

    返回結果為以下結果則安裝成功:

     

  • 初始化Dapr執行環境

   Dapr 與您的應用程式一起作為sidecar執行,在自託管模式下,這意味著它是您本地機器上的一個程式。 因此,初始化 Dapr 包括獲取 Dapr sidecar 二進位制檔案並將其安裝到本地.

   此外,預設初始化過程還建立了一個開發環境,幫助簡化 Dapr 的應用開發。 這包括下列步驟:

  1. 執行一個用於狀態儲存和訊息代理的Redis容器例項
  2. 執行一個用於提供可觀察性的Zipkin容器例項
  3. 建立具有上述元件定義的 預設元件資料夾
  4. 執行用於本地演員支援的Dapr placement服務容器例項

   初始化

dapr init

--輸出
Making the jump to hyperspace...
Installing runtime version 1.4.3
Downloading binaries and setting up components...
Downloaded binaries and completed components set up.
daprd binary has been installed to C:\Users\cwsheng\.dapr\bin.
dapr_placement container is running.
dapr_redis container is running.
dapr_zipkin container is running.
Use `docker ps` to check running containers.
Success! Dapr is up and running. To get started, go here: https://aka.ms/dapr-getting-started

  檢查版本:

dapr -v                                                                                         
--輸出
CLI version: 1.4.0
Runtime version: 1.4.3

  檢視容器執行:

//命令
docker ps   
                                                                                    
//輸出
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS                   PORTS                                                 NAMES
11590b26a82d   daprio/dapr:1.4.3   "./placement"            3 minutes ago   Up 3 minutes             0.0.0.0:6050->50005/tcp, :::6050->50005/tcp           dapr_placement
69127c7c31bc   redis               "docker-entrypoint.s…"   8 minutes ago   Up 8 minutes             0.0.0.0:6379->6379/tcp, :::6379->6379/tcp             dapr_redis
2a6305446b0e   openzipkin/zipkin   "start-zipkin"           8 minutes ago   Up 8 minutes (healthy)   9410/tcp, 0.0.0.0:9411->9411/tcp, :::9411->9411/tcp   dapr_zipki

  驗證元件目錄已初始化:

explorer "%USERPROFILE%\.dapr\"

   會看到以下目錄:

   

 到此,dapr 環境已安裝完成。

總結:    

 Dapr,就是一種分散式應用程式執行時。

相關文章