1. 程式人生 > >微服務之Eureka服務發現

微服務之Eureka服務發現

當呼叫API或者發起網路通訊的時候,無論如何我們都要知道被呼叫方的IP和服務埠,大部分情況是通過域名和服務埠,事實上基於DNS的服務發現,因為DNS快取、無法自治和其他不利因素的存在,有很多侷限。傳統的DNS方式,都是通過nginx或者其他代理軟體來實現,物理機器的ip和port都是固定的,那麼nginx中配置的服務ip和port也是固定的,服務列表的更新只能通過手動來做,但如果後端服務很多時,手動更新容易出錯,效率也很低,這在後端服務發生故障時,不可用時間就可能會加長。在微服務中,尤其是使用了Docker等虛擬化技術的微服務,其IP和port都是動態分配的,服務例項數也是動態變化的,那麼就需要精細而準確的服務發現機制。當微服務app啟動後,告訴其他服務自己的ip和埠,這裡的其他服務就是Eureka Server和Eureka Client,這樣其他服務就知道這個服務有多少例項線上,都在哪些地方,方便去負載均衡和呼叫。

Eureka屬於客戶端發現模式,客戶端負責決定相應服務例項的網路位置,並且對請求實現負載均衡。客戶端從一個服務註冊服務中查詢所有可用服務例項的庫,並快取到本地。服務呼叫時,客戶端使用負載均衡演算法從多個後端服務例項中選擇出一個,然後發出請求。Eureka分為Eureka Server和Eureka client, Eureka Server是一個服務註冊中心,為服務例項註冊管理和查詢可用例項提供了REST API,並可以用其定位、負載均衡、故障恢復後端服務的中間層服務。在服務啟動後,Eureka Client向服務註冊中心註冊服務同時會拉去註冊中心登錄檔副本;在服務停止的時候,Eureka Client向服務註冊中心登出服務;服務註冊後,Eureka Client會定時的傳送心跳來重新整理服務的最新狀態。

客戶端發現模式的優點是服務呼叫、負載均衡不需要和Eureka Server通訊,直接使用本地登錄檔副本,因此Eureka Server不可用時是不會影響正常的服務呼叫,效能也不會因為網路延遲和服務端延遲受到影響。但其缺點也很明顯,但某個服務不可用時,各個Eureka Client不能及時的知道,需要1~3個心跳週期才能感知,但是,由於基於Netflix的服務呼叫端都會使用Hystrix來容錯和降級,當服務呼叫不可用時Hystrix也能及時感知到,通過熔斷機制來降級服務呼叫,因此彌補了基於客戶端服務發現的時效性的缺點。

Eureka Server採用的是對等通訊(P2P),無中心化的架構,無master/slave區分,每一個server都是對等的,既是Server又是Client,所以其叢集方式可以自由發揮,可以各點互連,也可以接力互連。Eureka Server通過執行多個例項以及彼此之間互相註冊來提高可用性,每個節點需要新增一個或多個有效的serviceUrl指向另一個節點。利用Eureka Server這種架構特性, 我在Eureka Server Cluster的部署時採用了三角形通訊模型,三角形是一個很好的均衡模型,既是各點互連,又是接力互連,三角形本身就是一個穩定性幾何形狀,有著穩固、堅定搜尋、耐壓的特點,傢俱、建築、交通等各種行業都有應用。如下圖所示,Eureka Cluster的每個例項都和另外2個例項通訊互動。

感興趣可以加Java架構師群獲取Java工程化、高效能及分散式、高效能、深入淺出。高架構。效能調優、Spring,MyBatis,Netty原始碼分析和大資料等多個知識點高階進階乾貨的直播免費學習許可權 都是大牛帶飛 讓你少走很多的彎路的 群..號是:855801563 對了 小白勿進 最好是有開發經驗

注:加群要求

1、具有工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加。

2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。

3、如果沒有工作經驗,但基礎非常紮實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的,可以加。

4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加。

5.阿里Java高階大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!