分布式概念及相关的名词定义
分布式概述
相關定義
分布式(distributed)
分布式(distributed)是為了解決單個物理服務器容量和性能瓶頸問題而采用的優化手段,將一個業務拆分成不同的子業務,分布在不同的機器上執行。服務之間通過遠程調用協同工作,對外提供服務。
該領域需要解決的問題極多,在不同的技術層面上,又包括:分布式緩存、分布式數據庫、分布式計算、分布式文件系統等,一些技術如MQ、Redis、zookeeper等都跟分布式有關。
分布式兩種形式
從理念上講,分布式的實現有兩種形式:
水平擴展:當一臺機器扛不住流量時,就通過添加機器的方式,將流量平分到所有服務器上,所有機器都可以提供相同的服務;
垂直拆分:前端有不同業務需求時,一臺機器扛不住流量,可以將不同的業務需求分發到不同的機器上,比如A機器處理余票查詢的請求,B機器處理支付的請求。
集群(cluster)
集群(cluster)是指在多臺不同的服務器中部署相同應用或服務模塊,構成一個集群,通過負載均衡設備對外提供服務。
集群兩個特點
可擴展性:集群中的服務節點,可以動態的添加機器,從而增加集群的處理能力。
高可用性:如果集群某個節點發生故障,這臺節點運行的服務,可以被其他服務節點接管,從而增強集群的高可用性。
集群兩大能力
負載均衡:負載均衡能把任務比較均衡地分布到集群環境下的服務節點上。
集群容錯:集群服務調用失敗后,服務框架能夠根據容錯策略在底層自動容錯,不影響服務的正常提供
微服務(Mocroservice)
微服務就是很小的服務,小到一個服務只對應一個單一的功能,只做一件事。這個服務可以單獨部署運行,服務之間通過遠程調用協同工作,每個微服務都是由獨立的小團隊開發,測試,部署,上線,負責它的整個生命周期。
維基上對其定義為:一種軟件開發技術- 面向服務的體系結構(SOA)架構樣式的一種變體,它提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務與服務間采用輕量級的通信機制互相溝通(通常是基于HTTP的RESTful API)。每個服務都圍繞著具體業務進行構建,并且能夠獨立地部署到生產環境、類生產環境等。另外,應盡量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據上下文,選擇合適的語言、工具對其進行構建。
多線程(multi-thread)
多線程(multi-thread):多線程是指程序中包含多個執行流,即在一個程序中可以同時運行多個不同的線程來執行不同的任務。多線程是為了提高CPU的利用率。
高并發(High Concurrency)
高并發(High Concurrency)是一種系統運行過程中發生了一種“短時間內遇到大量請求”的情況,高并發對應的是訪問請求,多線程是解決高并發的方法之一,高并發還可以通過分布式,集群,算法優化,數據庫優化等方法解決。
分布式系統設計理念
分布式系統的目標與要素
分布式系統的目標是提升系統的整體性能和吞吐量,另外還要盡量保證分布式系統的容錯性(假如增加10臺服務器才達到單機運行效果2倍左右的性能,那么這個分布式系統就根本沒有存在的意義)。
即使采用了分布式系統,我們也要盡力運用并發編程、高性能網絡框架等等手段提升單機上的程序性能。
分布式系統設計兩大思路:中心化和去中心化
中心化設計
兩個角色:Leader & Worker
中心化的設計思想很簡單,分布式集群中的節點機器按照角色分工,大體上分為兩種角色:“領導”和“干活的”角色
職責:
“領導”通常負責分發任務并監督“干活的”,發現誰太閑了,就想方設法地給其安排新任務,確保沒有一個“干活的”能夠偷懶,如果“領導”發現某個“干活的”因為勞累過度而病倒了,則是不會考慮先嘗試“醫治”他,而是一腳踢出去,然后把他的任務分給其他人。
其中微服務架構Kubernetes就恰好采用了這一設計思路。
“領導”的安危問題
中心化設計的問題中心化的設計存在的最大問題是**“領導”的安危問題**,如果“領導”出了問題,則群龍無首,整個集群就奔潰了。但我們可以同時安排兩個“領導”以避免單點問題。
中心化設計還存在另外一個潛在的問題,既“領導”的能力問題:可以領導10個人高效工作并不意味著可以領導100個人高效工作,所以如果系統設計和實現得不好,問題就會卡在“領導”身上。
領導安危問題的解決辦法:
大多數中心化系統都采用了主備兩個“領導”的設計方案,可以是熱備或者冷備,也可以是自動切換或者手動切換,而且越來越多的新系統都開始具備自動選舉切換“領導”的能力,以提升系統的可用性。
去中心化設計
眾生地位平等:
在去中心化的設計里,通常沒有“領導”和“干活的”這兩種角色的區分,大家的角色都是一樣的,地位是平等的,全球互聯網就是一個典型的去中心化的分布式系統,聯網的任意節點設備宕機,都只會影響很小范圍的功能。
“去中心化”不是不要中心,而是由節點自由選擇中心。
(集群的成員會自發的舉行“會議”選舉新的“領導”主持工作。最典型的案例就是ZooKeeper及Go語言實現的Etcd)
“腦裂”問題
去中心化設計里最難解決的一個問題是**“腦裂”問題**,這種情況的發生概率很低,但影響很大。腦裂指一個集群由于網絡的故障,被分為至少兩個彼此無法通信的單獨集群,此時如果兩個集群都各自工作,則可能會產生嚴重的數據沖突和錯誤。
“腦裂”問題解決方法
一般的設計思路是,當集群判斷發生了腦裂問題時,規模較小的集群就“自殺”或者拒絕服務。
總結
以上是生活随笔為你收集整理的分布式概念及相关的名词定义的全部內容,希望文章能夠幫你解決所遇到的問題。