Java大型互聯網架構-如何正常掌握分佈式系統的大部分技術?

這籹籽sd

分佈式是一種思想,旨在將原本的單節點應用分佈到不同的服務器節點,以求獲得更大的運算能力和更高的性能。

分佈式技術太廣了,涉及到將多個服務器的CPU,內存硬盤等組成一個統一的整體,而服務,計算分佈在不同的服務器上,服務之間的通信,分佈式之後的全局唯一性,數據一致性,分佈式事務等等,每一項可以說在實際工作中都會有大量的坑,不經歷過很難明白,下面是我的粗淺理解:


分佈式存儲:

數據庫:數據庫的主從複製,讀寫分離,分庫分表這些東西,都是通過數據分佈在不同的節點,以實現數據查詢與修改的更高的效率,同時防止數據在單一節點上因為某些原因的丟失,推薦自己搭建mysql主從,使用spring aop代碼開發或者組件搭建讀寫分離,使用mycat等組件實現分庫分表!

文件:分佈式文件存儲系統,有HDFS和Gluster等大型的系統,提供更好的容錯性和擴展能力!

分佈式服務:對外提供高度內聚,透明,內部靈活,分散的服務集群!

前後端分離:將前後端的服務拆分在不同的集群中,以保證前後端技術架構上的分離,使用node.js部署前端服務,與用戶進行交互,後臺通過某種通信協議,提供動態數據給前端調用!

後端微服務:以單獨業務為導向,建立起細粒度的服務,同時服務之間通過服務發現組件進行通信,在用的springcloud還不錯,集成了網關,熔斷器,負載均衡等,可以進行快速的搭建!


服務之間的通信通常有服務暴露直接調用(zk.eureka等服務註冊與發現),異步消息傳輸(kafka等消息隊列)!

分佈式緩存:緩存通常是內存型緩存,可以用來快速的存取數據,減少數據庫的壓力!分佈式緩存通常使用主從複製,高可用方式搭建起集群,提高整個緩存系統的容納能力,也避免單一緩存節點宕機對整個服務的影響,用的較多的是redis集群(基於redis的集群搭建,請參考https://www.wukong.com/question/6493663252021510414/)

redis緩存還因為單線程模型,可以用來做分佈式鎖實現!

分佈式計算:將一些大型的計算,使用策略分佈到不同的機器上,然後彙總得到計算結果,一般使用map-reduce模型,hadoop,spark等都是成熟而且大規模使用的框架!


分佈式技術並沒有嚴格分類,技術也五花八門,作為一個程序員只能是每天不斷的學習才能得以入門,每個人的學習能力,領悟到的東西也有不同,今天就寫這麼多,更多的技術分享,敬請關注。。。


謝逅架構

看職位吧。如果你是做PD,那麼主要是服務代碼的無狀態編程,redis緩存,一些反向代理軟件的配置和服務化工具的配置。如果是做架構,那就不僅是知道怎麼用,還要知道運行原理,知道為什麼,出了問題如何解決,如何擴展。對技術的基礎要求掌握比較深。目前最常用的反向代理軟件一般是nginx,服務化軟件基本阿里的 dubbo,基於 spring boot的 spring cloud。


HelloWorld應用

我們公司開發的程序用的是阿里的分佈式框架dubbo。建議你先從某個知名框架去學習,瞭解它的用法,熟悉之後再去了解框架具體涉及到的技術,這樣理解起來會比直接學底層技術更有效率,更容易使人理解。等你對該框架了解的差不多了,你對技術的掌握也達到一定高度了。


分享到:


相關文章: