由於網上介紹的分布式的系統講解並沒有多少,所以在這兒就希望可以寫一套系統的分布式的詳解,未來也結合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等的認識,在之後其他篇中,還會講到分布式架構體系、訊息服務。分布式儲存的開源框架均有講到。文章慢慢更新中。。。
文獻**於:
分布式系統學習之基礎知識概論(一)
一 引言 由於網上介紹的分布式的系統講解並沒有多少,所以在這兒就希望可以寫一套系統的分布式的詳解,未來也結合springboot的搭建分布式系統進行詳細構建。也願意堅持寫下去,寫給自己也分享給大家,希望大家可以提出寶貴的意見,一同長進。哈哈。第一篇文章,開個頭。二 分布式定義。了解起來分布式呢,順便...
分布式鎖 一 基礎知識
一 在討論鎖之前,我們需要先看下程序之間的兩種主要關係,同步和互斥。互斥 是指散步在不同程序之間的若干程式片段,當某個程序執行其中乙個程式片段時,其它程序就不能執行它 們之中的任一程式片段,只能等到該程序執行完這個程式片段後才可以執行。指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。...
Redis分布式集群 基礎知識 1
redis如今已經成為web開發社群中最火熱的記憶體資料庫之一,而它的誕生但現在不過才4年。點此檢視redis中文官方文件 redis是乙個開源的高效能鍵值key value對資料庫,它通過提供多種鍵值資料庫型別來適應不同場景下的儲存需求,並借助許多高層級的介面使其可以勝任如快取 佇列系統等不同的角...