一、 引言
由於網上介紹的分布式的系統講解並沒有多少,所以在這兒就希望可以寫一套系統的分布式的詳解,未來也結合springboot的搭建分布式系統進行詳細構建。也願意堅持寫下去,寫給自己也分享給大家,希望大家可以提出寶貴的意見,一同長進。哈哈。。第一篇文章,開個頭。
二、分布式定義。
了解起來分布式呢,順便也介紹一下集群,這兩個概念和舉例放在這里,讓大家更能清楚的認識和知道。
(1)專業術語:
分布式系統:是一個硬件或軟件組件分布在不同的網絡計算機上,彼此之間僅僅通過消息傳遞進行通信和協調的系統。
分布式:不同的業務模塊部署在不同的服務器上或者同一個業務模塊分拆多個子業務,部署在不同的服務器上,解決高並發的問題。
集群:同一個業務部署在多台機器上,提高系統可用性。
(2)舉例講解:
攤煎餅賣煎餅,賣煎餅需要進行三道的工序:准備原料、加工、銷售。主人A發現這樣一天太累了,根本忙不過來,於是乎招人B准備原料,招人C來幫忙加工,這樣主人A就可以之進行銷售,B和C呢相對於A來說就是分布式;后來隨着銷量的增加,B和C忙不過來,又找了B1加入到准備原料,C1加入到加工小組。這樣B和B1之間就是集群關系,C和C1之間也是集群關系。B小組和C小組屬於分布式關系。
(3)圖解更為清晰(網上搜刮的一張)
如果還是不清楚呢?推薦你一篇文章 分布式與集群的區別。
三、 集中式系統和分布式。
如果上面的圖解大家已經明白了,那么分布式和集中式也就相應的理解了。
集中式系統:就是指由一台或多台主計算機組成中心節點,數據集中存儲於這個中心 節點中,並且整個系統的所有業務單元都集中部署在這個中心節點上,系統所有的功能均由其集中處理。也就是說,集中式系統中,每個終端或客戶端及其僅僅負責 數據的錄入和輸出,而數據的存儲與控制處理完全交由主機來完成。
傳統的集中式處理模型越來越不能適應人們的需求:
(1)集中式系統如果進行大型項目的開發,改為大型主機,需要很昂貴的財力,這是一筆不小的開支。
(2)集中式系統運行在一台主機之上,如果這台主機出現故障,所有人都要等待這台主機的恢復。對於用戶而言,什么也看不到了。
(3)安全度不高。如果被攻擊,損失也是最大的。
分布式系統:《分布式系統概念與設計》一書介紹到一個標准的分布式系統在沒有特定邏輯的情況下,會表現出來的特性:
(1)分布性
空間中隨機分布。這些計算機可以分布在不同的機房,不同的城市,甚至不同的國家。
(2)對等性
分布式系統中的計算機沒有主/從之分,組成分布式系統的所有節點都是對等的。在分布式系統最常見的概念之一是副本--數據副本和服務副本。數據副本是指在不同的節點上持久化同一份數據,當某一個節點上存儲的 數據丟失時,可以從副本上讀取到該數據,這是解決分布式系統數據丟失問題最為有效的手段。服務副本,指多個節點提供同樣的服務,每個節點都有 能力接收來自外部的請求並進行相應的處理。
(3)並發性
同一個分布式系統的多個節點,可能會並發地操作一些共享的資源,諸如數據庫或分布式存儲。
(4)缺乏全局時鍾
既然各個計算機之間是依賴於交換信息來進行相互通信,很難定義兩件事件的先后順序,缺乏全局始終控制序列。
(5)故障總會發生
組成分布式的計算機,都有可能在某一時刻突然間崩掉。分的計算機越多,可能崩掉一個的幾率就越大。如果再考慮到設計程序時的異常故障,也會加大故障的概率。
(6)處理單點故障
單點SPoF(Single Point of Failure):某個角色或者功能只有某一台計算機在支撐,在這台計算機上出現的故障是單點故障。
當然處理方式可以是采用上面所講的:集群。
四、如何設計分布式系統。
說白了就是: 如何合理將一個系統拆分成多個子系統部署到不同機器上。
將系統拆分成多個子系統,這就意味着拆分后的系統必然需要通過網絡進行互相通信聯系。所以通信中的穩定和安全也顯得尤為重要。隨着業務慢慢的增長,擴展性、可靠性、數據一致性都需要進行考慮。
(1)系統拆分成子系統。這個需要設計師好好設計,將一個大系統拆分成多個小系統,分層次來維護。
(2)設計系統間的通信。在這兒我們可以使用消息中間件,開源框架幫我們解決了這個問題。如Apache ActiveMQ、RabbitMQ、Apache RocketMQ、Apache Kafka等。
(3)設計分布式計算。開源框架有apReduce、Apache Hadoop、Apache Spark 等。
(4)大數據和分布式存儲。有Apache HBase、Apache Cassandra、Memcached、Redis、MongoDB等。
(5)分布式監控控制。常用的技術包括Nagios、Zabbix、Consul、ZooKeeper等。
這篇文章對於分布式系統進行了一個大體的講解,在接下來的文章當中,文章還會繼續對分布式有着更深入的講解和分析,基礎篇中會講到一些關於 線程、通信、一致性、容錯性、CPA等的認識,在之后其他篇中,還會講到分布式架構體系、消息服務。分布式存儲的開源框架均有講到。文章慢慢更新中。。。
文獻來源於:https://blog.csdn.net/mcb520wf/article/details/82456456