Dapr牵手.NET学习笔记:想入非非的服务调用
demo運行環境:Windows10,Docker(dapr_zipkin,dapr_redid,dapr_placement)
安裝:dapr init
卸載:dapr uninstall,然后刪除 C:\Users\當前用戶\.dapr
dapr在部署時是通過給服務掛載一個sidecar,來輔助應用服務來完成一些額外的分布式工作,可以做到無侵入,本例是本地部署,sidecar和應用服務都是獨立進程。通過如下代命令啟動sidecar,appid為app1,應用服務端口是5000,dapr的端口為3500。
dapr?ru n?--app-id?app1?--app-port?5000?--dapr-http-port?3500
這種完全的分離,對應用來說是無侵入的,即使把舊應用管理起來也是無縫的。
dapr的服務是通過下面這樣的url調用的的:
http://localhost:3500/v1.0/invoke/app1/method/test
3500是dapr端口,其中appid是 app1,對應的接口是 /test ,其他部分就是相同的了,這樣帶來的好處是顯而易見的,沒有的IP或主機名,方便通過 XX應用的XX接口的方式調用其他服務。就像訂單服務的下單接口調用支付服務的支付接口一樣明確易用。
dpar的服務調用就這么簡單,帶來一個問題是,既然dapr可以通過appid做到服務發現,那么同一服務的多副本怎么實現?
這個問題我沒有從dapr中找到答案(如果您有方案,請告知,十分感謝),可能也沒有答案,因為dapr說它是應用開發運行時,而不是分布式基礎設施,像負載均衡這種提高可用性的部署,不屬于dapr的范疇。
于是我就用nginx搭建了個負載均衡,指向兩個相同的服務。5000是nginx對外的端口,appid為app1;兩個服務端口和appid分別是5001和app1-1,5002和app1-2,后然分別給這三個服務加上sidecar(當然,只對于服務調用來說,可以只給nginx加sidecar,但dapr的sidecar不只服務調用,還有別用,后續說明)
調用示意圖如下,如果從瀏覽器調用到服務的話,是經過nginx的saidecar和nginx兩層反向代理完成的。
經過兩個反向代理,性能會差嗎?為了了解調用的性能,下面進行了一個測試,1、直接調用服務Invock方法;2、經過sidecar代理調用服務SidecarInvoke;3、經過nginx的sidecar到nginx,再調用服務。下面是調用的代碼:
性能的測試結果:負載均衡后的調用還不錯,沒有想的那么性能差,為了提高性能,可以用gRPC。
所得:在學習過程中,一直錯覺dapr能完成服務治理,但實踐下來的結果是:dapr就是分布式開發的運行時。
所以使用dpar時,默念10次:dapr是分布式開發運行時!!!
總結
以上是生活随笔為你收集整理的Dapr牵手.NET学习笔记:想入非非的服务调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AgileConfig轻量级配置中心1.
- 下一篇: 一文说通异步 LINQ