有關譯者:陳東海(seachen),?前就職于騰訊,同時在社區也是?名Dapr Member.
導語:在SDLC(Software Development Lifecycle軟件開發?命周期中),絕?多數CNCF項?都是專注于軟件開發的中后期階段,特別是運維和可觀測性??。?很少有CNCF項?專注于早期階段。?Dapr就是在軟件開發的早期階段,幫助開發者提??產?。
作者 | 原?標題 | 發布時間 |
Bilgin Ibryam | Top Three Use Cases for Dapr and Kubernetes | 2022.12.20 |
適合閱讀?群:研發童鞋以及云原?產品童鞋。
內容摘要(若感興趣,再讀原?,閱讀原文可以到達):
1.?多數IT項?,都是來源于增加收?、降低成本和降低?險三個業務?標;由此推導出產?的三個副作?,分別是多語?、多負載和多環境的?持。并以此作為XYZ三維坐標軸,提出問題和分析問題;并引出云原?;
2.了解SDLC(軟件開發?命周期)不同階段的CNCF項?,往往都聚焦于中后期的應?運維,?較少地關注如何創建應?并提?開發者的?產?。?Dapr就是這樣的?款產品;
3.從集群上、集群外和多集群的三個案例,來分析Dapr如何與Kubernetes互補來幫助開發者開發出云原?應?。
---------------以下是譯者想告訴讀者的------------------
Bilgin Ibryam之前是Red Hat的產品經理和架構師。他在2020年寫過《?Multi-Runtime?Microservices Architecture》??,?章中的分布式原語(distributed primitives)就是這位童鞋提出來的。Dapr社區開源產品和他提出的這個理念?常契合,2022年中旬了解到Dapr后并迅速加?了diagrid?型創業公司。?前在該公司擔任產品經理,?diagrid公司是由兩位前微軟童鞋?Mark Fussell(現任CEO)和Yaron Schneider(現任CTO)在2021年底創辦的。
diagrid公司融資詳情:Diagrid Emerges from Stealth with $24.2 Million in Funding, Launches Fully Managed Dapr for Kubernetes
由?Dapr?和?KEDA(Kubernetes Event-Driven Autoscaling)創始??Mark Fussell?和?Yaron
Schneider?創辦的?Diagrid?最近獲得?2400?萬美元融資。投資?陣容?分強?,包括?Kubernetes?聯合創始??Joe Beda、Buoyant CEO William Morgan(這?是開創性地提出了服務?格(Service Mesh)概念,其著名的開源項?Linkerd)筆者最早在2016年使?(java開發,?向服務治理的代理),?Azure CTO Mark Russinovich,前Atlassian CTO Sri Viswanath,以及前?Heroku?CEO Adam Gross。?
-----------------以下是譯?-------------------------
Kubernetes已經成為運?分布式應?的事實標準,?論它們是集群上的、集群外的還是多集群的。但是Kubernetes并沒有為業務開發者提供很多好處,也沒有為?多數其他CNCF項?提供好處。但是也有例外,新的CNCF項?(例如Dapr(孵化中))正在提?開發者的?產?,讓業務開發變得簡單。在這篇?章中,我們將探索前三個案例,以展示Kubernetes也可以擴展新的運營領域,以及為什么Dapr是最適合開發者的Kubernetes伙伴。
技術擴散阻礙?產?
如果我們從較?的層?看?下?多數IT項?,它們都屬于以下類別之?:增加收?、降低成本或降低?險。在您的組織中,您可能有這三者的變體,例如提?客戶滿意度、減少客戶流失等,但它們?致屬于同?類。有多種?法可以實現這些?標,這?我挑選了?些作為示例,但對于您的組織??,這些?法的順序會有所不同。
業務?標與副作?
您可決定采??些很新很酷的開源機器學習技術,并利?它開發?些創新服務來增加收?。您可以通過迭代開發實踐和較?的開發單元(如微服務)按時更新軟件來降低合規?險。裁員并不是性價?最?的?式,在公司內部或者?團隊內并不是所有事情都需要親?親為,?是通過?動化,采?云和SaaS服務的?式來實現軟件?命周期的全流程管理,這樣性價?更?。但后果總是有的,您意識到機器學習最流?的語?是Python,Javascript是Web開發的最佳語?,Java?于桌?,Swift?于移動終端,C++?于IoT應?等等,您最終會在組織內使?多種語?。
然后您意識到您必須運維微服務、函數、單體服務以及介于這兩者之間的許多其他應?。?且您必須在本地和?個或多個云上執?此操作。從組織層?來看,所有這些都導致了同時發?多個維度的技術擴散。
技術擴散對開發和運維的影響
序號 | 英? | 譯? |
1 | How to do reliable service invocation? | 如何可靠地執?服務調?? |
2 | How run heterogeneous workloads consistently? | 如何?致性地運?異構的?作負載? |
3 | How to connect 3rdparty services? | 如何連接第三?服務? |
4 | How to provision and automate hybrid ?infrastructure uniformly? | 如何統?地配置和?動化混合基礎設施?(這個翻譯 怪怪的),?概含義就是在混合基礎設施環境下,如 何通過配置來統?部署 |
5 | How to do pub/sub with DLQx in language X? | 如何?任意?種語?處理帶死信隊列的消息發布與 訂閱? |
6 | How to package and distribute polyglot apps ?consistently? | 如何?致性地打包和分發多語?應?? |
技術擴散不同程度地影響著不同的團隊。僅僅使?Python,您就可以有??的數據科學團隊,但是這個平臺的?程團隊必須為使?不同語?的多個團隊提供構建和打包?具。您可能有新創建的微服務,它們遵循12-factor原則。但是運維團隊可能還必須照顧單體應?,以及不斷增加函數的實例。您的基礎設施團隊必須創建?動化以遵循多個云和本地部署上進?配置。
平臺和運維團隊的挑戰在于如何保證許多團隊之間的?致性和統?性,開發團隊的挑戰在于其團隊內部的?產?。通常,開發團隊使?某些語?(例如:java和.net,他們更適合創建分布式應?,和可以連接到各個SaaS端點的應?),?使?不同語?的其他團隊往往是孤?的,他們并不能從豐富的云原??態系統中受益。這些團隊不能復?相同的?具和模式來解決常?問題。應對技術擴散帶來的這些挑戰,答案是什么??個答案就是成為云原?,這是CNCF定義的?式以及那?不斷增?的項??態系統。
開發者的期望仍未得到滿?作為?名前開發?員,我決定檢查哪些CNCF項?,可以幫助開發者編寫代碼并實現云原?應?。我粗略地繪制了SDLC階段(全稱:Software Development Lifecycle軟件開發?命周期),并將它們放在所有已畢業的CNCF項?中,趨勢很明顯。沒有任何?個已畢業的CNCF項?可以幫助軟件開發的早期階段。我也增加了孵化中的CNCF項?,專注于運維和可觀測性應?的趨勢更加強烈。如下圖所示:
在軟件開發?命周期中的CNCF項?
該圖不是完整的,它不能完全代表?態系統中的所有變化。例如:這?有些是聚焦運?時的項?,也幫助了開發者。例如,可觀測性?具總是提供SDK。Knative serving為運?應?提供?動伸縮和藍綠發布功能,?Knative eventing幫助開發者實現事件驅動的應?。與此同時,?論是Kubernetes,?代理還是基于eBPF的linux內核,任何以前屬于應?層的分布式系統職責也正在通過eBPF轉移到基礎設施層。但是總體來說,所顯示的趨勢是準確的,CNCF項?的重點仍然是運維應?,?不是創建應?。好消息是這?有新的項?,例如:Dapr和其他針對開發者的項?,并專注于實現適應云原?環境的應?。
接下來,我們將研究三個具體的?例,其中?Kubernetes正在成為部署和運維應?的事實標準,?Dapr使開發者能夠實現云原?應?,并以云原??式使?基礎設施。這些?例展示了Dapr如何與Kubernetes互補并提?開發者的?產?,就像Kubernetes提?運維團隊的?產??樣。
創建和運維集群上的應?
如今,Kubernetes API是部署和運?分布式系統最流?的?式。容器和Kubernetes允許我們定義和實施應?程序資源約束。具有初始化容器和Sidecar的Pod抽象提供了應??命周期的保障。健康檢查APIs提供了從短暫地運?時故障中檢測和恢復的能?。有聲明式部署、回滾和策略驅動的應?placement。所有這些都允許運維?動化部署和管理?量?作負載,但對開發?員來說有什么好處呢?
Dapr幫助開發者實現運維能夠在k8s上運?的分布式應?
開發?員可以使?Kubernetes?帶的服務發現,但它缺乏重試、超時和熔斷等?絡彈性功能。
雖然Kubernetes有ConfigMaps和Secrets,但它們缺乏動態更新和細粒度的訪問控制。
Kubernetes有StatefulSet,但沒有?于訪問該狀態的API。?Kubernetes有健康檢查,但它不會申請出?連接,例如從隊列中消費(翻譯得不太明?)。Kubernetes中沒有任何東?可以幫助實現事件驅動的應?。
這就是?Dapr?的?武之地。Dapr?解決了這些限制,并為開發者提供了與Kubernetes為運維提供了相同的?產?。Kubernetes通過抽象基礎設施來幫助運維應?。Dapr幫助開發者實現這些應?并以可靠的?式連接它們。?Dapr具有服務調?和Pub/SubAPI,可幫助以任何語?編寫的應?,在動態云基礎設施上可靠地交互。它具有狀態管理、配置中?、秘鑰和其他API,可幫助開
發者通過通?且可復?的模式實現應?需求和使?基礎設施。
提供和使?集群外的資源
Kubernetes可以很好地管理集群上的應?。但這些集群上的應?需要并依賴于集群外的資源,例如數據庫、?檔存儲、消息隊列和數?種其他云服務。如果您已經在使?Kubernetes?來運維應?,那意味著您使?的是YAML語法,以及定義所需資源狀態的聲明性概念。如果您正在使?基礎設施即代碼和GitOps等?具來實現?動化,那么您也可以使?Kubernetes API來管理外部資源。這使得Kubernetes成為資源所需狀態的單?“真實來源”,不僅適?于集群上的容器,也適?于集群外的資源。現在有這樣的Kubernetes云?商,例如?AWS Controller for Kubernetes、Azure Service Operator、Google Config Connector,以及像Crossplane這樣的?CNCF?項?,它們使??Kubernetes CRD來管理外部資源。但是這些?具的職責在管理外部資源的?命周期之后結束,并且不會擴展到綁定到在?Kubernetes?數據平?中運?的應?。通常,這些云?商有?種機制,可以將外部資源的坐標和訪問機制添加到configmap、secret或?CRD?中。但是使?特定協議從應?到資源的實際綁定會再次留給開發者處理。
Dapr幫助開發者使?運維通過k8s提供的第三?服務
這就是Dapr能夠幫助開發者的地?。?Dapr綁定可幫助開發者將應?與外部資源連接起來,?論您的應?程序使?何種語?。提供外部資源只是故事的?半。?Dapr幫助您從應?中使?該基礎設施。并通過添加彈性、跟蹤、安全性并以?致性的?式做到這?點,并通過?API?和sidecars以云原??式做到這?點,?不是將難以升級的庫嵌?到應?中。
開發和編排多集群的應?
我們已經了解了?Kubernetes?如何?于管理集群上的應?程序以及如何?于管理集群外的資源。使??Kubernetes API還有?種趨勢,那就是管理多個遠端集群上的應?。
如今,由于規模、應?和數據本地化、隔離等各種原因,組織必須將應?部署到多個數據中?、云和?Kubernetes集群中。Kubernetes集群的物理邊界并不總是符合所需的應?邊界。通常,必須將同?個應?或?組應?部署到多個集群中,這需要多集群部署和編排。有許多項?和服務可以讓您在多個集群上運?應?,例如?Azure Arc、Google Anthos、Red Hat Advanced Cluster?Manager、Hypershift和?kcp.io等項?。這些項?提供統?的?戶界?、儀表板、警報、?志、策略和對多個集群的訪問控制。他們中的?多數通過提供Kubernetes API作為控制平?,并將每個集群作為數據平?來實現這?點。為了使??致的操作、安全、合規模型,您可以集成DevOps??具包。
Dapr幫助開發者創建運維可以通過Kubernetes API操作的多云應?
在這種場景下,Dapr幫助創建可以運?并與任何云環境交互的多云應?。在不同的云環境中打包和運?應??是故事的另?半。通常在云環境中運?的應?必須使?該云環境的本地服務,?Dapr?持這?點。通常,不同的云?商提供不同的抽象、模式和?具來解決相同的問題,這些問題在不同的環境中不可轉移和重?。?例如,Azure?有?Event Grid,AWS?有?EventBridge,GCP?有?Eventarc??于創建事件驅動的應?程序。這些服務中的每?個都有獨特的學習曲線,并與云?商耦合。另???,Dapr pub/sub API?提供了通?的異步構建塊,可?于為任何云和本地創建事件驅動的應?程序。
在多云場景中,Dapr API充當統?的構建塊,使開發者能夠創建獨?于云的解決?案,并使運維團隊能夠應?彈性策略并從統?的獨?于云的應?程序運?時獲取指標和跟蹤。Diagrid?Conductor等服務可以幫助在多個云環境中運?Dapr。所有這些使得Dapr成為創建多云應?的開發者和運維這些應?程序的理想補充。
(ps.?譯者備注,開發和編排多集群的應?:主要是講可移植性。使?Dapr Sidecar后就與云?商解耦了。)
?處不在的云原?API
Kubernetes已經不僅僅是?個容器編排器。它也可以管理集群內、集群外和多集群資源。它是?于管理多種資源的通?且可擴展的操作模型。其聲明式YAML API和異步協調過程已成為資源編排范式的代名詞。它的CRD?和?Operators已經成為將領域知識與分布式系統合并的通?擴展機制。
Kubernetes和Dapr APIs的特點
Dapr建?在與Kubernetes相同的原則和基礎之上。Dapr通過定義明確的API(稱為構建塊)提供其?協議上運?,使它們?持多種語?,并且可以從任何語?或環境中訪問。?Dapr功能隨著新構建塊的添加?不斷增?,例如最近的分布式鎖API,以及內容存儲和?作流?API的提案。?Dapr功能還通過添加當前超過100個并且還在增?的構建塊來擴展。
這篇?章基于我在底特律Dapr社區?的演講。在@bibryam和@diagridio關注我,看看我使?Dapr和構建Diagrid Cloud的旅程,或者說出您的任何想法和評論。