一腔彰、Eureka
????Eureka采用了CS的設計架構叫编,Eureka? Server作為服務注冊功能的服務器,它是服務注冊中心霹抛。而系統(tǒng)中的其他微服務搓逾,使用Eureka的客戶端連接到Eureka Server并維持心跳連接。這樣系統(tǒng)的運維人員就可以通過Eureka Server來監(jiān)控系統(tǒng)中能夠各個微服務是否正常運行杯拐。
? ? 當服務啟動的時候霞篡,會把自己服務器的信息(比如服務地址/通訊地址等)以別名方式注冊到注冊測中心上。另一方(消費者|服務提供者)以該別名的方式去注冊中心上獲取實際的服務通訊地址端逼,然后再實現(xiàn)本地RPC調(diào)用遠程RPC朗兵。
? ? 1.Eureka的兩個組件
Eureka Server 提供服務注冊服務:各個微服務節(jié)點通過配置啟動后,會在EurekaServer中進行注冊顶滩,這樣EurekaServer中的服務器注冊表中將會存儲所有可用服務節(jié)點的信息余掖,服務節(jié)點的信息會在界面中進行直觀展示。
EurekaClient 通過注冊中心訪問:它是一個Java客戶端礁鲁,用于簡化EurekaServer的交互浊吏,客戶端同時也具備一個內(nèi)置的、使用輪詢(round-robin)負載算法的負載均衡器救氯。在應用啟動后找田,將會向EurekaServer發(fā)送心跳(默認周期為30秒)。如果EurekaServer在多個心跳周期內(nèi)沒有接收到某個節(jié)點的心跳着憨,EurekaServer將會從服務注冊表中把這個服務節(jié)點移除(默認90秒)
**名詞解釋**
服務注冊 Register: 當 Eureka 客戶端向 Eureka Server 注冊時墩衙,它提供自身的元數(shù)據(jù),比如IP地址甲抖、端口漆改,運行狀況指示符URL,主頁等准谚。
服務續(xù)約 Renew: Eureka 客戶會每隔30秒(默認情況下)發(fā)送一次心跳來續(xù)約挫剑。通過續(xù)約來告知 Eureka Server 該 Eureka 客戶仍然存在,沒有出現(xiàn)問題柱衔。正常情況下樊破,如果 Eureka Server 在90秒沒有收到 Eureka 客戶的續(xù)約愉棱,它會將實例從其注冊表中刪除。
獲取注冊列表信息 Fetch Registries: Eureka 客戶端從服務器獲取注冊表信息哲戚,并將其緩存在本地奔滑。客戶端會使用該信息查找其他服務顺少,從而進行遠程調(diào)用朋其。該注冊列表信息定期(每30秒鐘)更新一次。每次返回注冊列表信息可能與 Eureka 客戶端的緩存信息不同, Eureka 客戶端自動處理脆炎。如果由于某種原因導致注冊列表信息不能及時匹配梅猿,Eureka 客戶端則會重新獲取整個注冊表信息。Eureka 服務器緩存注冊列表信息秒裕,整個注冊表以及每個應用程序的信息進行了壓縮袱蚓,壓縮內(nèi)容和沒有壓縮的內(nèi)容完全相同。Eureka 客戶端和 Eureka 服務器可以使用JSON / XML格式進行通訊簇爆。在默認的情況下 Eureka 客戶端使用壓縮 JSON 格式來獲取注冊列表的信息癞松。
服務下線 Cancel : Eureka客戶端在程序關閉時向Eureka服務器發(fā)送取消請求。發(fā)送請求后入蛆,該客戶端實例信息將從服務器的實例注冊表中刪除响蓉。該下線請求不會自動完成,它需要調(diào)用以下內(nèi)容:DiscoveryManager.getInstance().shutdownComponent();
服務剔除 Eviction: 在默認的情況下哨毁,當Eureka客戶端連續(xù)90秒(3個續(xù)約周期)沒有向Eureka服務器發(fā)送服務續(xù)約枫甲,即心跳,Eureka服務器會將該服務實例從服務注冊列表刪除扼褪,即服務剔除想幻。
? ??2.Eureka自我保護機制
為什么? 當EurekaClient與EurekaServer網(wǎng)絡不通時话浇,EurekaServer不會立刻把EurekaClient服務剔除
是什么脏毯?默認情況下,如果EurekaServer在一定時間內(nèi)沒有收到某個微服務實例的心跳幔崖,EurekaServer將會注銷該實例(默認90秒)食店。但是當網(wǎng)絡分區(qū)故障發(fā)生(延時、卡頓赏寇、擁擠)時吉嫩,微服務與EruekaServer之間無法正常通信,以上行為可能變得非常危險了——因為微服務本身其實是健康的嗅定,此時不應該注銷這個微服務自娩。這時候就需要進行自我保護模式。?
? ? 3. Eureka現(xiàn)狀
? ? Eureka1.0仍可以使用渠退,但是2.0版本已經(jīng)停更忙迁。
二脐彩、zookeeper
????Zookeeper是一個分布式的,開放源碼的分布式應用程序協(xié)調(diào)服務动漾,是Google的Chubby開源的實現(xiàn)丁屎,是Hadoop和Hbase的重要組件荠锭。它是一個為分布式應用提供一致性服務的軟件旱眯,提供的功能包括:配置維護、域名服務证九、分布式同步删豺、組服務等。??
(zookeeper=文件系統(tǒng)+監(jiān)聽通知機制)
? ? 1.Zookeeper的節(jié)點類型
① 臨時節(jié)點 ②帶序號的臨時節(jié)點 ③ 持久節(jié)點 ④帶序號的持久節(jié)點
? ? 2. Zookeeper作為注冊中心愧怜,其節(jié)點是臨時節(jié)點
在與服務提供者失去心跳連接一段時間后呀页,zookeeper將會把該服務信息刪除,如果該服務重新注冊拥坛,就能獲取服務注冊信息蓬蝶。
三、consul
? ? Consul 是一套開源的分布式服務發(fā)現(xiàn)和配置管理系統(tǒng)猜惋,由HashiCorp公司用Go語言開發(fā)丸氛。
? ? 提供了微服務系統(tǒng)中的服務治理、配置中心著摔、控制總線等功能缓窜。這些功能中的每一個都可以根據(jù)需要單獨使用,也可以一起使用以構建全方位的服務網(wǎng)絡谍咆。
四禾锤、三個組件的異同點
? ? Erueka -- 注重可用性和容錯性,在與服務提供者斷連以后仍保留該服務節(jié)點的數(shù)據(jù)摹察。
? ? Consul和Zookeeper -- 注重一致性和容錯性恩掷,會在默認時間內(nèi)刪除服務節(jié)點信息,反應快供嚎。
? ? CAP架構
C:Consistency (強一致性)
A:Availability(可用性)
P:Partition tolerance(分區(qū)容錯性)