手把手教你学Dapr - 1. .Net开发者的大时代
Dapr全稱
Distributed Application Runtime,分布式應(yīng)用運(yùn)行時(shí)
Dapr的口號(hào)
簡(jiǎn)化云原生應(yīng)用開發(fā),聚焦在應(yīng)用的核心邏輯,讓代碼簡(jiǎn)單、可移植
Dapr的目標(biāo)
最佳實(shí)踐的構(gòu)建塊
任何語言或框架
一致性,可移植,開放的API
采納標(biāo)準(zhǔn)
可擴(kuò)展和可插拔的組件
與平臺(tái)無關(guān)(本地,云計(jì)算,邊緣計(jì)算等)
社區(qū)驅(qū)動(dòng),供應(yīng)商(廠商)中立
Dapr的設(shè)計(jì)思路
這里首先要先理解幾個(gè)問題,然后再看Dapr如何解決這些問題的
以下資料都有英文原圖,中文翻譯為個(gè)人理解,英文好的小伙伴可以直接看原圖。
微服務(wù)為什么很難
開發(fā)者要構(gòu)建自己的運(yùn)行時(shí)處理分布式應(yīng)用問題
運(yùn)行時(shí)支持的開發(fā)語言有限,且有嚴(yán)格控制的特性(功能)集合
運(yùn)行時(shí)的可移植性有限,一般只支持特定的基礎(chǔ)架構(gòu)平臺(tái)
分布式應(yīng)用的需求
內(nèi)容引自 Multi-Runtime Microservices Architecture https://www.infoq.com/articles/multi-runtime-microservice-architecture/
注意:二級(jí)內(nèi)容不與圖片對(duì)應(yīng),把功能組合成場(chǎng)景
- 生命周期 - 更快的發(fā)布周期 
- 自動(dòng)化部署 
- 從錯(cuò)誤中恢復(fù) 
- 自動(dòng)化伸縮 
 
- 網(wǎng)絡(luò) - 服務(wù)發(fā)現(xiàn) 
- 跟蹤與遙測(cè)(可觀測(cè)性) 
- 信息交換:點(diǎn)對(duì)點(diǎn)、發(fā)布/訂閱,智能路由 
 
- 狀態(tài) - 服務(wù)編排、工作流 
- 分布式單例(Actor) 
- 臨時(shí)調(diào)度(Cron) 
- 冪等性 
- 有狀態(tài)錯(cuò)誤恢復(fù) 
- 緩存 
 
- 綁定 - 轉(zhuǎn)換協(xié)議 
- 支持不同的消息交換模式:輪詢、事件驅(qū)動(dòng)、請(qǐng)求/應(yīng)答等 
- 轉(zhuǎn)換消息格式 
- 執(zhí)行自定義錯(cuò)誤恢復(fù)過程 
- 安全機(jī)制 
 
傳統(tǒng)中間件和云原生對(duì)比
傳統(tǒng)中間件以各種SDK的方式提供能力,而云原生平臺(tái)則通過各種外圍的Runtime,目前來看比較有趣的是,大家不約而同的選擇了Sidecar
多運(yùn)行時(shí)微服務(wù)邊界
- K8s和容器在多語言應(yīng)用程序的生命周期管理方面取得了巨大的飛躍,并為未來的創(chuàng)新奠定了基礎(chǔ) 
- Service Mesh在K8s上得到了改進(jìn),具有先進(jìn)的網(wǎng)絡(luò)功能,并開始深入應(yīng)用程序 
- Knative通過快速伸縮來關(guān)注無服務(wù)器的工作負(fù)載,解決了服務(wù)編排和事件驅(qū)動(dòng)的綁定需求 
- Dapr以K8s、Knative和Service Mesh的思想為基礎(chǔ),深入研究應(yīng)用程序運(yùn)行時(shí),處理有狀態(tài)的工作負(fù)載、綁定和集成需求,充當(dāng)現(xiàn)代分布式中間件 - 主要分為3個(gè)部分,K8s、機(jī)甲運(yùn)行時(shí)(網(wǎng)關(guān)、Dapr + Knative)、業(yè)務(wù)邏輯。 - Dapr的出現(xiàn)可以讓開發(fā)者更專注于業(yè)務(wù)邏輯,而業(yè)務(wù)邏輯則作為服務(wù)運(yùn)行時(shí)。 
多運(yùn)行時(shí)的好處
業(yè)務(wù)邏輯和不斷增加的分布式系統(tǒng)關(guān)注點(diǎn)之間的松耦合。
業(yè)務(wù)邏輯經(jīng)常變化,取決于業(yè)務(wù)優(yōu)先級(jí)。
而分布式原語則由軟件供應(yīng)商提供,作為庫、容器、服務(wù)來使用。這些代碼會(huì)根據(jù)供應(yīng)商優(yōu)先級(jí)、發(fā)布周期、安全補(bǔ)丁、開源治理規(guī)則等而變化。
他們互相看不到對(duì)方,也無法控制對(duì)方。
Dapr的優(yōu)勢(shì):Any language, anywhere
與語言無關(guān),與平臺(tái)無關(guān)
分布式應(yīng)用運(yùn)行時(shí)
官方解釋
幫助開發(fā)人員構(gòu)建事件驅(qū)動(dòng)的、彈性的分布式應(yīng)用程序。無論是在本地、云中還是在邊緣設(shè)備上,都可以幫助你解決構(gòu)建微服務(wù)所帶來的挑戰(zhàn),并保持代碼與平臺(tái)無關(guān)。
可以看到Dapr更具象化了
與應(yīng)用程序通過HTTP和gRPC通信
內(nèi)部有一些構(gòu)建塊
運(yùn)行在云上
Dapr與服務(wù)網(wǎng)格
- 開發(fā)者更聚焦在代碼層面,通過SDK(圖中沒有標(biāo)注)與dapr的構(gòu)建塊通信,面向localhost編程 
- 運(yùn)維更關(guān)注安全性、可觀測(cè)性、健壯性等問題上。而流量管控的部分,dapr(可能是暫時(shí)的)沒有。 
Sidecar的世界
應(yīng)用于Sidecar通信是通過Dapr API(已經(jīng)被封裝成不同開發(fā)語言的SDK),這個(gè)過程中通過OpenTelemetry支持了可觀測(cè)性(即跟蹤、日志、指標(biāo))
應(yīng)用之間通過Sidecar通信,支持mTLS,這個(gè)指服務(wù)調(diào)用(即Service Invocation)
Sidecar 之間通過gRPC(圖片中沒有顯示),Bindings,Pub/Sub都可以通信
可觀測(cè)性無處不在,通過Prometheus、Zipkin、Fluentd等,可視化OpenTelemetry中的部分?jǐn)?shù)據(jù)
但目前據(jù)我所知沒有一個(gè)可以統(tǒng)一接管完整OpenTelemetry的,如果有的話歡迎糾錯(cuò)。
狀態(tài)管理也是由Sidecar代理的
對(duì)于.Net的意義
- .Net SDK是微軟親兒子,讓.Net有幸和Java一起站在了同一起跑線 
- 分布式應(yīng)用運(yùn)行時(shí)給.Net的新架構(gòu)帶來了新的思路和機(jī)遇 
- 加速.Net技術(shù)棧的更新迭代 
- 共享開源生態(tài) 
我們正在行動(dòng),新的框架、新的生態(tài)
我們的目標(biāo)是自由的、易用的、可塑性強(qiáng)的、功能豐富的、健壯的。
所以我們借鑒Building blocks的設(shè)計(jì)理念,正在做一個(gè)新的框架MASA Framework,它有哪些特點(diǎn)呢?
- 原生支持Dapr,且允許將Dapr替換成傳統(tǒng)通信方式 
- 架構(gòu)不限,單體應(yīng)用、SOA、微服務(wù)都支持 
- 支持.Net原生框架,降低學(xué)習(xí)負(fù)擔(dān),除特定領(lǐng)域必須引入的概念,堅(jiān)持不造新輪子 
- 豐富的生態(tài)支持,除了框架以外還有組件庫、權(quán)限中心、配置中心、故障排查中心、報(bào)警中心等一系列產(chǎn)品 
- 核心代碼庫的單元測(cè)試覆蓋率90%+ 
- 開源、免費(fèi)、社區(qū)驅(qū)動(dòng) 
- 還有什么?我們?cè)诘饶?#xff0c;一起來討論 
經(jīng)過幾個(gè)月的生產(chǎn)項(xiàng)目實(shí)踐,已完成POC,目前正在把之前的積累重構(gòu)到新的開源項(xiàng)目中
目前源碼已開始同步到Github(文檔站點(diǎn)在規(guī)劃中,會(huì)慢慢完善起來):
MASA.BuildingBlocks
MASA.Contrib
MASA.Utils
MASA.EShop
BlazorComponent
MASA.Blazor
QQ群:7424099
微信群:加技術(shù)運(yùn)營(yíng)微信(MasaStackTechOps),備注來意,邀請(qǐng)進(jìn)群
總結(jié)
以上是生活随笔為你收集整理的手把手教你学Dapr - 1. .Net开发者的大时代的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Hostonly cookie是什么鬼?
- 下一篇: .NET 6 对 StackOverfl
