生活随笔
收集整理的這篇文章主要介紹了
如何看待微软新开源的Service Fabric?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本人曾在Service Fabric (SF)項目中做了幾年,這次很興奮能看到它的開源。短短兩天已經有1300多個關注了。我看了一下開源的代碼,真是滿滿的干貨,200多萬行C++代碼,所有最核心的協議算法都在里面。但是,不得不承認,現在各種微服務框架已經用的非常廣泛,Service Fabric出來的晚,對它的定位會十分尷尬。而且官方的文檔寫的大而全,看了讓人更糊涂。我這里根據自己的理解解釋一下。
SF定位是一個“分布式系統平臺”,意思就是說,它是用來寫其他的分布式系統的,比如有了SF,就可以很容易寫個Zookeeper、分布式Redis或者分布式數據庫。但各種應用千差萬別,怎么能實現一個你自己的分布式XYZ呢?SF通過主打有狀態服務(Stateful Service)來幫你實現這個目的。
先從無狀態服務(Stateless Service)說起,這個是目前大多數應用采用的方式。比如這個圖是一個很典型的三層結構:前端,中間層和存儲層,此外通常還會加個緩存層。前端和中間層都是無狀態的,就是說其中不保存數據,可以比較容易地增加或減少節點。存儲層是有狀態的,需要特別留意數據安全性和一致性。由于前端過來的請求可能由于網絡或者硬件故障而丟失,就需要使用隊列來增強可靠性。如果訪問數據速度是瓶頸,還需要增加緩存層,緩存層也是有狀態的,所以緩存本身以及緩存和存儲層的數據一致性也需要很小心。
<img src="https://pic1.zhimg.com/50/v2-796dfde978007dda05603f591b0baf4c_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1020" data-rawheight="601" class="origin_image zh-lightbox-thumb" width="1020" data-original="https://pic1.zhimg.com/v2-796dfde978007dda05603f591b0baf4c_r.jpg">
有狀態服務(Stateful Service)采用另一種思路,把數據與處理它的程序部署在一起,如下圖里面,把存儲層的數據進行分片后移到中間層,每片數據對應自己的一套處理程序。每片數據有奇數個副本,由SF來保證這些副本之間的數據的可靠性和一致性。好處就是,首先數據處理程序只需要關心本地數據,邏輯大大簡化;其次數據的傳輸變少了,性能可以得到很大改善;而且系統架構變簡單了,不需要在存儲層、緩存層、隊列等地方分別管理可靠性和一致性,只在SF一個地方管理。
<img src="https://pic2.zhimg.com/50/v2-f6df2d79d70d29d1234045cefb13a565_hd.jpg" data-caption="" data-size="normal" data-rawwidth="989" data-rawheight="598" class="origin_image zh-lightbox-thumb" width="989" data-original="https://pic2.zhimg.com/v2-f6df2d79d70d29d1234045cefb13a565_r.jpg">
為了保證數據一致性和可靠性,SF設計了非常復雜的協議,比如數據修改操作怎么同步到多個副本,數據修改如何保證嚴格有序,主副本如果失效該如何選舉下一個主副本,節點如何動態加入和去除,容器的負載(內存+CPU)過大如何進行均衡等等。這些協議是我們當時花最多精力的,因為要支持類似分布式數據庫這樣的應用,要從理論上保證它的正確性,不能有一點意外。
相關文章:?
原文地址:https://www.zhihu.com/question/268819708/answer/343732457
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的如何看待微软新开源的Service Fabric?的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。