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

一文搞懂注冊中心的設(shè)計與實現(xiàn)

開發(fā) 架構(gòu)
在 Eureka 中,客戶端和服務器端通過發(fā)送心跳來實現(xiàn)輪詢機制。Eureka 有一個租約概念,服務提供者需要通過續(xù)約機制來確保注冊中心中的服務實例狀態(tài)得到更新。心跳的作用是完成續(xù)約操作。

服務治理在微服務架構(gòu)中扮演著至關(guān)重要的角色,它使得各個微服務能夠自動完成注冊和發(fā)現(xiàn)。本文將深入探討實現(xiàn)服務治理的基本方法。

首先,設(shè)想我們正在構(gòu)建一個分布式服務系統(tǒng)。在這種系統(tǒng)中,服務的數(shù)量可能非常龐大,并且服務之間需要相互溝通,形成錯綜復雜的調(diào)用路徑。

面對眾多服務,我們通常會遇到兩個主要問題:

  • 如何有效追蹤服務實例的數(shù)量?
  • 如何監(jiān)控服務實例的當前狀態(tài)?

當系統(tǒng)中服務數(shù)量激增,例如達到數(shù)十甚至數(shù)百個時,我們很難清楚地了解哪些服務正在運行。而且,由于自動擴展、服務重啟等操作,服務實例的運行狀態(tài)也會頻繁變動。如下圖所示:

圖片圖片

為了更清晰地描述服務的運行狀態(tài),我們可以對每個服務實例進行抽象化處理,并采用統(tǒng)一且直觀的方式來表達這些信息。如下所示:

圖片圖片

但是,隨著服務數(shù)量的增加和服務實例狀態(tài)的不斷變化,我們?nèi)绾斡行Ч芾磉@些實例呢?這正是服務治理所要解決的問題。通常,為了實現(xiàn)高效的服務治理,我們會引入注冊中心來管理服務實例。

什么是注冊中心

注冊中心是一個存儲服務實例信息的倉庫,同時也是服務提供者和消費者進行交流的樞紐。它主要提供兩項核心功能:服務注冊和服務發(fā)現(xiàn)。

圖片圖片

我們看這張服務注冊流程圖就知道,對于注冊中心而言,服務的提供者和消費者都相當于是它的客戶端,所以都內(nèi)嵌了專門與注冊中心實現(xiàn)交互的客戶端組件。

服務提供者在啟動時,會通過注冊中心的客戶端組件自動注冊自己,這個過程也被稱作服務發(fā)布。對于服務消費者而言,他們執(zhí)行的是訂閱操作,而非注冊操作。通過訂閱,消費者能夠自動從注冊中心獲取已注冊服務提供者的信息,這個過程就是服務發(fā)現(xiàn)。

我們還可以看到,服務消費者和提供者之間存在一個明顯的區(qū)別:消費者擁有一個本地緩存,存儲了他們獲取到的服務提供者實例信息。

這個本地緩存有兩個主要作用:一是提高服務發(fā)現(xiàn)效率,消費者可以通過查詢本地緩存快速獲取目標服務實例信息;二是在注冊中心不可用或網(wǎng)絡異常時,消費者依然可以基于本地緩存調(diào)用已注冊的服務。

注冊信息變更通知機制

講到這里,我們實際上就已經(jīng)了解了 。通過獲取注冊中心中的服務實例信息,我們就可以掌握系統(tǒng)中服務的數(shù)量以及當前的運行時狀態(tài)了。

但問題來了,一旦服務的運行狀態(tài)發(fā)生變化,我們?nèi)绾渭皶r獲取這些變更信息呢?這就需要在注冊中心引入變更通知機制:

圖片圖片

變更通知機制是實現(xiàn)注冊中心的一大難點,因為這個過程涉及服務提供者、消費者和注冊中心三者之間的數(shù)據(jù)同步問題,想要在分布式環(huán)境下實現(xiàn)數(shù)據(jù)同步是有挑戰(zhàn)的。接下來,我將介紹兩種主流的實現(xiàn)方法:監(jiān)聽機制和輪詢機制。

監(jiān)聽機制

從架構(gòu)設(shè)計角度來看,狀態(tài)變更管理可以利用注冊中心的發(fā)布-訂閱模式。因此也就誕生了服務監(jiān)聽機制。它確保服務消費者能夠?qū)崟r監(jiān)控服務的更新狀態(tài),是一種被動接收變更通知的方案,通常采用監(jiān)聽器和回調(diào)機制。

圖片圖片

服務消費者可以為具體的服務實例節(jié)點添加監(jiān)聽器。當這些節(jié)點發(fā)生變化時,例如服務 B 的第一個實例不可用、服務 C 的第一個實例地址變更,或服務 D 新增了一個實例 3,注冊中心就會觸發(fā)監(jiān)聽器中的回調(diào)函數(shù),確保更新通知到每一個服務消費者。

輪詢機制

另一種確保狀態(tài)信息同步的方式是輪詢機制,這是一種主動拉取策略。服務消費者會定期調(diào)用注冊中心的服務獲取接口,以獲取最新的服務列表,并更新本地緩存。

圖片圖片

輪詢機制實際上是一個定時器,我們需要考慮的主要問題是輪詢頻率。為了確保數(shù)據(jù)同步的及時性,輪詢頻率不能太短;但同時,考慮到輪詢對注冊中心性能的影響,也不能過于頻繁。通常,將輪詢頻率控制在幾十秒到幾分鐘之間是一個較好的選擇。

注冊中心實現(xiàn)工具

通過前面的分析,相信你對注冊中心的實現(xiàn)原理有了全面的了解。注冊中心本質(zhì)上是一種架構(gòu)模型。在開發(fā)過程中,為了避免重復勞動,我們通常不需要自己實現(xiàn)這一模型,而是可以采用業(yè)界的一些主流注冊中心實現(xiàn)工具,如 Consul、Zookeeper、Eureka 和 Nacos。

Consul 由 HashiCorp 公司提供,主要用于分布式環(huán)境下的服務發(fā)現(xiàn)與配置;Zookeeper 是 Apache 的一個頂級項目,作為分布式協(xié)調(diào)領(lǐng)域的代表性框架,被廣泛用于注冊中心、配置中心和分布式鎖等場景;Netflix 的 Eureka 采用了一種不同的實現(xiàn)方案,并集成到了微服務開發(fā)框架 Spring Cloud 中;Nacos 由阿里巴巴開發(fā),是面向云原生應用的動態(tài)服務發(fā)現(xiàn)、配置和服務管理平臺。

這些工具各有特點,都實現(xiàn)了注冊中心的高可用性、服務實例存儲和同步功能,并提供了方便集成的客戶端組件。我們知道,注冊中心主要應用于微服務系統(tǒng),主流的微服務開發(fā)框架是 Dubbo 和 Spring Cloud,它們分別使用 Zookeeper 和 Eureka 作為默認的注冊中心實現(xiàn)方案。

因此,接下來我們就重點探討下這兩款注冊中心工具。

Zookeeper 是“服務監(jiān)聽機制”實現(xiàn)策略的典型代表,它本質(zhì)上是一個樹形結(jié)構(gòu),可以在樹上創(chuàng)建臨時節(jié)點,并對節(jié)點添加監(jiān)聽器。

臨時節(jié)點的客戶端與該節(jié)點建立長連接,并實時關(guān)注節(jié)點狀態(tài)??蛻舳擞幸粋€回調(diào)函數(shù),當節(jié)點狀態(tài)變化時,通過監(jiān)聽器將變化傳遞到客戶端并觸發(fā)回調(diào)函數(shù)。如下圖所示:

圖片圖片

而對于 Netflix Eureka 而言,它采用的就是典型的“輪詢機制”來實現(xiàn)服務實例狀態(tài)的同步,如下所示:

圖片圖片

在 Eureka 中,客戶端和服務器端通過發(fā)送心跳來實現(xiàn)輪詢機制。Eureka 有一個租約概念,服務提供者需要通過續(xù)約機制來確保注冊中心中的服務實例狀態(tài)得到更新。心跳的作用是完成續(xù)約操作。

一般來說,心跳頻率是 30 秒,如果服務連續(xù) 90 秒沒有發(fā)送心跳,Eureka 服務器會認為該服務失效,并更新其狀態(tài)信息。這樣,可以確保 Eureka 服務器中服務實例信息的正確性。

服務消費者也是通過輪詢機制來獲取服務提供者的實例信息,其默認輪詢頻率同樣是 30 秒。

總結(jié)

你只需要記住,注冊中心是一種服務治理工具,它可以管理所有服務實例的運行狀態(tài),并將這些狀態(tài)的變化同步到各個服務中。在開發(fā)分布式系統(tǒng)時,通過引入注冊中心,可以輕松實現(xiàn)對大規(guī)模服務的高效治理。

責任編輯:武曉燕 來源: 程序猿技術(shù)充電站
相關(guān)推薦

2024-06-26 10:29:02

商品中心設(shè)計生成器

2023-05-22 13:27:17

2021-08-05 06:54:05

觀察者訂閱設(shè)計

2024-02-19 13:11:38

門面模式系統(tǒng)

2024-02-26 11:52:38

代理模式設(shè)計

2024-01-29 12:22:07

設(shè)計模式策略模式

2024-04-12 12:19:08

語言模型AI

2022-08-30 22:12:19

Nacos組件服務注冊

2022-03-24 08:51:48

Redis互聯(lián)網(wǎng)NoSQL

2024-02-04 12:04:17

2024-02-27 11:59:12

享元模式對象

2024-02-21 12:24:33

模板設(shè)計模式框架

2024-01-30 13:15:00

設(shè)計模式責任鏈

2024-02-23 12:11:53

裝飾器模式對象

2025-01-16 10:38:31

2021-02-22 09:44:03

KubernetesDNSLinux

2021-03-22 10:05:59

netstat命令Linux

2023-09-08 08:20:46

ThreadLoca多線程工具

2023-09-15 12:00:01

API應用程序接口

2024-02-20 12:09:32

模式工廠方法接口
點贊
收藏

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