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

面試官問我微服務注冊中心如何保證數據強一致性?

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

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

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

顧名思義,假設你有一個分布式系統,里面包含了多個服務,部署在不同的機器上,然后這些不同機器上的服務之間要互相調用。

舉個現實點的例子吧,比如電商系統里的訂單服務需要調用庫存服務,如下圖所示。


現在的問題在于,訂單服務在192.168.31.154這臺機器上,庫存服務在192.137.1.33這臺機器上。

現在訂單服務是想要調用庫存服務,但是他并不知道庫存服務在哪臺機器上?。‘吘谷思叶际窃诓煌瑱C器上的。

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

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


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

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

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


接著訂單服務假如想要調用庫存服務,那么就找服務注冊中心問問:能不能告訴我庫存服務部署在哪臺機器上?

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

然后,訂單服務就可以往庫存服務的那臺機器發送請求了,完成了服務間的調用。

整個過程,如下圖所示:


上述就是服務注冊中心的作用、地位以及意義,現在大家應該知道服務注冊中心的作用了吧。

好!接著我們就來看看Consul作為服務注冊中心,他的架構設計原理是什么?


2、Consul服務注冊中心的整體架構

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

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

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

然后你要發現別的服務的時候,Consul Agent也會幫你轉發請求給Consul Server,查詢其他服務所在機器。

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

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

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

3、Consul如何通過Raft協議實現強一致性?

OK,那么這里就來討論一下Consul是如何實現數據一致性的。

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

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

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

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

接著如果比如訂單服務要發現庫存服務的話,這個查詢請求會發送給Leader Server。

這樣服務注冊和發現,都是通過一臺Leader Server來進行的,就可以保證服務注冊數據的強一致性了,大家看下圖。


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

那么此時這條注冊數據就丟失了,訂單服務就沒法發現那個庫存服務了。沒關系,這里Consul會基于Raft協議來解決這個問題。

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

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

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

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

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

整個過程,如下圖所示:


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

這樣就可以讓別人從新的Leader Server來發現你這個服務,所以數據是絕對強一致的。


4、Consul如何通過Agent實現分布式健康檢查?

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

集中式的心跳機制,比如傳統的Eureka,是讓各個服務都必須每隔一定時間發送心跳到Eureka Server。

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

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

所以Consul在這塊進行了架構優化,引入了Agent概念。

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

怎么樣?是不是發現各個服務自己不用再發送心跳請求去Server了?減小了Server這部分的壓力吧?

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

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

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

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

2024-01-15 10:38:20

多級緩存數據一致性分布式緩存

2022-10-19 12:22:53

并發扣款一致性

2019-08-30 12:46:10

并發扣款查詢SQL

2024-12-26 15:01:29

2023-09-07 08:11:24

Redis管道機制

2025-03-27 08:20:54

2019-12-09 10:37:27

Hash算法面試

2021-03-04 06:49:53

RocketMQ事務

2023-05-26 07:34:50

RedisMySQL緩存

2024-08-20 16:13:52

2020-01-02 09:06:23

微服務數據框架

2024-01-10 08:01:55

高并發場景悲觀鎖

2020-08-05 08:46:10

NFS網絡文件系統

2021-12-14 07:15:57

MySQLRedis數據

2024-01-22 08:52:00

AQS雙異步數據一致性

2022-03-29 10:39:10

緩存數據庫數據

2024-10-28 12:41:25

2024-10-16 09:53:07

2019-09-05 08:43:34

微服務分布式一致性數據共享

2023-09-01 15:27:31

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 羞羞视频免费观 | 成人三级视频 | 国产精品污www一区二区三区 | 日韩一区二区三区四区五区 | 91精品久久久久久久 | 日韩久久成人 | 精品免费av | 91黄色免费看 | 精品一二区 | 超碰在线播 | 中文字幕一区二区三区四区五区 | 狠狠狠 | 色网在线播放 | 欧美最猛黑人 | 三级视频在线观看 | 国产高清视频一区 | 久久久.com | 久久久久久久久久久丰满 | 国产毛片久久久 | 日韩综合 | 国产一区二区免费在线 | 欧美一区二区三区 | 欧美一区二区三区在线 | 亚洲国产精品久久久久婷婷老年 | 日韩无 | 欧美亚洲视频 | 亚洲久久在线 | 91久久北条麻妃一区二区三区 | 日本不卡一区二区三区 | 免费精品在线视频 | 日本中出视频 | 国产精品久久久久久久一区二区 | 黄色毛片在线看 | 欧美精品日韩精品 | 亚洲免费毛片 | 午夜一级黄色片 | 激情五月婷婷综合 | 欧美日韩中文字幕 | 一片毛片 | 男人的天堂一级片 | 久久天堂 |