Dapr是一個可移植,事件驅動的運行時。它使開發人員簡單地去構建運行在雲和edge上彈性、無狀態和有狀態的應用,而且包含多種語言和開發人員框架。html
今天,咱們正在經歷一波雲應用浪潮。開發人員熟悉web +數據庫應用程序架構(例如經典的3層設計),但不熟悉本質上是分佈式的微服務應用程序架構。成爲分佈式系統專家很難,你也不該該這樣作。開發人員但願專一於業務邏輯,同時依靠平臺爲他們的應用程序注入伸縮性、彈性、可維護性、彈性和其餘本地雲架構的屬性。web
這就是Dapr的用武之地。Dapr將構建微服務應用程序的最佳實踐編入開放的、獨立的構建塊中,使您可以使用本身選擇的語言和框架構建可移植的應用程序。每一個構建塊都是徹底獨立的,您能夠在應用程序中使用其中的一個、一些或所有。數據庫
此外,Dapr與平臺無關,這意味着您能夠在任何Kubernetes集羣和其餘與Dapr集成的託管環境上本地運行應用程序。這使您可以構建能夠在雲和edge上運行的微服務應用程序。安全
在設計微服務應用程序時須要考慮不少因素。在構建開發人員能夠以標準方式使用並部署到任何環境的微服務應用程序時,Dapr爲通用功能提供了最佳實踐。它經過提供分佈式系統構建塊來實現這一點。架構
每一個構建塊都是獨立的,這意味着您能夠在應用程序中使用其中的一個、部分或所有。在這個dpr的初始版本中,提供瞭如下構建模塊:併發
構建塊(Building Block)框架 |
描述分佈式 |
Service-to-Service invocation (服務間調用)ide |
彈性的服務間調用,支持方法調用,包括重試,不管遠程服務位於受支持的託管環境中哪一個位置微服務 |
State management (狀態管理) |
有了用於存儲鍵值對的狀態管理,就能夠在應用程序中輕鬆編寫無狀態服務和長時間運行的、高可用的有狀態服務。狀態存儲是可擴展的,包括Azure CosmosDB、Azure SQL Server、PostgreSQL、AWS DynamoDB或Redis等。 |
Publish and subscribe (發佈和訂閱) |
發佈事件以及訂閱主題 |
Resource bindings (資源綁定) |
帶有觸發器的資源綁定進一步構建在事件驅動的架構上,經過接受和發送事件到任何外部源(例如數據庫、隊列、文件系統等),以實現伸縮與彈性。 |
Actors |
一種用於有狀態和無狀態對象的模式,經過方法和狀態封裝使併發變得簡單。 Dapr在其參與者運行時中提供了許多功能,包括併發性、狀態、參與者激活/去激活的生命週期管理以及喚醒參與者的計時器和提醒。 |
Observability (可觀察性) |
Dapr 傳輸指標、日誌和跟蹤,以調試和監視Dapr和用戶應用程序。Dapr支持分佈式跟蹤,使用W3C跟蹤上下文標準和將開放遙測技術發送到不一樣的監控工具,從而方便地診斷和服務生產中的服務間調用。 |
Secrets (隱私) |
Dapr提供隱私管理,並與公共雲和本地祕密存儲集成,以檢索用於應用程序代碼的隱私 |
Dapr將其API公開爲sidecar體系結構,能夠做爲容器、也能夠做爲進程,不須要應用代碼包含任何的dapr運行時代碼。
Dapr能夠託管寄宿在多個環境下,包括用於本地開發的自託管,或是部署到VM,K8S、Azure IOT edge等環境中。
在自託管模式下,Dapr做爲隔離的side-car進程運行,你的服務代碼能夠經過HTTP或是gRPC調用。在自託管模式下,你也能夠將Dapr部署在一組VM上。
能夠將Dapr配置爲在本地開發人員機器上以自託管模式運行。每一個正在運行的服務都有一個Dapr運行時進程(或sidecar),它被配置爲使用狀態存儲、發佈/訂閱、綁定組件和其餘構建塊。您可使用Dapr CLI在本地機器上運行啓用了Dapr的應用程序。
在容器託管環境下,例如K8S,Dapr做爲side-car容器運行與應用容器在相同的pod上。
能夠將Dapr配置爲在任何Kubernetes集羣上運行。在Kubernetes中,Dapr-sidecar注入器和Dapr-operator 服務提供了一流的集成,將Dapr做爲一個sidecar容器做爲服務容器在同一個pod中啓動,並提供Dapr組件更新到集羣中的通知。Dapr -sentry服務是一個證書頒發機構,它支持Dapr sidecar實例之間的相互TLS,以實現安全數據加密。