當調用API或者發起網絡通訊的時候,不管如何咱們都要知道被調用方的IP和服務端口,大部分狀況是經過域名和服務端口,事實上基於DNS的服務發現,由於DNS緩存、沒法自治和其餘不利因素的存在,有不少侷限。傳統的DNS方式,都是經過nginx或者其餘代理軟件來實現,物理機器的ip和port都是固定的,那麼nginx中配置的服務ip和port也是固定的,服務列表的更新只能經過手動來作,但若是後端服務不少時,手動更新容易出錯,效率也很低,這在後端服務發生故障時,不可用時間就可能會加長。在微服務中,尤爲是使用了Docker等虛擬化技術的微服務,其IP和port都是動態分配的,服務實例數也是動態變化的,那麼就須要精細而準確的服務發現機制。當微服務app啓動後,告訴其餘服務本身的ip和端口,這裏的其餘服務就是Eureka Server和Eureka Client,這樣其餘服務就知道這個服務有多少實例在線,都在哪些地方,方便去負載均衡和調用。java
Eureka屬於客戶端發現模式,客戶端負責決定相應服務實例的網絡位置,而且對請求實現負載均衡。客戶端從一個服務註冊服務中查詢全部可用服務實例的庫,並緩存到本地。服務調用時,客戶端使用負載均衡算法從多個後端服務實例中選擇出一個,而後發出請求。Eureka分爲Eureka Server和Eureka client, Eureka Server是一個服務註冊中心,爲服務實例註冊管理和查詢可用實例提供了REST API,並能夠用其定位、負載均衡、故障恢復後端服務的中間層服務。在服務啓動後,Eureka Client向服務註冊中心註冊服務同時會拉去註冊中心註冊表副本;在服務中止的時候,Eureka Client向服務註冊中心註銷服務;服務註冊後,Eureka Client會定時的發送心跳來刷新服務的最新狀態。nginx
客戶端發現模式的優勢是服務調用、負載均衡不須要和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 對了 小白勿進 最好是有開發經驗後端
注:加羣要求緩存
一、具備工做經驗的,面對目前流行的技術不知從何下手,須要突破技術瓶頸的能夠加。網絡
二、在公司待久了,過得很安逸,但跳槽時面試碰壁。須要在短期內進修、跳槽拿高薪的能夠加。架構
三、若是沒有工做經驗,但基礎很是紮實,對java工做機制,經常使用設計思想,經常使用java開發框架掌握熟練的,能夠加。app
四、以爲本身很牛B,通常需求都能搞定。可是所學的知識點沒有系統化,很難在技術領域繼續突破的能夠加。負載均衡
5.阿里Java高級大牛直播講解知識點,分享知識,多年工做經驗的梳理和總結,帶着你們全面、科學地創建本身的技術體系和技術認知!