Dapr 實(shí)際是被定義為Distributed Application Runtime(分布式的程序運(yùn)行時(shí)),為開發(fā)人員提供一個(gè)分布式的程序的開發(fā)環(huán)境磕洪,提供分布式的程序所依賴的功能模塊庫,提供了分布式程序的運(yùn)行環(huán)境,或者說為分布式的程序提供了一套完整運(yùn)行方案额港。
Dapr是一個(gè)自上而下的框架,也就是說從從頂層開發(fā)者運(yùn)行接口(遠(yuǎn)程服務(wù)方法調(diào)用 pubsub )歧焦,到傳輸協(xié)議(http grpc)移斩,到消息組件肚医, 到基礎(chǔ)設(shè)施環(huán)境(k8s 本地主機(jī) docker)。這種設(shè)計(jì)的好處是將開發(fā)者作為第一位向瓷,先滿足需求而不是創(chuàng)造需求肠套。從解決問題出發(fā)到最終實(shí)現(xiàn)。本人比較喜歡這種自上而下的理念猖任,在現(xiàn)實(shí)中這種理念也相較成功率更高你稚。
Dapr是站在開發(fā)者角度設(shè)計(jì)的,給開發(fā)者提供了服務(wù)調(diào)用朱躺,消息隊(duì)列刁赖,事件驅(qū)動(dòng)的服務(wù)模型,并提供需要的狀態(tài)存儲(chǔ)长搀,加密數(shù)據(jù)存儲(chǔ)的基礎(chǔ)服務(wù)宇弛,使得開發(fā)者不用去關(guān)心底層基礎(chǔ)設(shè)施細(xì)節(jié)。
Dapr同時(shí)支持standalone和基于Kubernetes的模式源请,想要了解可以從standalone模式開始枪芒,standalone相對(duì)概念較少,排除Kubernetes復(fù)雜概念的干擾巢钓。
Dapr實(shí)現(xiàn)遠(yuǎn)程方法直接調(diào)用病苗,實(shí)現(xiàn)了事件總線異步處理功能,將兩者集中到一個(gè)平臺(tái)症汹,這就滿足了絕大部分分布式程序的核心需求硫朦。
Dapr從使用角度出發(fā),優(yōu)先實(shí)現(xiàn)了程序員所關(guān)心的最核心的功能背镇,并沒追究serverless概念的完整實(shí)現(xiàn)咬展,如沒有提供從零擴(kuò)容等類似非核心功能和概念,當(dāng)然Dapr也是在一個(gè)快速開發(fā)與擴(kuò)展階段瞒斩,一些新的概念和功能會(huì)不斷引入破婆,但是肯定是以最核心功能為基點(diǎn)來拓展。
Dapr提供了完備的可觀察性胸囱,提供了完備的tracing metrics logs, 方便追蹤問題祷舀,支持opentelemetry(opencensus), 所有支持opentelemetry的tracing工具都可以被接入烹笔,opentelemetry目前還在發(fā)展階段裳扯。
Dapr 采用mutual authentication TLS加密安全方式,提供了生產(chǎn)級(jí)別的安全性谤职。
Dapr是基于sidecar模式模式饰豺, 實(shí)際等于給程序提供一個(gè)直接的代理,類似于每個(gè)web app 前面綁定一個(gè)nigix允蜈。
Dapr K8S模式利用AdmissionReview AdmissionRequest通過PatchOperation注入Dapr的sidecar冤吨。
Dapr沒用采用標(biāo)準(zhǔn)的net/http庫蒿柳,而是采用fasthttp一個(gè)高性能http庫,在性能上有顯著提升漩蟆。
web session之間是無狀態(tài)的垒探,State store components提供了狀態(tài)的存儲(chǔ),類似于web開發(fā)中將web session存儲(chǔ)于服務(wù)器端的功能怠李。
Dapr不是service mesh叛复,service mesh是關(guān)注于網(wǎng)絡(luò)服務(wù),Dapr則是為用戶構(gòu)建microservices提供基礎(chǔ)架構(gòu)支持扔仓,使用戶更方便的構(gòu)建microservices,是以開發(fā)者為中心而不是網(wǎng)絡(luò)為中心咖耘。
Service invocation 實(shí)現(xiàn)遠(yuǎn)程服務(wù)方法的調(diào)用翘簇,實(shí)現(xiàn)類似faas功能,實(shí)際提供了服務(wù)發(fā)現(xiàn)儿倒,反向代理的功能版保。
DaprService invocation 實(shí)現(xiàn)了反向代理、負(fù)載均衡夫否。