Cousul 簡介
來自官網(wǎng)的介紹
作用:基于GO語言開發(fā),用于實(shí)現(xiàn)分布式系統(tǒng)的服務(wù)發(fā)現(xiàn)與配置的等管理。
特性:
Raft 算法 分布式一致性協(xié)議的算法方式。所謂的CP的特性。
服務(wù)發(fā)現(xiàn): Consul提供了通過DNS或者HTTP接口的方式來注冊(cè)服務(wù)和發(fā)現(xiàn)服務(wù)。一些外部的服務(wù)通過Consul很容易的找到它所依賴的服務(wù)。
健康檢測(cè): Consul的Client提供了健康檢查的機(jī)制,可以通過用來避免流量被轉(zhuǎn)發(fā)到有故障的服務(wù)上。
Key/Value存儲(chǔ): 應(yīng)用程序可以根據(jù)自己的需要使用Consul提供的Key/Value存儲(chǔ)。 Consul提供了簡單易用的HTTP接口,結(jié)合其他工具可以實(shí)現(xiàn)動(dòng)態(tài)配置、功能標(biāo)記、領(lǐng)袖選舉等等功能。,可以用于配置中心等。
多數(shù)據(jù)中心: Consul支持開箱即用的多數(shù)據(jù)中心. 這意味著用戶不需要擔(dān)心需要建立額外的抽象層讓業(yè)務(wù)擴(kuò)展到多個(gè)區(qū)域。
WEB UI 服務(wù)管理
Consul 角色
- DEV 啟動(dòng)模式(單節(jié)點(diǎn)的形式安裝部署-開發(fā)模式)
用于本地開發(fā)環(huán)境下的方便的進(jìn)行測(cè)試。如果是線上的環(huán)境的一般我們的是用集群的模式。Consul啟動(dòng)時(shí)候就是一個(gè)服務(wù)注冊(cè)中心.
開發(fā)模式的下,一般我們的都是基于客戶端的自注冊(cè)的模式進(jìn)行,意思就是服務(wù)啟動(dòng)的時(shí)候,把服務(wù)的信息都提交到的我們的注冊(cè)中心上。
-
線上啟動(dòng)模式
-- client 客戶端模式 無狀態(tài),作用是把外部請(qǐng)求過來的HTTP或DNS的接口請(qǐng)求轉(zhuǎn)發(fā)到內(nèi)部server服務(wù)端的集群。主要起到的作用是一個(gè)代理。-- server 服務(wù)端,保存配置信息,線上環(huán)境一般肯定是需要配置成高可用形式。官網(wǎng)的建議是每個(gè)數(shù)據(jù)中心的server數(shù)量推薦為3 或 5個(gè) 奇數(shù)個(gè)服務(wù)。
關(guān)于server 因?yàn)榛贑P下的強(qiáng)一致性的問題,如果server過多的也增加server之間數(shù)據(jù)同步的時(shí)間。所以也不是越多越好。
當(dāng)我們的集群有一半的掛了基本整個(gè)集群就不可用了!
線上模式下的Consul 架構(gòu)

請(qǐng)求流程

consul 工作流
-
服務(wù)發(fā)現(xiàn)以及注冊(cè):
當(dāng)服務(wù)的生產(chǎn)者producer 啟動(dòng)的時(shí)候,把自身的服務(wù)的元數(shù)據(jù)信息提交到Consul,Consul接受到注冊(cè)信息后,會(huì)每隔10秒(默認(rèn)值)想注冊(cè)的服務(wù)Prodcucer進(jìn)行健康檢查。
服務(wù)調(diào)用
當(dāng)我們的Consumerl消費(fèi)者請(qǐng)求Prodcuer的是,會(huì)先從Consul獲取到存貯Producter的數(shù)據(jù)(地址IP 和端口等)的臨時(shí)表,從這個(gè)臨時(shí)表里面任選一個(gè)Producr是的IP和Port,進(jìn)行服務(wù)的請(qǐng)求
關(guān)于臨時(shí)表,只會(huì)包含通過健康的檢查的的服務(wù),且會(huì)根據(jù) 默認(rèn)的間隔時(shí)間進(jìn)行更新同步。