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

MASA技術團隊發表於2021-11-09

Dapr全稱

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

Dapr的口號

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

Dapr的目標

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

Dapr的設計思路

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

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

微服務為什麼很難

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

what_is_holding_back_microservice_development.png

分散式應用的需求

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

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

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

distributed_app.png

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

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

future_architecture_trends.png

多執行時微服務邊界

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

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

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

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

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

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

multi-runtime_microservices_boundary.png

多執行時的好處

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

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

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

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

architecture_benefits.png

Dapr的優勢:Any language, anywhere

與語言無關,與平臺無關

image

分散式應用執行時

官方解釋

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

可以看到Dapr更具象化了

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

dapr.png

Dapr與服務網格

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

dapr_and_servicemesh.png

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代理的

sidecar_components.png

對於.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),備註來意,邀請進群

masa_stack_tech_ops.png

轉載自:(鬼谷子)

相關文章