agent---?An agent is the long running daemon on every member of the Consul cluster座慰。agent能以client和server模式運(yùn)行,可以簡(jiǎn)稱為客戶端和服務(wù)器懂扼。
client---是一個(gè)將所有的RPC轉(zhuǎn)發(fā)到服務(wù)器的代理。客戶端唯一的交互就是參與LAN的八卦池?(LAN gossip pool)。
server---參與Raft仲裁惰说,維護(hù)集群狀態(tài),響應(yīng)RPC查詢缘回,與其他數(shù)據(jù)中心交換WAN信息助被,以及將查詢轉(zhuǎn)發(fā)給Leader或remote datacenters.
datacenter---數(shù)據(jù)中心定義為專用,低延遲和高帶寬的網(wǎng)絡(luò)環(huán)境切诀。保存數(shù)據(jù)。
Consensus---Consul使用共識(shí)協(xié)議?來(lái)提供一致性(由CAP定義)搔弄。共識(shí)協(xié)議基于?“Raft:尋找可理解的共識(shí)算法”幅虑。
LAN Gossip---?指包含全部位于同一局域網(wǎng)或數(shù)據(jù)中心的節(jié)點(diǎn)的LAN gossip pool。
WAN Gossip---Refers to the WAN gossip pool which contains only servers. 這些服務(wù)器主要位于不同的數(shù)據(jù)中心顾犹,通常通過(guò)互聯(lián)網(wǎng)或廣域網(wǎng)進(jìn)行通信倒庵。
RPC---遠(yuǎn)程過(guò)程調(diào)用。這是一個(gè)請(qǐng)求/響應(yīng)機(jī)制炫刷,允許客戶端發(fā)出服務(wù)器請(qǐng)求擎宝。
在每個(gè)數(shù)據(jù)中心內(nèi),我們都有客戶端和服務(wù)器的混合體浑玛。預(yù)計(jì)有三到五臺(tái)服務(wù)器绍申。這在故障情況下的可用性和性能之間取得了平衡,因?yàn)殡S著更多機(jī)器的添加顾彰,共識(shí)逐漸變慢极阅。但是,客戶數(shù)量沒(méi)有限制涨享,而且可以輕松擴(kuò)展到數(shù)千或數(shù)萬(wàn)個(gè)客戶筋搏。
數(shù)據(jù)中心內(nèi)的所有節(jié)點(diǎn)都參與到八卦協(xié)議中。這意味著有一個(gè)八卦池包含給定數(shù)據(jù)中心的所有節(jié)點(diǎn)厕隧。這有幾個(gè)目的:首先奔脐,不需要為客戶端配置服務(wù)器的地址;?發(fā)現(xiàn)是自動(dòng)完成的俄周。其次,檢測(cè)節(jié)點(diǎn)故障的工作不是放在服務(wù)器上髓迎,而是分布式的峦朗。這使得故障檢測(cè)比天真的心跳方案更具可擴(kuò)展性。第三竖般,它被用作消息層來(lái)通知重要事件甚垦,例如領(lǐng)導(dǎo)者選舉發(fā)生。
每個(gè)數(shù)據(jù)中心中的服務(wù)器都是單個(gè)Raft對(duì)等設(shè)備的一部分涣雕。這意味著他們一起選擇一個(gè)單獨(dú)的領(lǐng)導(dǎo)者艰亮,一個(gè)具有額外職責(zé)的選定服務(wù)器(Leader)。當(dāng)非Leader的服務(wù)器收到RPC請(qǐng)求時(shí)挣郭,它會(huì)將其轉(zhuǎn)發(fā)給集群Leader迄埃,Leader處理后會(huì)將結(jié)果Replication到各個(gè)節(jié)點(diǎn)上。
服務(wù)器節(jié)點(diǎn)也作為WAN八卦池的一部分運(yùn)行兑障。此池與LAN池不同侄非,因?yàn)樗槍?duì)互聯(lián)網(wǎng)的更高延遲進(jìn)行了優(yōu)化,并且預(yù)計(jì)僅包含其他Consul服務(wù)器節(jié)點(diǎn)流译。這個(gè)池的目的是讓數(shù)據(jù)中心以低觸摸的方式發(fā)現(xiàn)彼此逞怨。在線添加新數(shù)據(jù)中心就像加入現(xiàn)有的WAN八卦池一樣簡(jiǎn)單。因?yàn)檫@些服務(wù)器都在這個(gè)池中運(yùn)行福澡,所以它也支持跨數(shù)據(jù)中心的請(qǐng)求叠赦。當(dāng)服務(wù)器收到對(duì)不同數(shù)據(jù)中心的請(qǐng)求時(shí),會(huì)將其轉(zhuǎn)發(fā)到正確數(shù)據(jù)中心中的隨機(jī)服務(wù)器革砸。該服務(wù)器可能會(huì)轉(zhuǎn)發(fā)給當(dāng)?shù)仡I(lǐng)導(dǎo)除秀。
通常,數(shù)據(jù)不會(huì)在不同的Consul數(shù)據(jù)中心之間復(fù)制算利。當(dāng)對(duì)另一個(gè)數(shù)據(jù)中心中的資源發(fā)出請(qǐng)求時(shí)册踩,本地Consul服務(wù)器將RPC請(qǐng)求轉(zhuǎn)發(fā)給該資源的遠(yuǎn)程Consul服務(wù)器并返回結(jié)果。如果遠(yuǎn)程數(shù)據(jù)中心不可用效拭,那么這些資源也將不可用暂吉,但這不會(huì)影響本地?cái)?shù)據(jù)中心。在某些特殊情況下缎患,可以復(fù)制有限的數(shù)據(jù)子集借笙,例如Consul的內(nèi)置?ACL復(fù)制功能或外部工具(如consul-replicate)。
共識(shí)協(xié)議:consul是通過(guò)raft來(lái)保持強(qiáng)一致性较锡。通過(guò)raft選舉出Leader业稼,日志條目的復(fù)制來(lái)保證數(shù)據(jù)一致。
只有Consul服務(wù)器節(jié)點(diǎn)參與Raft并且是對(duì)等設(shè)置的一部分蚂蕴。所有client都將請(qǐng)求轉(zhuǎn)發(fā)給server 這種設(shè)計(jì)的部分原因是低散,隨著更多成員被添加到對(duì)等設(shè)置中俯邓,法定數(shù)量的大小也會(huì)增加。這會(huì)引起性能問(wèn)題熔号,因?yàn)槟赡軙?huì)等待數(shù)百臺(tái)機(jī)器同意進(jìn)入而不是少數(shù)幾臺(tái)機(jī)器稽鞭。
不理解: LAN和WAN的八卦協(xié)議中的故障檢測(cè)功能
Gossip協(xié)議:
領(lǐng)事使用兩個(gè)不同的八卦池。我們將每個(gè)池分別稱為L(zhǎng)AN或WAN池引镊。Consul運(yùn)營(yíng)的每個(gè)數(shù)據(jù)中心都有一個(gè)包含數(shù)據(jù)中心所有成員(包括客戶端和服務(wù)器)的LAN八卦池朦蕴。LAN池用于幾個(gè)目的。成員資格信息允許客戶自動(dòng)發(fā)現(xiàn)服務(wù)器弟头,從而減少所需的配置數(shù)量吩抓。分布式故障檢測(cè)允許整個(gè)集群共享故障檢測(cè)工作,而不是集中在幾臺(tái)服務(wù)器上赴恨。最后疹娶,八卦游戲池允許可靠和快速的事件廣播,比如領(lǐng)袖選舉伦连。
WAN池是全球唯一的雨饺,因?yàn)闊o(wú)論數(shù)據(jù)中心如何,所有服務(wù)器都應(yīng)該參與WAN池惑淳。WAN池提供的成員資格信息允許服務(wù)器執(zhí)行跨數(shù)據(jù)中心請(qǐng)求额港。集成的故障檢測(cè)功能使Consul能夠正常處理丟失連接的整個(gè)數(shù)據(jù)中心,或僅處理遠(yuǎn)程數(shù)據(jù)中心內(nèi)的單個(gè)服務(wù)器歧焦。
信號(hào)量(分布式鎖)是基于session機(jī)制的锹安。
? ? ? ?Consul提供的合約,發(fā)生如下任一情況倚舀,session都會(huì)被銷毀:
? ? ? ??節(jié)點(diǎn)銷毀
? ? ? ??任何的健康檢查,注銷
? ? ? ??任何健康檢查都要進(jìn)入Critical狀態(tài)
? ? ? ??會(huì)話被顯式銷毀
? ? ? ??TTL到期忍宋,如果適用
當(dāng)session失效后痕貌,會(huì)被銷毀,不能再使用糠排。如果使用release舵稠,任何與該session相關(guān)的鎖都會(huì)被釋放,并且持有該鎖的key的ModifyIndex也會(huì)遞增入宦。如果使用了Delete哺徊,持有該鎖的KEY將會(huì)被刪除。