1. 程式人生 > >淺談SpringCloud裡面的Eureka(和ZooKeeper的對比)

淺談SpringCloud裡面的Eureka(和ZooKeeper的對比)

Spring Cloud Eureka

我們使用微服務,微服務的本質還是各種API介面的呼叫,那麼我們怎麼產生這些介面、產生了這些介面之後如何進行呼叫那?如何進行管理哪?

答案就是Spring Cloud Eureka,我們可以將自己定義的API 介面註冊到Spring Cloud Eureka上,Eureka負責服務的註冊於發現,如果學習過Zookeeper的話,就可以很好的理解,Eureka的角色和 Zookeeper的角色差不多,都是服務的註冊和發現,構成Eureka體系的包括:服務註冊中心、服務提供者、服務消費者。

這裡寫圖片描述

上圖中描述了(圖片來源於網路):

1、兩臺Eureka服務註冊中心構成的服務註冊中心的主從複製叢集; 
2、然後服務提供者向註冊中心進行註冊、續約、下線服務等; 
3、服務消費者向Eureka註冊中心拉去服務列表並維護在本地(這也是客戶端發現模式的機制體現!); 
4、然後服務消費者根據從Eureka服務註冊中心獲取的服務列表選取一個服務提供者進行消費服務。

1、在Eureka平臺中,如果某臺伺服器宕機,Eureka不會有類似於ZooKeeper的選舉leader的過程;客戶端請求會自動切換到新的Eureka節點;當宕機的伺服器重新恢復後,Eureka會再次將其納入到伺服器叢集管理之中;而對於它來說,所有要做的無非是同步一些新的服務註冊資訊而已。所以,再也不用擔心有“掉隊”的伺服器恢復以後,會從Eureka伺服器叢集中剔除出去的風險了。Eureka甚至被設計用來應付範圍更廣的網路分割故障,並實現“0”宕機維護需求。(多個zookeeper之間網路出現問題,造成出現多個leader,發生腦裂)當網路分割故障發生時,每個Eureka節點,會持續的對外提供服務(注:ZooKeeper不會):接收新的服務註冊同時將它們提供給下游的服務發現請求。這樣一來,就可以實現在同一個子網中(same side of partition),新發布的服務仍然可以被發現與訪問。

2、正常配置下,Eureka內建了心跳服務,用於淘汰一些“瀕死”的伺服器;如果在Eureka中註冊的服務,它的“心跳”變得遲緩時,Eureka會將其整個剔除出管理範圍(這點有點像ZooKeeper的做法)。這是個很好的功能,但是當網路分割故障發生時,這也是非常危險的;因為,那些因為網路問題(注:心跳慢被剔除了)而被剔除出去的伺服器本身是很”健康“的,只是因為網路分割故障把Eureka叢集分割成了獨立的子網而不能互訪而已。

幸運的是,Netflix考慮到了這個缺陷。如果Eureka服務節點在短時間裡丟失了大量的心跳連線(注:可能發生了網路故障),那麼這個Eureka節點會進入”自我保護模式“,同時保留那些“心跳死亡“的服務註冊資訊不過期。此時,這個Eureka節點對於新的服務還能提供註冊服務,對於”死亡“的仍然保留,以防還有客戶端向其發起請求。當網路故障恢復後,這個Eureka節點會退出”自我保護模式“。所以Eureka的哲學是,同時保留”好資料“與”壞資料“總比丟掉任何”好資料“要更好,所以這種模式在實踐中非常有效。

3、Eureka還有客戶端快取功能(注:Eureka分為客戶端程式與伺服器端程式兩個部分,客戶端程式負責向外提供註冊與發現服務介面)。所以即便Eureka叢集中所有節點都失效,或者發生網路分割故障導致客戶端不能訪問任何一臺Eureka伺服器;Eureka服務的消費者仍然可以通過Eureka客戶端快取來獲取現有的服務註冊資訊。甚至最極端的環境下,所有正常的Eureka節點都不對請求產生相應,也沒有更好的伺服器解決方案來解決這種問題
時;得益於Eureka的客戶端快取技術,消費者服務仍然可以通過Eureka客戶端查詢與獲取註冊服務資訊,這點很重要。
4、Eureka的構架保證了它能夠成為Service發現服務。它相對與ZooKeeper來說剔除了Leader節點的選取或者事務日誌機制,這樣做有利於減少使用者維護的難度也保證了Eureka的在執行時的健壯性。而且Eureka就是為發現服務所設計的,它有獨立的客戶端程式庫,同時提供心跳服務、服務健康監測、自動釋出服務與自動重新整理快取的功能。但是,如果使用ZooKeeper你必須自己來實現這些功能。Eureka的所有庫都是開源的,所有人都能看到與使用這些原始碼,這比那些只有一兩個人能看或者維護的客戶端庫要好。

5、維護Eureka伺服器也非常的簡單,比如,切換一個節點只需要在現有EIP下移除一個現有的節點然後新增一個新的就行。Eureka提供了一個web-based的圖形化的運維介面,在這個介面中可以檢視Eureka所管理的註冊服務的執行狀態資訊:是否健康,執行日誌等。Eureka甚至提供了Restful-API介面,方便第三方程式整合Eureka的功能。

相關推薦

SpringcloudEurekaZooKeeper比較

實例 註冊 註冊服務 自我保護 但是 服務註冊 強一致 分鐘 長時間 關於CAP理論,可以去看看阮一峰的文章[http://www.ruanyifeng.com/blog/2018/07/cap.html] C(一致性)A(可用性)P(分區容錯性) ZooKeeper: z

SpringCloud (二) Eureka服務發現元件

上面學習到了如何由一個程式訪問另一個程式,那麼如果使用SpringCloud來進行訪問,該如何訪問吶? 可以藉助Eureka服務發現元件進行訪問。 可以藉助官方文件:https://spring.io/projects/spring-cloud 。  中文文件:https://spri

SpringCloud裡面的Eureka(ZooKeeper對比)

Spring Cloud Eureka 我們使用微服務,微服務的本質還是各種API介面的呼叫,那麼我們怎麼產生這些介面、產生了這些介面之後如何進行呼叫那?如何進行管理哪? 答案就是Spring Cloud Eureka,我們可以將自己定義的API 介面註冊到Sprin

[SpringCloud-Eureka] 使用spring.factories機制來實現註冊中心相容EurekaZookeeper

使用SpringBoot開發微服務時,需要通過註冊中心來實現服務之間的發現機制,Eureka和Zookeeper都是常用的 註冊中心框架,我們可以選擇其中之一,現在面臨一個特殊的需求,我們同時存在Eur

hibernate的sessionFactorysession

ber 讀取配置 簡單 開啟 mil fig 理解 name () 首先,講一個悲傷的故事。。。 有一天,一個以為自己javaEE很叼的程序員,在經歷了好久不寫Java代碼的情況下,去參加阿裏巴巴的java面試,然後,在被問到一個很簡單的問題的時候,結果沒有回答好。那麽接下

cookie,sessionStoragelocalStorage區別

一次 flash htm ddb coo 清除 rem 限制 web服務器 在客戶端存儲數據可以使用的技術有如下四種: Cookie技術:瀏覽器兼容性好,但操作比較復雜,需要程序員自己封裝,源生的Cookie接口不友好 H5 WebStorage:不能超過8

Mybatis中的 ${ } #{ }的區別

mybatis sql註入 語句 nbsp 之前 com pre 預編譯 sql 語句 一、舉例說明 1 select * from user where name = "dato"; 2 3 select * from user where name = #

maxMemory , totalMemory , freeMemory OOM 與 native Heap

空間 ora sse 3.x 設置 size 殺進程 p s 使用 作者:林冠宏 / 指尖下的幽靈 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/lingu

Mysql中wherehaving的區別

where和having的區別一、誤區:不要錯誤的認為having和group by 必須配合使用.二、where和having用法解析:1、 where和having都可以使用的場景: select goods_price,goods_name from goods where goods_price &g

C#NET抽象類接口的區別

直接 bstr 訪問 rtu 例如 virtual 索引 AC 特性 一、抽象類: 在類聲明中使用abstract修飾符的類稱為抽象類。含有一個或一個以上的抽象成員的類,必須定義為抽象類。當方法聲明包含abstract修飾符時,稱該方法為抽象方法,雖然抽象方法同時隱含為虛擬

Angular6的服務依賴注入

在開發中,元件一般用來寫檢視有關的功能,服務則寫一些其他的邏輯,諸如從伺服器獲取資料、驗證使用者輸入或直接往控制檯中寫日誌等工作. 先解釋兩個概念: Providers(提供商):是個比較抽象的名詞,我們把它想象為'圖紙'更好理解一些,就比如我們想要生產汽車,就需要先有汽車的圖紙,圖紙

電源濾波原理避免干擾方法

濾波電容可以降低電源的交流阻抗,原因就是實際電源總有內阻,傳輸線路也有阻抗,去耦電容可以讓一部分瞬間變化的電流直接在電容上交換。DC/DC電源電路具有功耗低,功率高的優點,吸收式濾波有電容和電容電路構成,可以將噪聲徹底消除。 DC/DC電路噪聲:紋波和噪聲 DC/DC電源電路具有功耗低,功率

線程runnablecallable的使用及區別

RoCE div unable 邏輯 exc pan service 但是 submit 線程使用比較廣泛,但實際上一般項目很少用上線程,線程常用於優化復雜的程序執行流程,把一些與業務關系關系不大但是必須要執行的流程使用線程的方式讓子線程去執行,主流程只返回跟業務有關的信息

Quartz的JobExecutionContextJobDataMap

一 點睛 1 JobExecutionContext是什麼 當Scheduler呼叫一個Job,就會將JobExecutionContext傳遞給Job的execute()方法 Job能通過JobExecutionContext物件訪問到Quartz執行時候的

Quartz的JobJobDetails

一 點睛 1 Job定義 實現業務邏輯的任務介面。 Job介面非常容易實現,只有一個execute方法,類似TimeTask的run方法,在裡面編寫業務邏輯。 2 Job介面原始碼 public interface Job { void

python 小數據池編碼

must 1byte some none 不同的 布爾值 語句 script standard ?. ?數據池   在說?數據池之前. 我們先看?個概念. 什麽是代碼塊: 根據提示我們從官??檔找到了這樣的說法: A Python program is constru

css中浮動清除浮動帶來的影響

淺談css中浮動和清除浮動帶來的影響 有很多時候,我們都會用到浮動,而我們有時候對浮動只是一知半解,卻不是太清楚它到底是怎麼回事,不知道各位有沒有和我一樣的感覺,只知道用它,卻不知道它到底是怎麼回事,所以,在學習的過程中,就要把一個概念不是很清晰的問題把它弄清楚了,便於我們以後的使用。早些時候,

Django學習migratemakemigrations的差別

Python manger.py makemigrations Python manger.py makemigrations user #對單個app python manager.py migrate python manger.py sqlmigrate theapp 0001 pyt

EurekaZooKeeper的區別

首先我們先說下:  RDBMS==>(MySql,Oracle,SqlServer等關係型資料庫)遵循的原則是:ACID原則(A:原子性。C:一致性。I:獨立性。D:永續性。)。 NoSql==>    (redis,Mogodb等非關係型資料庫)遵循的原則是

java編譯型別執行型別

背景:去某五星級酒店面試vi**,面試官拿出一段程式碼然購物寫輸出結果。考察點是:編譯型別和執行型別以及過載和覆蓋 話不多說,程式碼如下: class A{ public void show(A obj){ System.out.println(