做者 | Dapr 社區
譯者 | 敖小劍
來源|阿里巴巴雲原生公衆號git
Dapr 是 2019 年 10 月開源的分佈式運行時。早在 Dapr 開源初期,阿里雲就開始參與 Dapr 社區建設和代碼開發,目前已有兩位 Dapr 成員,是 Dapr 項目中除微軟以外代碼貢獻最多的公司。做爲 Dapr 項目的早期採用者,阿里在 Dapr v1.0 發佈以前就在內部小規模的試點。本文由 Dapr 社區成員敖小劍翻譯。github
今天,咱們很高興地發佈分佈式應用運行時(Distributed APplication Runtime / Dapr)的 v1.0 版本,它已經達到了生產就緒所需的穩定性和企業準備。Dapr 是一個開源、可移植、事件驅動的運行時,它使開發人員可以輕鬆地構建運行在雲平臺和邊緣的彈性而微服務化的應用程序,不管是無狀態仍是有狀態。Dapr 讓開發人員可以專一於編寫業務邏輯,而不是解決分佈式系統的挑戰,從而顯著提升生產力並減小開發時間。Dapr 下降了基於微服務架構構建現代雲原生應用的准入門檻,而經過這次發佈的 v1.0 版本,Dapr 應用能夠部署到生產場景中的自託管基礎設施或 Kubernetes 集羣。編程
自 2019 年 10 月首次發佈 以來,Dapr 已有 14 個版本,每一個版本都創建在大量的社區和用戶反饋基礎上,以推進改進、穩定性和性能。這些版本立足於構建真實的應用,反映了當今開發者在開發雲原生應用時的實際狀況;不管是在雲平臺、邊緣仍是私有基礎設施上,社區都在加緊貢獻與 Azure、AWS、阿里巴巴和 Google cloud 集成的 Dapr 組件。後端
從成立之初開始,Dapr 開源項目就面向那些正在構建新的現實世界綠色地帶(greenfield)應用的開發者,以及那些在雲原生架構中遷移和利用現有應用和組件的開發者。Dapr 方法的關鍵是知足開發者和企業的現狀,幫助他們實現應用的現代化,並利用他們在雲原生和微服務架構中的現有技能。在 v1.0 版本中,咱們專一於將 Kubernetes 做爲運行生產應用的主要託管環境,隨着 Dapr 的進一步成熟,咱們但願在無服務器(serverless)環境中看到 Dapr。在過去的一年半時間中,咱們與早期採用者和合做夥伴緊密合做,所以 Dapr 如今已經成爲多個基於 Kubernetes 的生產和預生產應用的核心。在這個用戶驅動的過程當中,Dapr 社區改進了 Java、.NET 和 Python SDK 的原生語言體驗,用真實的工做負載測試了規模和性能,增長了安全特性,並證實了 Dapr 的 Actor 編程模型是工做流和物聯網(IoT)場景的最佳選擇。如下是一些早期採用者的故事,以凸顯 Dapr 現在的使用狀況。安全
ZEISS 面臨的挑戰是維護和更新一個具備 20 年曆史的帶有硬編碼業務規則的後端系統。原來的訂單驗證和路由解決方案是基於一個具備固定容量的單體架構,開發人員在不直接在系統中從新配置表格的狀況下,沒法輕鬆的更新、從新路由或跟蹤訂單。此外,業務部門沒法直接控制其訂單處理流程。因爲存在大量的系統依賴,變動老是須要代價高昂而耗時的開發人員干預。爲了解決這個問題,ZEISS 使用 Azure 和 Dapr 開發了一個新的應用程序,能夠更快地完成客戶訂單,同時還加快了開發速度,並改善了公司的業務連續性。你能夠在 這裏 閱讀更多關於他們的故事。服務器
Ignition Group 打造的訂單處理軟件能夠跟蹤產品、管理訂閱和處理來自各類來源的支付。訂單處理涉及許多依賴,有一個採購跟蹤機制,這個機制會調用客戶訂閱,觸發會計和計費流程,並肯定適當的支付渠道。Ignition Group 但願微服務能給其工做流邏輯帶來好處——高可用性、彈性、可擴展性和性能。使用 Dapr 和 .NET Core,Ignition Group 構建了一個新的、可擴展性更好的、可維護的訂單處理和支付系統,該系統目前已在生產中運行。Ignition Group 今天已經運行在生產中,你能夠在 這裏 閱讀更多關於他們的故事。網絡
Roadwork 是一家爲自主系統提供端到端平臺的初創公司,讓用戶產生可執行的洞察力並據此行動。目前,他們專一於數據提取技術,並以全面集成自主系統爲路徑。經過對 Dapr 與 KEDA 的梳理,他們在 Kubernetes 上建立了一個生產服務,根據傳入的客戶負載請求,自動擴展應用和集羣。Dapr 提供了使用 RabbitMQ 的 pub/sub 的抽象和集成,其可以輕鬆擁有 競爭消費者模式。今天,Roadwork 的第一個產品 Scraper.ai 已經在生產中運行。在 這裏 瞭解更多信息。架構
是社區的努力讓 Dapr 成長到 v1.0。自 Dapr 首次公佈以來,開源社區團結在 Dapr 周圍並不斷成長,使人驚歎——從 2019 年 10 月的 114 個貢獻者增加到今天的 700 個。在短短的 16 個月內,增加了 6 倍多!app
社區對項目的貢獻涉及到 Dapr 的每個倉庫,範圍包括提交問題、參與功能提案討論、提供樣本,固然也包括貢獻代碼。社區成員對項目貢獻最大的部分包括 Dapr 運行時、文檔、CLI 和 SDK。另一個關鍵的貢獻領域是建立了一個豐富的組件生態系統。可供開發人員使用的組件超過 70 個,使 Dapr 成爲一個能夠適用於普遍場景的解決方案,包括開源技術和雲提供商的特定集成。當開發人員但願建立具備高可移植性的雲平臺無關的應用程序時,這些使得 Dapr 成爲一個有吸引力的選擇。框架
貢獻並不侷限於我的,還包括阿里雲、HashiCorp、微軟等組織,以及上文提到的 ZEISS 和 Ignition Group 等早期採用者。Dapr 生態系統還包括合做夥伴的技術棧,這些技術棧爲使用 Dapr 的開發者提供了附加值。例如,New Relic 提供了關於他們的監控工具如何與 Dapr 無縫工做的指導,這要歸功於 Dapr 使用的標準跟蹤協議,這些協議能夠在不改變任何代碼的狀況下輕鬆地檢測您的應用程序。
培養一個開放和包容的社區是 Dapr 項目的首要目標。做爲該承諾的一部分,咱們分享了 向開放治理模式的過渡,這也是咱們保持 Dapr 開放、供應商中立和包容性的方式。咱們的願景是繼續這一旅程,並打算在不久的未來讓 Dapr 加入一個開放軟件基金會。同時,咱們邀請您經過 GitHub、Dapr 社區按期會議 和最近推出的 Discord 服務器 與 Dapr 社區互動。
"在阿里雲,咱們相信 Dapr 將引領微服務的發展。經過採用 Dapr,咱們的客戶如今能夠以更快的速度來構建可移植和健壯的分佈式系統。"
—— 阿里雲資深技術專家 李響
在最近的幾個月中,咱們已經發布了三個 v1.0 版本的候選版本,專一於從社區得到反饋,併爲 v1.0 版本作準備。在性能、安全、高可用性(HA)和一致性等方面更深刻地關注於生產就緒。完整的發佈說明能夠在 這裏 得到,如下是一些亮點:
對於 v1.0 版本,Kubernetes 是首選的託管環境,它與 Dapr 控制平面和 Dapr sidecar架構深度集成。例如,在運維上,經過 Dapr CLI "init" 和 "upgrade" 命令簡化了 Dapr 在 Kubernetes 上的安裝和升級,這些命令能夠拉取正確的 Dapr 運行時版本,並確保這些版本以受控的方式推出,包括遷移正在使用中的證書。您能夠在 HA 模式下安裝 Dapr 控制平面,確保多個實例同時運行,並且 Dapr sidecar 有一個健康端點,能夠實現 Kubernetes 就緒(readiness)和活潑度(liveness)探針以肯定其健康狀態。在整個發佈候選版本的過程當中,咱們與早期採用者密切合做,以確保他們可以以可運維的方式遷移到每一個 Dapr 運行時版本,而不是構建新的集羣。請參閱 生產部署指南 以瞭解更多信息。
在雲原生應用中,性能是相當重要的,而 Dapr 對高性能很是重視。一個常常被提起的話題是,由 sidecar 模型爲應用程序完成全部繁重工做所帶來的影響,以及數據平面性能的權衡取捨。其中一個特別關注的領域是服務調用構建塊,在這裏,當經過兩個 Dapr sidecar 在兩個應用之間調用並收到響應時,Dapr 在 p90 時增長了約 1.2ms 的端到端延遲,在 p99 時增長了約 2ms。因而可知,Dapr 具備極低的服務間延遲,並針對高吞吐量場景進行了優化。
Dapr 有超過 70 個由社區開發的組件,爲了確保對這些組件的使用信心,它們要通過一系列的一致性測試。組件首先從 alpha 狀態開始,最終達到 GA 狀態,並須要用戶在生產中使用它們。對於 v1.0 版本,只有部分已經在生產中普遍使用的組件被批准爲 GA,其餘組件在知足標準後也將加入其中。與衆多開源雲原生技術同樣,變動、修復和改進的引入速度很快,這意味着受支持版本存在滾動窗口。重要的是,Dapr v1.0 版本宣稱 API 層面是穩定的,若是將來須要修改,將經過 版本機制 來保證 API 的徹底向後兼容,若是須要破壞性的修改,則會提早幾個版本註明。最後,從支持的角度來看,當前和以前的版本都將支持 在出現關鍵問題或安全問題時進行補丁更新。
安全一直是 Dapr 的核心主題,由於咱們已經認識到基於微服務架構構建安全的現代分佈式應用的複雜性,而 Dapr 已經經過了多項獨立的安全審計。爲了抵禦應用程序之間的中間人***,您須要進行加密,而 Dapr 經過其控制平面服務發出的 x.509 證書提供加密,這些證書會自動更新和滾動。爲了提供對資源的訪問控制,如狀態存儲、密鑰、服務間調用,或發佈/訂閱特定主題的能力,您須要細粒度的訪問控制策略(ACL)。當使用 spiffe 做爲身份標準訪問資源時,Dapr 提供了普遍的 ACL。當運行應用程序時,您能夠將這些應用程序隔離在不一樣的命名空間中,以便進行運維部署和隔離。這些普遍的安全能力在下圖中顯示,這裏有三個利用 Dapr 安全特性的微服務:
Dapr 以其編程語言、框架和工具擁抱全部的開發者社區。Dapr 被設計爲能夠經過 HTTP 和 gRPC 協議從任何編程語言中使用,這意味着您不須要在編譯時包含任何依賴關係。固然,爲了改善開發者的原生語言體驗,Java、.NET、Python 和 Go 的 SDK 也以 v1.0 生產就緒的形式發佈,這反映了它們在社區和組織中的成熟應用。這些 SDK 可讓您做爲開發者,使用您最喜歡的開發環境,如 VS Code 或 IntelliJ。JavaScript/Node.js、C++、Rust 和 PHP 的 SDK 目前處於預覽階段,隨後將發佈 v1.0 版本。PHP SDK 包括對 Actor 的支持,這是社區爲 Dapr 普遍且不斷增加的編程語言列表作出貢獻的一個極佳的例子。
經過這個 v1.0 版本,咱們爲構建現代雲原生應用所需的基本構建塊奠基基礎的旅程纔剛剛起步。社區驅動意味着社區將在將來的版本中設定項目的優先級,其中許多優先級已經被投票經過。例如,加強現有構建塊的亮點,包括在狀態管理中使用 OData 查詢和過濾多個值的能力。在 pub/sub 中,支持 CloudEvents v1.0 過濾功能,以根據消息內容過濾出用戶感興趣的事件。在可觀測性方面,提供一個 API 用於 從應用中追蹤事件,防止您不得不綁定到特定的監控類庫,並使 actor 可以直接訂閱 pub/sub 事件,從而開啓了豐富的事件驅動場景。
新的構建塊提案包括用於讀寫應用程序配置數據的配置 API,例如來自 Azure Configuration Manager 或 GCP Configuration Management。領導者選舉構建塊,提供建立單例實例、同步或鎖定語義能力。用於網絡級服務調用的透明代理構建塊,使您可以根據 URL 或 DNS 地址來路由消息,以及用於熔斷器、隔離艙和超時等模式的更多彈性構建塊。
最後,在 v1.0 版本中,Dapr 集成了多個開發者框架,包括 ASP.NET Core、Java Spring Boot、Azure Functions 和 Logic Apps,而咱們認爲這還將繼續,更多的開源框架如 Django、Nodejs 和 Kyma 都是潛在的例子。此外,考慮到 Dapr 的託管平臺獨立性,在虛擬機、邊緣平臺(如 Azure Stack Hub 或 AWS Outpost)和其餘分佈式系統平臺上提供對 Dapr 控制平面一流的支持,能夠實現應用的可移植性。
咱們但願您能試用 Dapr v1.0。您可使用文檔中的 入門指南 進行學習,而後經過 快速入門 來深刻了解。若是你須要更多信息,樣本庫 是 Dapr 社區捐贈的不一樣的應用程序的展現。Dapr 文檔 docs.dapr.io 是全面的指南,還有幾本書,包括《 Learning Dapr》、《使用 Dapr 和 .NET 實踐微服務》以及最新發布的免費電子書《Dapr for .NET 開發者》。若是您有任何疑問,遇到問題或想與社區的其餘成員交流,Dapr 社區隨時在 Discord 上歡迎您的到來。
對於 Dapr 來講,v1.0 版本的發佈只是一個開始,在這個過程當中,咱們感謝並鼓勵您的持續幫助、反饋和貢獻。不管是編寫新的組件,提出建議,貢獻新的構建塊,仍是加強您最喜歡的語言的 SDK,咱們都但願聽到您的意見並與您一塊兒參與。在這個微服務開發的時代,做爲一名開發者,這是一個使人興奮的時刻,Dapr 將釋放您的生產力和創造力,輕鬆構建現代化的分佈式應用。咱們很是高興的看到您繼續使用這個項目,看到您使用它進行構建,並對 Dapr 的發展保持關注。
英文原文來自 Dapr 官方網站博客文章 Announcing Dapr v1.0。
譯者所在的阿里云云原生團隊深度參與了 Dapr 1.0 的開發,同時也正在內部小規模的試點 Dapr ,稍後將分享阿里雲在 Dapr 上的實踐。
文中提到的 《 Learning Dapr》 一書,譯者所在的團隊正在翻譯中,預計很快就將出版發行,歡迎關注。
敖小劍,資深碼農,十九年軟件開發經驗,微服務專家,Service Mesh 佈道師,Servicemesher 社區聯合創始人。專一於基礎架構,Cloud Native 擁護者,敏捷實踐者,堅守開發一線打磨匠藝的架構師。曾在亞信、愛立信、惟品會、螞蟻金服等任職,對基礎架構和微服務有過深刻研究和實踐。目前就任於阿里云云原生應用平臺從事 Service Mesh、Serverless、Multiple Runtime 等雲原生產品設計和開發。