自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官問我微服務(wù)注冊中心如何保證數(shù)據(jù)強一致性?

開發(fā) 架構(gòu)
集中式的心跳機制會對Eureka Server造成較大的心跳請求壓力,實際上平時Eureka Server接收最多的請求之一就是成千上萬服務(wù)發(fā)送過來的心跳請求。

1、再回顧:什么是服務(wù)注冊中心?

先回顧一下什么叫做服務(wù)注冊中心?

顧名思義,假設(shè)你有一個分布式系統(tǒng),里面包含了多個服務(wù),部署在不同的機器上,然后這些不同機器上的服務(wù)之間要互相調(diào)用。

舉個現(xiàn)實點的例子吧,比如電商系統(tǒng)里的訂單服務(wù)需要調(diào)用庫存服務(wù),如下圖所示。


現(xiàn)在的問題在于,訂單服務(wù)在192.168.31.154這臺機器上,庫存服務(wù)在192.137.1.33這臺機器上。

現(xiàn)在訂單服務(wù)是想要調(diào)用庫存服務(wù),但是他并不知道庫存服務(wù)在哪臺機器上??!畢竟人家都是在不同機器上的。

所以這個時候就需要服務(wù)注冊中心出場了,這個時候你的系統(tǒng)架構(gòu)中需要引入獨立部署在一臺機器上的服務(wù)注冊中心,如下圖所示。

然后訂單服務(wù)、庫存服務(wù)之類的兄弟,都需要配置上服務(wù)注冊中心部署在哪臺機器上,比如192.168.31.45這臺機器。


接著訂單服務(wù)、庫存服務(wù)他們自己啟動的時候,就得發(fā)送請求到到服務(wù)注冊中心上去進行服務(wù)注冊。

也就是說,得告訴服務(wù)注冊中心,自己是哪個服務(wù),然后自己部署在哪臺機器上。

然后服務(wù)注冊中心會把大家注冊上來的信息放在注冊表里,如下圖。


接著訂單服務(wù)假如想要調(diào)用庫存服務(wù),那么就找服務(wù)注冊中心問問:能不能告訴我?guī)齑娣?wù)部署在哪臺機器上?

服務(wù)注冊中心是知道這個信息的,所以就會告訴訂單服務(wù):庫存服務(wù)部署在192.1371.133這臺機器上,你就給這臺機器發(fā)送請求吧。

然后,訂單服務(wù)就可以往庫存服務(wù)的那臺機器發(fā)送請求了,完成了服務(wù)間的調(diào)用。

整個過程,如下圖所示:


上述就是服務(wù)注冊中心的作用、地位以及意義,現(xiàn)在大家應(yīng)該知道服務(wù)注冊中心的作用了吧。

好!接著我們就來看看Consul作為服務(wù)注冊中心,他的架構(gòu)設(shè)計原理是什么?


2、Consul服務(wù)注冊中心的整體架構(gòu)

如果要基于Consul作為服務(wù)注冊中心,那么首先必須在每個服務(wù)所在的機器上部署一個Consul Agent,作為一個服務(wù)所在機器的代理。

然后還得在多臺機器上部署Consul Server,這就是核心的服務(wù)注冊中心。

這個Consul Agent可以用來收集你的服務(wù)信息然后發(fā)送給Consul Server,還會對你的服務(wù)不停的發(fā)送請求檢查他是否健康。

然后你要發(fā)現(xiàn)別的服務(wù)的時候,Consul Agent也會幫你轉(zhuǎn)發(fā)請求給Consul Server,查詢其他服務(wù)所在機器。

Consul Server一般要求部署3~5臺機器,以保證高可用以及數(shù)據(jù)一致性。

他們之間會自動實現(xiàn)數(shù)據(jù)同步,而且Consul Server集群會自動選舉出一臺機器作為leader,其他的Consul Server就是follower。

咱們看下面的圖,先感受一下這個Consul他整體的架構(gòu)。

3、Consul如何通過Raft協(xié)議實現(xiàn)強一致性?

OK,那么這里就來討論一下Consul是如何實現(xiàn)數(shù)據(jù)一致性的。

首先,大家知道Consul Server是部署集群的,而且他會選舉出來一臺Server作為Leader。

接下來各個服務(wù)發(fā)送的注冊請求都會落地給Leader,由Leader同步給其他Follower。

所以首先第一點,Leader Server是絕對有最新的服務(wù)注冊信息的,是不是?

比如庫存服務(wù)發(fā)起注冊了,那么Leader Server上一定有庫存服務(wù)的注冊信息。

接著如果比如訂單服務(wù)要發(fā)現(xiàn)庫存服務(wù)的話,這個查詢請求會發(fā)送給Leader Server。

這樣服務(wù)注冊和發(fā)現(xiàn),都是通過一臺Leader Server來進行的,就可以保證服務(wù)注冊數(shù)據(jù)的強一致性了,大家看下圖。


接著大家想,假如說庫存服務(wù)在注冊的時候數(shù)據(jù)剛寫到Leader Server,結(jié)果Leader Server就宕機了,這時候怎么辦?

那么此時這條注冊數(shù)據(jù)就丟失了,訂單服務(wù)就沒法發(fā)現(xiàn)那個庫存服務(wù)了。沒關(guān)系,這里Consul會基于Raft協(xié)議來解決這個問題。

首先,庫存服務(wù)注冊到Leader Server的時候,會采取Raft協(xié)議,要求必須讓Leader Server把這條注冊數(shù)據(jù)復(fù)制給大部分的Follower Server才算成功。

這就保證了,如果你認為自己注冊成功了,那么必然是多臺Consul Server都有這條注冊數(shù)據(jù)了。

如果你剛發(fā)送給Leader Server他自己就宕機了,那么這次注冊會認為失敗。

此時,Consul Server集群會重新選舉一個Leader Server出來,你需要再次重新注冊。

這樣就可以保證你注冊成功的數(shù)據(jù)絕對不會丟,然后別人發(fā)現(xiàn)服務(wù)的時候一定可以從Leader Server上獲取到最新的強一致的注冊數(shù)據(jù)。

整個過程,如下圖所示:


上面的圖就可以看到,只要你注冊的時候基于Raft協(xié)議強制同步到大多數(shù)Server,哪怕是Leader掛了,也會選舉新的Leader。

這樣就可以讓別人從新的Leader Server來發(fā)現(xiàn)你這個服務(wù),所以數(shù)據(jù)是絕對強一致的。


4、Consul如何通過Agent實現(xiàn)分布式健康檢查?

最后說說Consul是如何通過各個服務(wù)機器上部署Agent來實現(xiàn)分布式健康檢查的。

集中式的心跳機制,比如傳統(tǒng)的Eureka,是讓各個服務(wù)都必須每隔一定時間發(fā)送心跳到Eureka Server。

如果一段時間沒收到心跳,那么就認為這個服務(wù)宕機了。

但是這種集中式的心跳機制會對Eureka Server造成較大的心跳請求壓力,實際上平時Eureka Server接收最多的請求之一就是成千上萬服務(wù)發(fā)送過來的心跳請求。

所以Consul在這塊進行了架構(gòu)優(yōu)化,引入了Agent概念。

每個機器上的Consul Agent會不斷的發(fā)送請求檢查服務(wù)是否健康,是否宕機。如果服務(wù)宕機了,那么就會通知Consul Server。

怎么樣?是不是發(fā)現(xiàn)各個服務(wù)自己不用再發(fā)送心跳請求去Server了?減小了Server這部分的壓力吧?

沒錯,這就是Consul基于Agent實現(xiàn)的分布式健康檢查機制,可以大幅度的減小Server端的壓力。

這樣一來,哪怕你就部署個三五臺機器,可以輕松支持成千上萬個服務(wù)。

咱們再來一張圖,一起來看看:

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2024-01-15 10:38:20

多級緩存數(shù)據(jù)一致性分布式緩存

2022-10-19 12:22:53

并發(fā)扣款一致性

2025-03-27 08:20:54

2023-09-07 08:11:24

Redis管道機制

2024-12-26 15:01:29

2019-08-30 12:46:10

并發(fā)扣款查詢SQL

2019-12-09 10:37:27

Hash算法面試

2024-08-20 16:13:52

2023-05-26 07:34:50

RedisMySQL緩存

2021-03-04 06:49:53

RocketMQ事務(wù)

2020-01-02 09:06:23

微服務(wù)數(shù)據(jù)框架

2020-08-05 08:46:10

NFS網(wǎng)絡(luò)文件系統(tǒng)

2024-01-10 08:01:55

高并發(fā)場景悲觀鎖

2024-10-28 12:41:25

2024-01-22 08:52:00

AQS雙異步數(shù)據(jù)一致性

2024-10-16 09:53:07

2022-03-29 10:39:10

緩存數(shù)據(jù)庫數(shù)據(jù)

2021-12-14 07:15:57

MySQLRedis數(shù)據(jù)

2019-09-05 08:43:34

微服務(wù)分布式一致性數(shù)據(jù)共享

2019-12-17 08:40:33

微服務(wù)架構(gòu)數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號