spring cloud Eureka 服務註冊與服務發現的學習(1)

Spring Cloud Eureka

        是 Spring Cloud Netflix 微服務套件中的一部分, 它基於 Netflix Eureka 作了二次封裝, 主要負責完成微服務架構中的服務治理功能。 Spring Cloud 經過爲Eureka 增長了 Spring Boot 風格的自動化配置,咱們只需經過簡單引入依賴和註解配置就能讓 Spring Boot 構建的微服務應用輕鬆地與 Eureka 服務治理體系進行整合。spring

服務治理

       Eureka能夠說是微服務架構中最爲核心和基礎的模塊,它主要用來實現各個微服務實例的自動化註冊與發現。數據庫

        咱們以前在實現分佈式系統架構時,可能拆分的服務系統並很少,而當服務須要互相調用時,咱們採用的都是靜態配置(編寫配置文件,文件中存放其餘服務的IP:端口號;或者將其餘系統的IP:端口號放在數據庫的表中;甚至還提供服務的配置頁面,方便人工手動更改)。緩存

        可是隨着業務的發展, 系統功能愈來愈複雜, 相應的微服務應用也不斷增長, 咱們的靜態配置就會變得愈來愈難以維護。 而且面對不斷髮展的業務,咱們的集羣規模、 服務的位置 、 服務的命名等都有可能發生變化, 若是仍是經過人工維護的方式, 那麼極易發生錯誤或是命名衝突等問題。 同時, 對於這類靜態內容的維護也必將消耗大量的人力。架構

        爲了解決微服務架構中的服務實例維護問題, 產生了大量的服務治理框架和產品。 這些框架和產品的實現都圍繞着服務註冊與服務發現機制來完成對微服務應用實例的自動化管理。負載均衡

      服務註冊:

        在服務治理框架中, 一般都會構建一個註冊中心, 每一個服務單元向註冊中心登記本身提供的服務, 將主機與端口號、 版本號、 通訊協議等一些附加信息告知註冊中心, 註冊中心按服務名分類組織服務清單。 好比, 咱們有兩個提供服務A的進程分別運行於 192.168.0.100:8000和192.168.0.101:8000位置上,另外還有三個 提供服務B的進程分別運行千192.168.0.100:9000 、192.168.0.101:9000、 192.168.0.102:9000位置上。 當這些進程均啓動,並向註冊中心註冊本身的服務以後, 註冊中心就會維護相似下面的一個服務清單。另外, 服務註冊中心還須要以心跳的方式去監測清單中的服務是否可用, 若不可用須要從服務清單中剔除, 達到排除故障服務的效果。框架

    服務發現:

       因爲在服務治理框架下運做, 服務間的調用再也不經過指定具體的實例地址來實現, 而是經過向服務名發起請求調用實現。 因此, 服務調用方在調用服務提供方接口的時候, 並不知道具體的服務實例位置。 所以, 調用方須要向服務註冊中心諮詢服務, 並獲取全部服務的實例清單, 以實現對具體服務實例的訪問。 好比,現有服務C但願調用服務A, 服務C就須要向註冊中心發起諮詢服務請求, 服務註冊中心就會將服務A的位置清單返回給服務C, 如按上例服務A的狀況,C便得到了服務A的兩個可用位置 192.168.0.100:8000和192.168.0.101:8000。當服務C要發起調用的時候, 便從該清單中以某種輪詢策略取出一 個位置來進行服務調用, 這就是後續咱們將會介紹的客戶端負載均衡。 這裏咱們只是列舉了一種簡單的服務治理邏輯, 以方便理解服務治理框架的基本運行思路。 實際的框架爲了性能等因素, 不會採用每次都向服務註冊中心獲取服務的方式, 而且不一樣的應用場景在緩存和服務剔除等機制上也會有一些不一樣的實現策略。分佈式

高可用服務註冊中心

        即啓動多個註冊中心實例,註冊中心在配置文件中,開啓本身的註冊服務,和新條請求,拉取服務列表。並在在配置註冊中心地址時,配置多個地址,達到互相調用。微服務

        因爲服務註冊中心之間因互相註冊爲服務, 當服務提供者發送註冊請求到一個服務註冊中心時, 它會將該請求轉發給集羣中相連的其餘註冊中心, 從而實現註冊中心之間的服務同步 。 經過服務同步,兩個服務提供者的服務信息就能夠經過這兩臺服務註冊中心中的任意一臺獲取到。性能

        

服務消費

        

Eureka基礎架構

三要素:spa

 1.服務註冊

    經過引入spring-cloud-starter-netflix-eureka-server包,並在啓動類中添加@EnableEurekaServer註解, 提供服務註冊與發現的功能。高可用性註冊中心,就是多個註冊中心,相互提供註冊服務,服務提供者也能夠配置多個註冊中心地址。

2.服務提供

    經過引入spring-cloud-starter-netflix-eureka-client包,並在啓動類中添加@EnableDiscoveryClient註解,服務會將本身註冊到 Eureka, 以供其餘應用發現。並經過心跳請求,獲取註冊中心的其餘服務列表。

3.服務消費

      經過引入spring-cloud-starter-netflix-eureka-client包和spring-cloud-starter-netflix-ribbon包,並在啓動類中添加@EnableDiscoveryClient註解並開啓客戶端負載均衡。消費者應用會想註冊中心註冊本身,也會經過心跳請求從服務註冊中心獲取服務列表, 從而使消費者能夠知道去何處調用其所須要的服務,咱們使用了 Ribbon 來實現服務消費,另外後續還會介紹使用 Feign 的消費方式。不少時候, 客戶端既是服務提供者也是服務消。

 

參考:《spring cloud微服務實戰》

相關文章
相關標籤/搜索