成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ZooKeeper、Eureka、Consul 、Nacos微服務注冊中心對比

開發(fā) 架構
對于任何一個微服務,原則上都應存在或者支持多個提供者,這是由微服務的分布式屬性決定的。更進一步,為了支持彈性擴縮容特性,一個微服務的提供者的數(shù)量和分布往往是動態(tài)變化的,也是無法預先確定的。

[[331493]]

前言

服務注冊中心本質上是為了解耦服務提供者和服務消費者。對于任何一個微服務,原則上都應存在或者支持多個提供者,這是由微服務的分布式屬性決定的。更進一步,為了支持彈性擴縮容特性,一個微服務的提供者的數(shù)量和分布往往是動態(tài)變化的,也是無法預先確定的。因此,原本在單體應用階段常用的靜態(tài)LB機制就不再適用了,需要引入額外的組件來管理微服務提供者的注冊與發(fā)現(xiàn),而這個組件就是服務注冊中心。

CAP理論

CAP理論是分布式架構中重要理論

一致性(Consistency) (所有節(jié)點在同一時間具有相同的數(shù)據(jù)) 可用性(Availability) (保證每個請求不管成功或者失敗都有響應) 分隔容忍(Partition tolerance) (系統(tǒng)中任意信息的丟失或失敗不會影響系統(tǒng)的繼續(xù)運作)

關于

P的理解,我覺得是在整個系統(tǒng)中某個部分,掛掉了,或者宕機了,并不影響整個系統(tǒng)的運作或者說使用,

而可用性是,某個系統(tǒng)的某個節(jié)點掛了,但是并不影響系統(tǒng)的接受或者發(fā)出請求,CAP 不可能都取,只能取其中2個

原因是

如果C是第一需求的話,那么會影響A的性能,因為要數(shù)據(jù)同步,不然請求結果會有差異,但是數(shù)據(jù)同步會消耗時間,期間可用性就會降低。

如果A是第一需求,那么只要有一個服務在,就能正常接受請求,但是對與返回結果變不能保證,原因是,在分布式部署的時候,數(shù)據(jù)一致的過程不可能想切線路那么快。

再如果,同事滿足一致性和可用性,那么分區(qū)容錯就很難保證了,也就是單點,也是分布式的基本核心,好了,明白這些理論,就可以在相應的場景選取服務注冊與發(fā)現(xiàn)了

服務注冊中心解決方案

設計或者選型一個服務注冊中心,首先要考慮的就是服務注冊與發(fā)現(xiàn)機制。縱觀當下各種主流的服務注冊中心解決方案,大致可歸為三類:

應用內:直接集成到應用中,依賴于應用自身完成服務的注冊與發(fā)現(xiàn),最典型的是Netflix提供的Eureka 應用外:把應用當成黑盒,通過應用外的某種機制將服務注冊到注冊中心,最小化對應用的侵入性,比如Airbnb的SmartStack,HashiCorp的Consul DNS:將服務注冊為DNS的SRV記錄,嚴格來說,是一種特殊的應用外注冊方式,SkyDNS是其中的代表

注1:對于第一類注冊方式,除了Eureka這種一站式解決方案,還可以基于ZooKeeper或者Etcd自行實現(xiàn)一套服務注冊機制,這在大公司比較常見,但對于小公司而言顯然性價比太低。

注2:由于DNS固有的緩存缺陷,本文不對第三類注冊方式作深入探討。

除了基本的服務注冊與發(fā)現(xiàn)機制,從開發(fā)和運維角度,至少還要考慮如下五個方面:

測活:服務注冊之后,如何對服務進行測活以保證服務的可用性? 負載均衡:當存在多個服務提供者時,如何均衡各個提供者的負載? 集成:在服務提供端或者調用端,如何集成注冊中心? 運行時依賴:引入注冊中心之后,對應用的運行時環(huán)境有何影響? 可用性:如何保證注冊中心本身的可用性,特別是消除單點故障?

Apache Zookeeper -> CP

與 Eureka 有所不同,Apache Zookeeper 在設計時就緊遵CP原則,即任何時候對 Zookeeper 的訪問請求能得到一致的數(shù)據(jù)結果,同時系統(tǒng)對網(wǎng)絡分割具備容錯性,但是 Zookeeper 不能保證每次服務請求都是可達的。

從 Zookeeper 的實際應用情況來看,在使用 Zookeeper 獲取服務列表時,如果此時的 Zookeeper 集群中的 Leader 宕機了,該集群就要進行 Leader 的選舉,又或者 Zookeeper 集群中半數(shù)以上服務器節(jié)點不可用(例如有三個節(jié)點,如果節(jié)點一檢測到節(jié)點三掛了 ,節(jié)點二也檢測到節(jié)點三掛了,那這個節(jié)點才算是真的掛了),那么將無法處理該請求。所以說,Zookeeper 不能保證服務可用性。

當然,在大多數(shù)分布式環(huán)境中,尤其是涉及到數(shù)據(jù)存儲的場景,數(shù)據(jù)一致性應該是首先被保證的,這也是 Zookeeper 設計緊遵CP原則的另一個原因。

但是對于服務發(fā)現(xiàn)來說,情況就不太一樣了,針對同一個服務,即使注冊中心的不同節(jié)點保存的服務提供者信息不盡相同,也并不會造成災難性的后果。

因為對于服務消費者來說,能消費才是最重要的,消費者雖然拿到可能不正確的服務實例信息后嘗試消費一下,也要勝過因為無法獲取實例信息而不去消費,導致系統(tǒng)異常要好(淘寶的雙十一,京東的618就是緊遵AP的最好參照)。

當master節(jié)點因為網(wǎng)絡故障與其他節(jié)點失去聯(lián)系時,剩余節(jié)點會重新進行l(wèi)eader選舉。問題在于,選舉leader的時間太長,30~120s,而且選舉期間整個zk集群都是不可用的,這就導致在選舉期間注冊服務癱瘓。

在云部署環(huán)境下, 因為網(wǎng)絡問題使得zk集群失去master節(jié)點是大概率事件,雖然服務能最終恢復,但是漫長的選舉事件導致注冊長期不可用是不能容忍的。

Spring Cloud Eureka -> AP

 

ZooKeeper、Eureka、Consul 、Nacos微服務注冊中心對比

Spring Cloud Netflix 在設計 Eureka 時就緊遵AP原則(盡管現(xiàn)在2.0發(fā)布了,但是由于其閉源的原因 ,但是目前 Ereka 1.x 任然是比較活躍的)。

Eureka Server 也可以運行多個實例來構建集群,解決單點問題,但不同于 ZooKeeper 的選舉 leader 的過程,Eureka Server 采用的是Peer to Peer 對等通信。這是一種去中心化的架構,無 master/slave 之分,每一個 Peer 都是對等的。在這種架構風格中,節(jié)點通過彼此互相注冊來提高可用性,每個節(jié)點需要添加一個或多個有效的 serviceUrl 指向其他節(jié)點。每個節(jié)點都可被視為其他節(jié)點的副本。

在集群環(huán)境中如果某臺 Eureka Server 宕機,Eureka Client 的請求會自動切換到新的 Eureka Server 節(jié)點上,當宕機的服務器重新恢復后,Eureka 會再次將其納入到服務器集群管理之中。當節(jié)點開始接受客戶端請求時,所有的操作都會在節(jié)點間進行復制(replicate To Peer)操作,將請求復制到該 Eureka Server 當前所知的其它所有節(jié)點中。

當一個新的 Eureka Server 節(jié)點啟動后,會首先嘗試從鄰近節(jié)點獲取所有注冊列表信息,并完成初始化。Eureka Server 通過 getEurekaServiceUrls() 方法獲取所有的節(jié)點,并且會通過心跳契約的方式定期更新。

默認情況下,如果 Eureka Server 在一定時間內沒有接收到某個服務實例的心跳(默認周期為30秒),Eureka Server 將會注銷該實例(默認為90秒,

eureka.instance.lease-expiration-duration-in-seconds 進行自定義配置)。

當 Eureka Server 節(jié)點在短時間內丟失過多的心跳時,那么這個節(jié)點就會進入自我保護模式。

Eureka的集群中,只要有一臺Eureka還在,就能保證注冊服務可用(保證可用性),只不過查到的信息可能不是最新的(不保證強一致性)。除此之外,Eureka還有一種自我保護機制,如果在15分鐘內超過85%的節(jié)點都沒有正常的心跳,那么Eureka就認為客戶端與注冊中心出現(xiàn)了網(wǎng)絡故障,此時會出現(xiàn)以下幾種情況:

Eureka不再從注冊表中移除因為長時間沒有收到心跳而過期的服務;

Eureka仍然能夠接受新服務注冊和查詢請求,但是不會被同步到其它節(jié)點上(即保證當前節(jié)點依然可用);

當網(wǎng)絡穩(wěn)定時,當前實例新注冊的信息會被同步到其它節(jié)點中;

因此,Eureka可以很好的應對因網(wǎng)絡故障導致部分節(jié)點失去聯(lián)系的情況,而不會像zookeeper那樣使得整個注冊服務癱瘓。

Consul:

Consul 是 HashiCorp 公司推出的開源工具,用于實現(xiàn)分布式系統(tǒng)的服務發(fā)現(xiàn)與配置。Consul 使用 Go 語言編寫,因此具有天然可移植性(支持Linux、windows和Mac OS X)。

Consul 內置了服務注冊與發(fā)現(xiàn)框架、分布一致性協(xié)議實現(xiàn)、健康檢查、Key/Value 存儲、多數(shù)據(jù)中心方案,不再需要依賴其他工具(比如 ZooKeeper 等),使用起來也較為簡單。

Consul 遵循CAP原理中的CP原則,保證了強一致性和分區(qū)容錯性,且使用的是Raft算法,比zookeeper使用的Paxos算法更加簡單。雖然保證了強一致性,但是可用性就相應下降了,例如服務注冊的時間會稍長一些,因為 Consul 的 raft 協(xié)議要求必須過半數(shù)的節(jié)點都寫入成功才認為注冊成功 ;在leader掛掉了之后,重新選舉出leader之前會導致Consul 服務不可用。

 

ZooKeeper、Eureka、Consul 、Nacos微服務注冊中心對比

 

默認依賴于SDK

Consul本質上屬于應用外的注冊方式,但可以通過SDK簡化注冊流程。而服務發(fā)現(xiàn)恰好相反,默認依賴于SDK,但可以通過Consul Template(下文會提到)去除SDK依賴。

 

ZooKeeper、Eureka、Consul 、Nacos微服務注冊中心對比

 

Consul Template

Consul Template

Consul,默認服務調用者需要依賴Consul SDK來發(fā)現(xiàn)服務,這就無法保證對應用的零侵入性。

所幸通過Consul Template,可以定時從Consul集群獲取最新的服務提供者列表并刷新LB配置(比如nginx的upstream),這樣對于服務調用者而言,只需要配置一個統(tǒng)一的服務調用地址即可。

Consul強一致性(C)帶來的是:

服務注冊相比Eureka會稍慢一些。因為Consul的raft協(xié)議要求必須過半數(shù)的節(jié)點都寫入成功才認為注冊成功 Leader掛掉時,重新選舉期間整個consul不可用。保證了強一致性但犧牲了可用性。

Eureka保證高可用(A)和最終一致性:

服務注冊相對要快,因為不需要等注冊信息replicate到其他節(jié)點,也不保證注冊信息是否replicate成功 當數(shù)據(jù)出現(xiàn)不一致時,雖然A, B上的注冊信息不完全相同,但每個Eureka節(jié)點依然能夠正常對外提供服務,這會出現(xiàn)查詢服務信息時如果請求A查不到,但請求B就能查到。如此保證了可用性但犧牲了一致性。

其他方面,eureka就是個servlet程序,跑在servlet容器中; Consul則是go編寫而成。

Nacos:

Nacos是阿里開源的,Nacos 支持基于 DNS 和基于 RPC 的服務發(fā)現(xiàn)。在Spring Cloud中使用Nacos,只需要先下載 Nacos 并啟動 Nacos server,Nacos只需要簡單的配置就可以完成服務的注冊發(fā)現(xiàn)。

Nacos除了服務的注冊發(fā)現(xiàn)之外,還支持動態(tài)配置服務。動態(tài)配置服務可以讓您以中心化、外部化和動態(tài)化的方式管理所有環(huán)境的應用配置和服務配置。動態(tài)配置消除了配置變更時重新部署應用和服務的需要,讓配置管理變得更加高效和敏捷。配置中心化管理讓實現(xiàn)無狀態(tài)服務變得更簡單,讓服務按需彈性擴展變得更容易。

一句話概括就是Nacos = Spring Cloud注冊中心 + Spring Cloud配置中心。

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-05-28 06:19:22

ZooKeeperConsulNacos

2025-03-31 08:35:00

Eureka微服務架構

2019-08-23 10:34:05

微服務Eureka架構

2017-06-25 13:33:25

Spring Clou微服務架構

2025-01-09 08:32:50

2020-01-10 10:58:34

ZooKeeperEureka注冊中心

2023-04-26 08:19:48

Nacos高可用開發(fā)

2017-07-03 08:29:42

Spring Clou服務詳解

2022-01-16 23:10:40

語言服務注冊

2021-09-17 13:29:43

開發(fā)技能代碼

2023-06-02 08:33:43

微服務架構服務注冊

2022-04-05 13:10:15

consul分布式高可用

2021-08-04 11:54:25

Nacos注冊中心設計

2024-11-21 16:09:22

2024-12-03 10:55:56

微服務架構注冊中心

2022-08-15 19:49:57

Consul架構注冊中心

2023-03-01 08:15:10

NginxNacos

2021-04-28 08:05:30

SpringCloudEureka服務注冊

2023-04-28 07:52:14

CAPEureka注冊中心

2019-11-29 11:12:56

Zookeeper腦裂選舉算法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产乱码久久久久久闺蜜 | 尤物在线视频 | 亚洲播放一区 | 久久99精品国产99久久6男男 | 久久y| 国产成人福利视频 | www.一区二区 | 日韩欧美国产精品一区二区三区 | 大久 | 日韩性在线 | 成人激情视频免费观看 | 91高清视频在线观看 | 男女羞羞视频免费看 | 正在播放国产精品 | 午夜精品久久久久久久 | 亚洲精品一区二区三区在线观看 | 欧美日韩成人在线观看 | 欧美影院 | 精品视频在线观看 | 精品国产伦一区二区三区观看体验 | 91电影在线 | 久久99精品久久久久久噜噜 | 91av视频在线观看 | 久久福利 | 精品一区二区视频 | 国产精品国产三级国产aⅴ无密码 | 九九成人| 国产精品久久久久久久久免费樱桃 | 国产免费让你躁在线视频 | 成人欧美一区二区三区在线观看 | 丁香婷婷在线视频 | 美日韩免费视频 | 男人影音 | 高清国产一区二区 | 一级片免费在线观看 | 在线观看www视频 | 成人免费视频网站在线看 | 九九热这里只有精品6 | 成人精品一区二区三区中文字幕 | 欧美日韩网站 | 欧美成人精品一区二区男人看 |