1. 程式人生 > 其它 >手把手教你學Dapr - 1. .Net開發者的大時代

手把手教你學Dapr - 1. .Net開發者的大時代

Dapr全稱

Distributed Application Runtime,分散式應用執行時

Dapr的口號

簡化雲原生應用開發,聚焦在應用的核心邏輯,讓程式碼簡單、可移植

Dapr的目標

  1. 最佳實踐的構建塊
  2. 任何語言或框架
  3. 一致性,可移植,開放的API
  4. 採納標準
  5. 可擴充套件和可插拔的元件
  6. 與平臺無關(本地,雲端計算,邊緣計算等)
  7. 社群驅動,供應商(廠商)中立

Dapr的設計思路

這裡首先要先理解幾個問題,然後再看Dapr如何解決這些問題的

以下資料都有英文原圖,中文翻譯為個人理解,英文好的小夥伴可以直接看原圖。

微服務為什麼很難

  1. 開發者要構建自己的執行時處理分散式應用問題
  2. 執行時支援的開發語言有限,且有嚴格控制的特性(功能)集合
  3. 執行時的可移植性有限,一般只支援特定的基礎架構平臺

分散式應用的需求

內容引自 Multi-Runtime Microservices Architecture https://www.infoq.com/articles/multi-runtime-microservice-architecture/

注意:二級內容不與圖片對應,把功能組合成場景

  • 生命週期
    • 更快的釋出週期
    • 自動化部署
    • 從錯誤中恢復
    • 自動化伸縮
  • 網路
    • 服務發現
    • 跟蹤與遙測(可觀測性)
    • 資訊交換:點對點、釋出/訂閱,智慧路由
  • 狀態
    • 服務編排、工作流
    • 分散式單例(Actor)
    • 臨時排程(Cron)
    • 冪等性
    • 有狀態錯誤恢復
    • 快取
  • 繫結
    • 轉換協議
    • 支援不同的訊息交換模式:輪詢、事件驅動、請求/應答等
    • 轉換訊息格式
    • 執行自定義錯誤恢復過程
    • 安全機制

傳統中介軟體和雲原生對比

傳統中介軟體以各種SDK的方式提供能力,而云原生平臺則通過各種外圍的Runtime,目前來看比較有趣的是,大家不約而同的選擇了Sidecar。

多執行時微服務邊界

  • K8s和容器在多語言應用程式的生命週期管理方面取得了巨大的飛躍,併為未來的創新奠定了基礎

  • Service Mesh在K8s上得到了改進,具有現金的網路功能,並開始深入應用程式

  • Knative通過快速伸縮來關注無伺服器的工作負載,解決了服務編排和事件驅動的繫結需求

  • Dapr以K8s、Knative和Service Mesh的思想為基礎,深入研究應用程式執行時,處理有狀態的工作負載、繫結和整合需求,充當現代分散式中介軟體

    主要分為3個部分,K8s、機甲執行時(閘道器、Dapr + Knative)、業務邏輯。

    Dapr的出現可以讓開發者更專注於業務邏輯,而業務邏輯則作為服務執行時。

多執行時的好處

業務邏輯和不斷增加的分散式系統關注點之間的鬆耦合。

業務邏輯經常變化,取決於業務優先順序。

而分散式原語則由軟體供應商提供,作為庫、容器、服務來使用。這些程式碼會根據供應商優先順序、釋出週期、安全補丁、開源治理規則等而變化。

他們互相看不到對方,也無法控制對方。

Dapr的優勢:Any language, anywhere

與語言無關,與平臺無關

分散式應用執行時

官方解釋

幫助開發人員構建事件驅動的、彈性的分散式應用程式。 無論是在本地、雲中還是在邊緣裝置上,都可以幫助你解決構建微服務所帶來的挑戰,並保持程式碼與平臺無關。

可以看到Dapr更具象化了

  1. 與應用程式通過HTTP和gRPC通訊
  2. 內部有一些構建塊
  3. 執行在雲上

Dapr與服務網格

  • 開發者更聚焦在程式碼層面,通過SDK(圖中沒有標註)與dapr的構建塊通訊,面向localhost程式設計
  • 運維更關注安全性、可觀測性、健壯性等問題上。而流量管控的部分,dapr(可能是暫時的)沒有。

Sidecar的世界

  1. 應用於Sidecar通訊是通過Dapr API(已經被封裝成不同開發語言的SDK),這個過程中通過OpenTelemetry支援了可觀測性(即跟蹤、日誌、指標)
  2. 應用之間通過Sidecar通訊,支援mTLS,這個指服務呼叫(即Service Invocation)
  3. Sidecar 之間通過gRPC(圖片中沒有顯示),Bindings,Pub/Sub都可以通訊
  4. 可觀測性無處不在,通過Prometheus、Zipkin、Fluentd等,視覺化OpenTelemetry中的部分資料

但目前據我所知沒有一個可以統一接管完整OpenTelemetry的,如果有的話歡迎糾錯。

  1. 狀態管理也是由Sidecar代理的

對於.Net的意義

  • .Net SDK是微軟親兒子,讓.Net和Java一起在新起點站在了同一起跑線
  • 分散式應用執行時給.Net的新架構帶來了新的思路和機遇
  • 加速.Net技術棧的更新迭代
  • 共享開源生態

我們正在行動,新的框架、新的生態

我們的目標是自由的易用的可塑性強的功能豐富的健壯的

所以我們借鑑Building blocks的設計理念,正在做一個新的框架MASA Framework,它有哪些特點呢?

  • 原生支援Dapr,且允許將Dapr替換成傳統通訊方式
  • 架構不限,單體應用、SOA、微服務都支援
  • 支援.Net原生框架,降低學習負擔,除特定領域必須引入的概念,堅持不造新輪子
  • 豐富的生態支援,除了框架以外還有元件庫、許可權中心、配置中心、故障排查中心、報警中心等一系列產品
  • 核心程式碼庫的單元測試覆蓋率90%+
  • 開源、免費、社群驅動
  • 還有什麼?我們在等你,一起來討論

經過幾個月的生產專案實踐,已完成POC,目前正在把之前的積累重構到新的開源專案中

目前原始碼已開始同步到Github(文件站點在規劃中,會慢慢完善起來):

MASA.BuildingBlocks

MASA.Contrib

MASA.Utils

MASA.EShop

BlazorComponent

MASA.Blazor

QQ群:7424099

微信群:加技術運營微信(MasaStackTechOps),備註來意,邀請進群

自動簽名

歡迎加入技術交流群:

招.Net中/高階開發工程師:座標杭州下沙,聯絡方式進群找群主,薪資範圍16-30K,有住房補貼