一、概述java
1.1 Spring Cloud Eureka是Spring Cloud Netflix微服務套件中的一部分,基於Netflix Eureka作了二次封裝,主要負責完成微服務架構中的服務治理功能;json
1.2 Spring Cloud經過爲Eureka增長了Spring Boot風格的自動化配置,咱們只須要經過簡單引入依賴、註解配置就能讓Spring Boot構建的微服務應用輕鬆地與Eureka服務治理體系進行整合;緩存
1.3 Spring Cloud Eureka包含了服務端組件、客戶端組件,而且均採用java編寫;架構
Eureka服務端:負載均衡
也稱爲服務註冊中心;框架
同其餘服務註冊中心同樣,支持高可用配置;微服務
在SpringBoot啓動類經過@EnableEurekaServer註解啓動一個註冊中心;spa
Eureka客戶端:設計
處理服務註冊、服務發現;對象
客戶端經過@EnableDiscoveryClient註解和參數配置的方式,嵌入在客戶端應用程序的代碼中;
在應用程序運行時,Eureka客戶端向註冊中心(Eureka服務端)註冊自身提供的服務並週期性地發送心跳來更新它的服務租約;
Eureka客戶端也能從服務端查詢當前註冊的服務信息並把它們緩存到本地並週期性地刷新服務狀態;
二、服務治理:
微服務架構中最爲核心、基礎的模塊;
做用:實現各個微服務實例的自動化註冊與發現
爲了解決微服務架構中的服務實例維護問題,產生了大量的服務治理框架和產品,這些框架和產品的實現都圍繞着服務註冊、服務發現機制來完成對微服務應用實例的自動化管理;
1.1 服務註冊:
在服務治理框架中,一般會構建一個註冊中心,每一個服務單元向註冊中心登記本身提供的服務,將主機與端口號、版本號、通訊協議等一些附加信息告知註冊中心,註冊中心按服務名分類組織服務清單;
1.2 服務發現:
因爲在服務治理框架下運做,服務間的調用再也不經過指定具體的實例地址來實現,而是經過向服務名發起請求調用實現;
服務調用方在調用服務提供方接口的時候,並不知道提供方的服務實例的具體位置,須要向服務註冊中心諮詢服務,並獲取全部服務實例清單,以實現對具體實例的訪問;
三、高可用註冊中心
1.1 在Eureka的服務治理設計中,全部的節點既是服務提供方,也是服務消費方,服務註冊中心也同樣;
Eureka Server的高可用實際上就是將本身做爲服務向其餘服務註冊中心註冊本身,這樣能夠造成一組互相註冊的服務註冊中心,以實現服務清單的互相同步,達到高可用的效果;
1.2 暫擱置
四、服務發現與消費
1.1 服務發現的任務由Eureka的客戶端完成;
1.2 服務消費由Ribbon完成;
Ribbon:
一個基於HTTP和TCP的客戶端負載均衡器;
經過在客戶端中配置的ribbonServerList服務端列表去輪詢訪問以達到負載均衡的做用;
當Ribbon和Eureka聯合使用時,Ribbon的服務實例清單RibbonServerList會被DiscoveryEnableNIWSServerList重寫,擴展成從Eureka註冊中心獲取服務端列表,同時也會用NIWSDiscoveryPing來取代IPing,它將職責委託給Eureka來肯定服務端是否已經啓動;
五、Eureka詳解
1.1 基礎架構
服務註冊中心:
EurekaServer
服務提供者:
提供服務的應用,能夠是Spring boot應用,也能夠是其餘技術平臺(遵循Eureka通訊機制的應用);
服務消費者:
消費者應用從服務註冊中心獲取服務列表,從而使消費者能夠知道去哪調用其須要的服務;
1.2 通訊機制
Eureka採用了 與平臺無關性的 基於HTTP的Rest接口;
默認狀況下,Eureka使用Jersey、XStream配合json做爲Server與Client之間的通訊協議:
Jersey:JAX-RS的參考實現;
JAX-RS:
java EE6引入的新技術,即java API for Restful Web Services;
XStream:將對象序列化成json、反序列化爲對象的一個java類庫;