翻譯 | 阿里巴巴的Dapr實踐與探索


本文原文來自Dapr Blog,作者阿里雲高級技術專家敖小劍。本文是我根據自己的理解翻譯了其中的一部分並加了一些參考文獻中的內容,所以並非完整翻譯,點擊此處即可閱讀原版英文全文。

1 關於Dapr

Dapr(Distributed Application Runtime)是一個開源、可移植、事件驅動的運行時。它使開發人員能夠輕松地構建運行在雲平台和邊緣的彈性而微服務化的應用程序,無論是無狀態還是有狀態。Dapr 讓開發人員能夠專注於編寫業務邏輯,而不是解決分布式系統的挑戰,從而顯著提高生產力並減少開發時間。此外,Dapr 也降低了大部分中小型企業基於微服務架構構建現代雲原生應用的准入門檻。

2 為什么阿里巴巴選擇Dapr?

多語言多環境的需求

眾所周知,阿里巴巴在過去的十多年里基於Java技術棧構建了眾多的業務系統、中間件和基礎設施。

但是,隨着阿里巴巴業務的快速發展和雲原生技術的逐步應用,包括Node.js、Golang、C、C++ 以及 Rust 等在內的多開發語言並存的需求 就變得需要解決,總不能重復給各個語言造輪子吧?

因此,阿里巴巴急切需要一個能夠不受語言技術棧限制的,且能夠快速開發微服務的有效解決方案。

多運行時的微服務架構

最終,阿里巴巴選擇了基於Sidecar形式運行的多運行時解決方案,這和之前Bilgin Lbryam提出的“多運行時的微服務架構”的理念十分類似。

這種架構的理念其實是將業務邏輯和基礎中間件進行分離的實踐。

很可能在將來,我們最終將使用多個運行時來實現分布式系統。多個運行時,不是因為有多個微服務,而是因為每個微服務都將由多個運行時組成,最有可能是兩個運行時環境:自定義業務邏輯運行環境和分布式原語運行環境。

因此,在這種軟件體系結構中,我們可能會將擁有構成應用程序核心的業務邏輯和提供強大的現成分布式原語的sidecar組件。

Dapr是踐行多運行時環境理念的第一個開源項目,阿里巴巴也因此從它發布release版本就開始重點關注,因為Dapr具有足夠的潛力能夠幫助阿里巴巴解決其所遇到的問題和挑戰。

換句話說,Sidecar模式所具有的優點能夠方便地支持多語言,且基於Dapr可以更加輕便快速地構建應用程序,而不是像以前一樣需要引入一大堆客戶端SDK。

阿里巴巴資深技術專家 李響(etcd作者)說道“在阿里雲,我們相信Dapr將會改變微服務的部署方式。通過引入Dapr,我們的客戶可以更加快速和便捷地構建具有可移植性和健壯性的分布式系統”。

3 Dapr在阿里巴巴的實踐

從2020年中旬開始,阿里巴巴在內部啟動了一個小規模的試驗,意在使用Dapr來探索和驗證Dapr在真實環境下的可行性。與此同時,阿里巴巴也在積極參與Dapr社區的建設,並積極提交了大量的改進建議、反饋 以及 代碼。

Serverless場景下多開發語言的支持

阿里巴巴的電商系統包括了大量的支持業務活動和購買流程的需求,這些需求大多都是需要短期內實現,支持穩定交易運行 且 快速響應客戶的。因此,FaaS(Function as a Service)這種Serverless的場景是十分適合於這類需求的模式。

首先,FaaS應用具有強烈的支持多語言的需求,特別是不能受限於阿里巴巴已經成熟的Java技術棧生態,因為阿里巴巴的大部分Java應用都對多語言需求的支持不足,特別是像Dart或Rust為代表的不同類型的開發語言。

其次,FaaS應用還需要和本地部署的服務、不同類型的中間件 和 基礎設施 進行通信,因此,多語言支持就變得十分的重要。

基於Dapr,阿里巴巴解決了FaaS應用存在的多語言支持不足的問題,幫助客戶提高了FaaS應用的開發效率。

生態系統多語言開發的應用系統的集成

在過去的多年中,阿里巴巴通過收購入股了大量不同行業的企業,這些企業都在使用不同的技術棧構建解決方案。

這些被收購入股的公司已經有了大量的應用系統,而且大部分都不是使用Java技術棧開發的。所以,這些應用系統具有強烈的多語言集成需求,以便能夠快速地融入阿里巴巴的生態系統之中。例如,部分企業使用了Node.js 和 Golang開發了部分應用,又使用Dart 和 C++ 開發了其他部分應用,在技術的選型上也是根據場景擇優選擇的,你不能說他們就有錯。

但是,現狀是阿里巴巴的生態系統不能良好的支持除Java之外的開發語言進行集成,特別是其中一些中間件和基礎設施。在實際中,阿里巴巴基於不重復造輪子和成本和時間考慮,也不會為所有的開發語言都重復開發類似的客戶端接入。

最后,阿里巴巴選擇基於Dapr來為這些應用提供多語言的集成解決方案。

已有的復雜Java遺留系統

在過去的多年中,阿里巴巴基於ClassLoader(Java中的一個核心概念)來設計和開發了大量的復雜的Java系統,這些系統的設計往往是復雜的,而且應用也是很臃腫的。

此外,一些業務開發團隊還維護了一些列的多語言中間件SDK來和已有中間件進行聯接。但是,這些SDK的維護工作需要和中間件團隊的更新保持同步,不能有一點遺漏。這些必要的工作量,也為其帶來了潛在的穩定性風險。

因此,阿里巴巴期望基於Dapr來解決上面提到的兩個問題。值得一提的是,阿里雲為Java的遺留系統設計了一個適配器層,可以方便地將原始的Java調用轉換為Dapr客戶端API。

下圖展示了上述三個場景提到的多語言支持的設計實現:

除此之外,阿里巴巴還在Cloud-to-Cloud的遷移方面進行了實踐,這里就不再多贅述。

4 未來阿里巴巴的Dapr計划

在未來,阿里巴巴還將繼續在試驗應用中驗證Dapr的可行性,將會主要集中在以下幾個方面:

  • 適用場景
  • 性能
  • 穩定性
  • 可移植性

此外,阿里巴巴也正在開發Dapr相關組件來和更多的中間件和基礎設施進行集成,其中包括了阿里雲的眾多內部產品和已發布的商業產品。

通過驗證之后,阿里巴巴還將會貢獻在阿里雲商業產品上實踐的集成代碼給Dapr社區,也會持續地和Dapr社區一起努力提高Dapr的功能、性能以及穩定性。

References

英文原文作者:敖小劍,發布於Dapr Blog,點此閱讀

Dapr文檔:https://docs.dapr.io/

Dpar for .NET Developers:https://aka.ms/dapr-ebook

 


免責聲明!

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



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