Consul
ConsulAgent是Consul的核心進(jìn)程,Agent的工作是維護(hù)成員關(guān)系信息馁龟、注冊(cè)服務(wù)崩侠、健康檢查、響應(yīng)查詢等等坷檩。Consul集群的每一個(gè)節(jié)點(diǎn)都必須運(yùn)行agent進(jìn)程却音。
Agent有兩種模式:client或server。
Server要參與consensusquorum矢炼,當(dāng)遇到故障情況時(shí)系瓢,這些節(jié)點(diǎn)通過(guò)Raft提供強(qiáng)一致性和強(qiáng)有效性,在Server節(jié)點(diǎn)上的較高負(fù)載意味著它們應(yīng)該運(yùn)行在專屬的實(shí)例——它們比客戶端節(jié)點(diǎn)更為資源密集型句灌。在整個(gè)集群中夷陋,絕大部分都為Client節(jié)點(diǎn)。
client把所有的RPCs轉(zhuǎn)發(fā)到server端,是相對(duì)無(wú)狀態(tài)的。唯一在后臺(tái)運(yùn)行的時(shí)client端執(zhí)行了LAN gossip pool匕荸,只消耗極少的資源和網(wǎng)絡(luò)帶寬爹谭。
Eureka
Eureka 是什么?
Eureka是Netflix開(kāi)發(fā)的服務(wù)發(fā)現(xiàn)框架,本身是一個(gè)基于REST的服務(wù)榛搔,主要用于定位運(yùn)行在AWS域中的中間層服務(wù)诺凡,以達(dá)到負(fù)載均衡和中間層服務(wù)故障轉(zhuǎn)移的目的。SpringCloud將它集成在其子項(xiàng)目spring-cloud-netflix中践惑,一實(shí)現(xiàn)SpringCloud的服務(wù)發(fā)現(xiàn)功能腹泌。
GitHub:https://github.com/Netflix/eureka
Eureka高層次的體系結(jié)構(gòu)
Eureka包含兩個(gè)組件:Eureka Server和Eureka Client。
Eureka Server提供服務(wù)注冊(cè)服務(wù)尔觉,各個(gè)節(jié)點(diǎn)啟動(dòng)后凉袱,會(huì)在Eureka Server中進(jìn)行注冊(cè),這樣EurekaServer中的服務(wù)注冊(cè)表中將會(huì)存儲(chǔ)所有可用服務(wù)節(jié)點(diǎn)的信息侦铜,服務(wù)節(jié)點(diǎn)的信息可以在界面中直觀的看到专甩。
Eureka Client是一個(gè)java客戶端,用于簡(jiǎn)化與Eureka Server的交互钉稍,客戶端同時(shí)也就別一個(gè)內(nèi)置的涤躲、使用輪詢(round-robin)負(fù)載算法的負(fù)載均衡器。
在應(yīng)用啟動(dòng)后贡未,將會(huì)向Eureka Server發(fā)送心跳,默認(rèn)周期為30秒种樱,如果Eureka Server在多個(gè)心跳周期內(nèi)沒(méi)有接收到某個(gè)節(jié)點(diǎn)的心跳,Eureka Server將會(huì)從服務(wù)注冊(cè)表中把這個(gè)服務(wù)節(jié)點(diǎn)移除(默認(rèn)90秒)俊卤。
Eureka Server之間通過(guò)復(fù)制的方式完成數(shù)據(jù)的同步嫩挤,Eureka還提供了客戶端緩存機(jī)制,即使所有的Eureka
Server都掛掉瘾蛋,客戶端依然可以利用緩存中的信息消費(fèi)其他服務(wù)的API俐镐。綜上,Eureka通過(guò)心跳檢查哺哼、客戶端緩存等機(jī)制佩抹,確保了系統(tǒng)的高可用性、靈活性和可伸縮性取董。