偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

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

面對(duì)眾多服務(wù),我們通常會(huì)遇到兩個(gè)主要問題:

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

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

圖片圖片

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

圖片圖片

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

什么是注冊(cè)中心

注冊(cè)中心是一個(gè)存儲(chǔ)服務(wù)實(shí)例信息的倉(cāng)庫(kù),同時(shí)也是服務(wù)提供者和消費(fèi)者進(jìn)行交流的樞紐。它主要提供兩項(xiàng)核心功能:服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)。

圖片圖片

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

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

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

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

注冊(cè)信息變更通知機(jī)制

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

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

圖片圖片

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

監(jiān)聽機(jī)制

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

圖片圖片

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

輪詢機(jī)制

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

圖片圖片

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

注冊(cè)中心實(shí)現(xiàn)工具

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

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

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

因此,接下來我們就重點(diǎn)探討下這兩款注冊(cè)中心工具。

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

臨時(shí)節(jié)點(diǎn)的客戶端與該節(jié)點(diǎn)建立長(zhǎng)連接,并實(shí)時(shí)關(guān)注節(jié)點(diǎn)狀態(tài)。客戶端有一個(gè)回調(diào)函數(shù),當(dāng)節(jié)點(diǎn)狀態(tài)變化時(shí),通過監(jiān)聽器將變化傳遞到客戶端并觸發(fā)回調(diào)函數(shù)。如下圖所示:

圖片圖片

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

圖片圖片

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

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

服務(wù)消費(fèi)者也是通過輪詢機(jī)制來獲取服務(wù)提供者的實(shí)例信息,其默認(rèn)輪詢頻率同樣是 30 秒。

總結(jié)

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

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

2024-06-26 10:29:02

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

2023-05-22 13:27:17

2021-08-05 06:54:05

觀察者訂閱設(shè)計(jì)

2024-02-26 11:52:38

代理模式設(shè)計(jì)

2024-01-29 12:22:07

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

2024-02-19 13:11:38

門面模式系統(tǒng)

2022-03-24 08:51:48

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

2024-04-12 12:19:08

語(yǔ)言模型AI

2022-08-30 22:12:19

Nacos組件服務(wù)注冊(cè)

2024-02-21 12:24:33

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

2024-02-23 12:11:53

裝飾器模式對(duì)象

2024-01-30 13:15:00

設(shè)計(jì)模式責(zé)任鏈

2024-02-04 12:04:17

2024-02-27 11:59:12

享元模式對(duì)象

2025-01-16 10:38:31

2021-03-22 10:05:59

netstat命令Linux

2023-09-15 12:00:01

API應(yīng)用程序接口

2023-09-08 08:20:46

ThreadLoca多線程工具

2021-02-22 09:44:03

KubernetesDNSLinux

2024-02-22 12:13:49

適配器模式代碼
點(diǎn)贊
收藏

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