技術觀念 | 淺談分散式系統 - 什麼是分散式系統
在計算機科學中,分散式運算(英語:Distributed computing
),又譯為分布式計算。這個研究領域,主要研究分散式系統(Distributed system
)如何進行計算。分散式系統是一組電腦,透過網路相互連接傳遞訊息與通訊後並協調它們的行為而形成的系統。[組件之間彼此進行互動以實現一個共同的目標。把需要進行大量計算的工程資料分割成小塊,由多台電腦分別計算,再上傳運算結果後,將結果統一合併得出資料結論的科學。分散式系統的例子來自有所不同的面向服務的架構,大型多人線上遊戲,對等網路應用。
目前常見的分散式運算專案通常使用世界各地上千萬志願者電腦的閒置計算能力,通過網際網路進行資料傳輸(志願計算)。如分析計算蛋白質的內部結構和相關藥物的Folding@home
專案,該專案結構龐大,需要驚人的計算量,由一台電腦計算是不可能完成的。雖然現在有了計算能力超強的超級計算機,但這些裝置造價高昂,而一些科研機構的經費卻又十分有限,藉助分布式計算可以花費較小的成本來達到目標。
A distributed system is a system whose components are located on different networked computers, which then communicate and coordinate their actions by passing messages to one other.
典型的分散式系統
如大型多人在線的遊戲系統,電商系統,通信網路系統,工業控制系統,NFS
,HDFS
(Hadoop
) 等等。按應用的類型,可簡單的分為:
- 分散式計算
- 分散式存儲
- 分散式控制
- 分散式服務
分散式系統的難點在於如何讓大量、異構節點(單點故障問題)在復雜網路環境(超時、丟包)中協調工作,並實現透明(對用戶不可見)、可擴展(節點的動態增刪)、可用可靠、一致高效的目標。
相關的技術
負載平衡:
- Nginx:高性能、高並發的web服務器;功能包括負載平衡、反向代理、靜態內容緩存、訪問控制;工作在應用層
- LVS: Linux virtual server,基於集群技術和Linux操作系統實現一個高性能、高可用的服務器;工作在網路層
webserver:
- Java:Tomcat,Apache,Jboss
- Python:gunicorn、uwsgi、twisted、webpy、tornado
service:
- SOA、微服務、spring boot,django
容器:
- docker,kubernetes
cache:
- memcache、redis等
協調中心:
- zookeeper、etcd等, zookeeper使用了Paxos協議Paxos是強一致性,高可用的去中心化分散式。 zookeeper的使用場景非常廣泛,之後細講。
RPC框架:
- grpc、dubbo、brpc
- dubbo是阿里開源的Java語言開發的高性能RPC框架,在阿里系的諸多架構中,都使用了dubbo + spring boot
消息隊列:
- kafka、rabbitMQ、rocketMQ、QSP
- 消息隊列的應用場景:異步處理、應用解耦、流量削鋒和消息通訊
實時資料平台:
- storm、akka
離線資料平台:
- hadoop、spark
- PS: apark、akka、kafka都是scala語言寫的,看到這個語言還是很牛逼的
dbproxy:
- cobar也是阿里開源的,在阿里系中使用也非常廣泛,是關係型資料庫的sharding + replica 代理
db:
- mysql、oracle、MongoDB、HBase
搜索:
- elasticsearch、solr
日誌:
- rsyslog、elk、flume
分散式系統的基本架構:
- client-server(centralization) 集中
- multi-tier(semi-centralization) 半集中
- peer-to-peer(decentralization) 去中心化
更複雜的分散式系統也是由這三類基本架構組合而成。
註:以上參考了
漫谈分布式系统中的技术 —— 从 IPC/RPC,SOA,Web Service/REST 到 micro services(微服务)
架構師必看:微服務架構綜述
服務導向新概念-Web Oriented Architecture
微服務架構樣式
五年架構師講述RESTful架構風格
架構師觀點 - 轉移到微服務架構的經驗分享 (Part 1)
導入微服務前一定要知道的事
走入軟體架構演進史 見證微服務發展今昔
簡單認識「微服務」概念
快速的【微】服務架構簡介