eureka服務治理基礎架構包括三個核心要素。
1、服務註冊中心
eureka分為客戶端和服務端,eureka服務端提供服務註冊與發現的功能。
2、服務提供者
提供服務的應用,spring boot應用或者遵循eureka通訊機制的應用。
將應用自己註冊到eureka註冊中心,以供其它應用的發現。
3、服務消費者
消費者從服務註冊中心獲取服務列表,通過客戶端負載均衡某種算**詢服務列表,
然後呼叫其所需要的服務,也即呼叫對應的服務提供者。
注意,在某些情況下,服務既是提供者也是消費者,
比如服務a呼叫b,b呼叫c,這個時候b既是提供者,也是消費者。
eureka各個元素間的運作原理如下圖:
這裡假設啟動了兩個服務提供者,兩個集群eureka server,兩個服務消費者。
1、服務提供者
--服務註冊(register)
從圖中可以看到,服務提供者在啟動的時候通過傳送rest請求,將自己註冊到eureka server註冊中心,
註冊資訊包含一些元資料資訊。eureka server接收到請求後,將元資料儲存在乙個雙層結構map中,
第一層的key是服務名,第二層的key是具體服務的例項名。
--服務同步(replicate)
圖中提供了兩個服務提供者,分別向兩個註冊中心註冊,因為服務註冊中心為集群部署,註冊中心互相註冊,
當服務提供者傳送請求到乙個註冊中心時,註冊中心會將註冊的資訊**給其它集群相連的註冊中心,
完成註冊中心之間的服務同步。通過註冊中心之間的服務同步,集群註冊中心服務資訊保持一致,
這樣就可以通過任意一台註冊中心獲取服務列表。
--服務續約(renew)
服務提供者註冊完成後,會維護乙個心跳,用來持續的告訴註冊中心,我還活著,避免eureka server 將服務提供者
從註冊中心剔除,這種操作行為我們稱為服務續約。
2、服務消費者
--獲取服務(get registry)
服務消費者在啟動的時候,向註冊中心傳送rest請求給服務註冊中心,從服務註冊中心獲取服務列表清單。
eureka server維護乙份唯讀的服務清單返回給客戶端,同時該快取清單預設每隔30秒更新一次。
--服務呼叫(invoke server)
服務消費者在獲取服務清單後,通過服務名可以獲得提供服務的例項名和該例項的元資料資訊。
如果使用ribbon客戶端負載均衡,可以採用某種算**詢進行呼叫。
--服務下線(cancel)
系統執行過程中總會有面臨關閉或重啟服務某個例項的情況,在服務關閉期間,我們不希望客戶端會
繼續呼叫關閉的服務例項。當服務例項進行正常關閉操作時,它會觸發乙個服務下線的rest請求eureka server,
註冊中心收到請求時,服務端將該服務狀態置為下線(down),同時把該下線事件傳播下去。
3、服務註冊中心
--失效剔除(evict)
服務有時候並不一定會正常下線,可能由於異常故障使服務執行不正常,但是,服務註冊中心並未收到"服務下線"請求。
註冊中心為了將這些無法提供服務的例項剔除,eureka server在啟動的時候會建立乙個定時任務,
預設每隔一段時間(預設為60秒)將當前清單中超時(預設為90秒)沒有續約的服務從註冊中心剔除。
--自我保護
預設情況下,如果eureka server在一定時間內(預設90秒)沒有接收到某個微服務例項的心跳,
eureka server將會移除該例項。但是當網路分割槽故障發生時,微服務與eureka server之間無法正常通訊,
而微服務本身是正常執行的,此時不應該移除這個微服務,所以引入了自我保護機制。
自我保護機制的工作機制是如果在15分鐘內超過85%的客戶端節點都沒有正常的心跳,
那麼eureka就認為客戶端與註冊中心出現了網路故障,eureka server自動進入自我保護機制,
此時會出現以下幾種情況:
1)eureka server不再從註冊列表中移除因為長時間沒收到心跳而應該過期的服務。
2)eureka server仍然能夠接受新服務的註冊和查詢請求,但是不會被同步到其它節點上,
保證當前節點依然可用。
3)當網路穩定時,當前eureka server新的註冊資訊會被同步到其它節點中。
因此eureka server可以很好的應對因網路故障導致部分節點失聯的情況,
而不會像zk(zookeeper)那樣如果有一半不可用的情況會導致整個集群不可用而變成癱瘓。
spring cloud eureka服務發現
服務端 enableeurekaserver public class public static void main string args eureka伺服器沒有後端儲存,但註冊的服務例項都有傳送心跳保持他們的登記日期 這可以在記憶體中完成 客戶也有乙個記憶體中的快取 所以他們不需要為每乙個服務...
spring cloud eureka服務發現
size x large color black b 1.eureka服務端 b color size 服務端 size large color black b 1.1高可用和域 b color size eureka伺服器沒有後端儲存,但註冊的服務例項都有傳送心跳保持他們的登記日期 這可以在記憶體...
Spring Cloud Eureka實現集群呼叫
雖然出現報錯資訊,但是,整個程式並沒有出錯。至於原因,上的文字已經很好的解釋了。在此,再簡單的說一下。出現這種情況的原因是,我們的程式已經啟動 已經出現紅框中此條日誌,代表程式已經啟動,所以程式本身沒有問題。為什麼會出現錯誤呢?是因為在此系統中,我們要搭建的是集群環境,每一台伺服器在自己啟動之後,都...