架構師面試(三十八):注冊中心架構模式

題目

在微服務系統中,當服務達到一定數量時,通常需要引入【注冊中心】組件,以方便服務發現。

大家有沒有思考過,注冊中心存在的最根本的原因是什么呢?注冊中心在企業中的最佳實踐是怎樣的?注冊中心的服務發現有兩大模式,分別是:【客戶端發現模式】和【服務端發現模式】,這兩者之間有怎樣的區別呢?

下面關于【注冊中心】的描述中,說法正確的有哪幾項?

A. 注冊中心存在的本質原因是為了降低【服務提供方】和【服務消費方】之間的耦合性,避免兩者循環依賴的問題;

B. 在大中型微服務系統中,【注冊中心】通常需要和 “服務管理平臺” 配合完成 服務的注冊和訂閱,而【注冊中心】專注于 “服務節點的注冊” 和 “服務節點的發現”;

C.【客戶端發現模式】的注冊中心相對直接,因為客戶端知曉可用的服務實例,能針對特定應用實現智能負載均衡;Consul Template 是客戶端發現模式的典型范例;

D.【服務端發現模式】的注冊中心最大的優點是客戶端無需關注服務發現的細節,減少了編程語言框架需要完成的服務發現邏輯;這種模式對部署環境的依賴較強,Netflix Eureka 是服務端發現模式的典型范例。

解析

一、先討論注冊中心存在的本質原因

舉例,服務消費方 X 遠程調用服務提供方 Y,如下圖所示。我們說,服務 X 依賴于服務 Y;也就是說,服務 X 知道服務 Y 的存在性, 而服務 Y 不知道服務 X 的存在性。當服務 Y 集群擴容一個節點或縮容一個節點時,服務 Y 就需要把這種情況同步告之服務 X,也就是說,服務 Y 需要知道服務 X 的存在性。

圖片

言外之意,從服務調用上來說,服務 X 依賴于服務 Y,但是從服務管理上來說,服務 Y 又需要依賴于服務 X。此時,服務消費方和服務提供方之間形成了一種循環依賴的局面。怎么解決這個問題呢?這就是【注冊中心】這個組件存在的根本原因了,如下圖所示。

圖片

為了避免服務提供方 Y 對服務消費方 X 的依賴,服務 Y 只需把自己注冊到【注冊中心】即可,然后哪個服務對 Y 感興趣,自己去【注冊中心】發現和獲取就好了,服務 Y 不用關注。因此:注冊中心存在的本質原因是為了降低【服務提供方】和【服務消費方】之間的耦合性,避免兩者之間循環依賴的問題。

二、再說注冊中心在企業應用的一種最佳實踐。

如下圖所示,【服務管理平臺】用于對服務集群信息(比如:服務名稱、服務負責人、服務歸屬部門、服務吞吐量等)和服務訂閱信息進行管理,側重于對服務集群的管理;【注冊中心】用于對服務節點的注冊、健康檢查、提供節點查詢和變更通知等,側重于對服務節點的管理。

圖片

基本的服務流程如下:

  1. 服務負責人在對外發布服務時,需要首先在【服務管理平臺】上對服務進行注冊;

  2. 服務消費方服務的負責人,如果要調用其他服務,需要在【服務管理平臺】上發起調用申請,即 “訂閱服務”申請;該申請被審批通過后,方可生效,畢竟如果是高吞吐的調用,是需要服務提供方集群進行擴容的;

  3. 服務提供方服務集群中的每一個節點,在啟動的時候,將自己注冊到【注冊中心】;并且每一個節點在宕機或假死時,注冊中心都可以通過 “健康檢查” 及時獲取到;

  4. 服務消費方服務集群中的每一個節點,在啟動的時候或啟動之后,都可以到【注冊中心】獲取到已經訂閱的服務提供方集群中還活躍的服務節點列表;如果服務提供方集群節點列表有任何變化,【注冊中心】都可以及時將 “變更信息” 通知到服務消費方集群中的每一個節點;

  5. 最后,服務消費方集群中的每一個節點,向服務提供方集群中的每一個節點發起 【RPC】調用。

三、我們再討論注冊中心服務發現的兩大模式:【客戶端發現模式】和【服務端發現模式】。

【客戶端發現模式】更為常見,如下圖所示。服務提供方向注冊中心進行注冊,每一個服務消費方節點從注冊中心獲取服務提供方服務集群的節點列表,并且對請求實現負載均衡。

圖片

【客戶端發現模式】的注冊中心相對直接一些,因為客戶端知曉可用的服務實例,能針對特定應用實現智能負載均衡;這種模式的缺點就是客戶端與服務注冊綁定,要針對服務端用到的每個編程語言和框架,實現客戶端的服務發現邏輯;Netflix Eureka ?是客戶端發現模式的典型范例。

【服務端發現模式】如下圖所示,客戶端直接將請求打在 服務端的 “負載均衡” 組件上,“負載均衡” 組件查詢【注冊中心】獲取服務提供方節點列表,然后將請求轉發到其中一個節點上。

圖片

【服務端發現模式】最大的優點就是客戶端無需關注服務發現的細節,只需要簡單地直接向負載均衡器發送請求即可,這減少了編程語言框架需要完成的服務發現邏輯;不過,這種模式需要部署環境提供這樣的 “負載均衡”組件方可,對部署環境的依賴較強;Consul Template 是服務端發現模式的典型范例。(關于Consul Template 我們會在后續進行詳細分析!)

參考答案

AB

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79130.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79130.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79130.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Day.js和Moment.js對比,日期時間庫怎么選?

在JavaScript的日期處理庫中,Moment.js 和 Day.js 是兩個非常流行的選擇。本文將基于從npmtrends的數據,對這兩個庫進行詳細的對比分析。 Moment.js的重度使用者。凡是遇到時間和日期的操作,就把Moment.js引用上。 直到有天我發現加載的mome…

羅默如何用木星衛星“宇宙鐘表”測量光速?

一、17世紀的“宇宙級實驗” 1676年,丹麥天文學家奧勒羅默(Ole Rmer)在巴黎天文臺做出驚人發現: 木星衛星的“遲到早退”現象,竟能揭示光速的秘密! 通過觀察木衛一(Io)的軌道周期變…

deepseek 技巧整理

1、導出word 和excel 功能,在使用以下提示詞。 請幫我列出減肥期間可以吃的水果,并分析該水果含有的營養元素,以表格的形式星現。1.要以html的方式輸出 2.要可以直接運行 3.頁面要提供可以直接下載word和excel功能

思考軟件框架

數據庫是達夢數據庫 假定里面有40張表,軟件的業務邏輯比較復雜。 當然,依然是對數據庫中數據的增,刪,改,查,組合,顯示。 但是也涉及到多種軟件,多臺設備之間的通信。 我們可以使用…

探索 Disruptor:高性能并發框架的奧秘

在當今的軟件開發領域,處理高并發場景是一項極具挑戰性的任務。傳統的并發解決方案,如基于鎖的隊列,往往在高負載下表現出性能瓶頸。而 Disruptor 作為一個高性能的并發框架,憑借其獨特的設計和先進的技術,在處理海量數…

前端面經-VUE3篇--vue3基礎知識(一)插值表達式、ref、reactive

一、計算屬性(computed) 計算屬性(Computed Properties)是 Vue 中一種特殊的響應式數據,它能基于已有的響應式數據動態計算出新的數據。 計算屬性有以下特性: 自動緩存:只有當它依賴的響應式數據發生變化時&#xff…

數據結構6 · BinaryTree二叉樹模板

代碼函數功能順序如下: 1:destroy:遞歸刪除樹 2:copy:復制二叉樹 3:preOrder:遞歸前序遍歷 4:inOrder:遞歸中序遍歷 5:postOrder:遞歸后續遍…

C++/SDL進階游戲開發 —— 雙人塔防游戲(代號:村莊保衛戰 13)

🎁個人主頁:工藤新一 🔍系列專欄:C面向對象(類和對象篇) 🌟心中的天空之城,終會照亮我前方的路 🎉歡迎大家點贊👍評論📝收藏?文章 文章目錄 十…

強化學習之基于無模型的算法之時序差分法

2、時序差分法(TD) 核心思想 TD 方法通過 引導值估計來學習最優策略。它利用當前的估計值和下一個時間步的信息來更新價值函數, 這種方法被稱為“引導”(bootstrapping)。而不需要像蒙特卡羅方法那樣等待一個完整的 episode 結束才進行更新&…

AE/PR模板 100個現代文字標題動態排版效果動畫 Motion Titles

Motion Titles是一個令人驚艷的AE/PR模板,提供了100個現代文字標題的動態排版效果動畫。這些動畫效果能夠為你的項目增添視覺沖擊力和專業感,為文字標題注入活力和動感。該模板適用于Adobe After Effects CC或更高版本以及Adobe Premiere Pro 2020或更高…

【AI提示詞】二八法則專家

提示說明 精通二八法則(帕累托法則)的廣泛應用,擅長將其應用于商業、管理、個人發展等領域,深入理解其在不同場景中的具體表現和實際意義。 提示詞 # Role: 二八法則專家## Profile - language: 中文 - description: 精通二八法…

前端八股 CSS 1

盒子模型 進行布局時將所有元素表示為一個個盒子box padding margin border content content:盒子內容 待顯示的文本和圖像 padding:內邊距,內容和border之間的空間,不能為負數,受bkc影響 border:邊框&#xff0c…

組件通信-$attrs

概述:$attrs用于實現當前組件的父組件,向當前組件的子組件通信(爺→孫)。 具體說明:$attrs是一個對象,包含所有父組件傳入的標簽屬性。 注意:$attrs會自動排除props中聲明的屬性(可以認為聲明過…

jdk開啟https詳細步驟

要在 JDK 中啟用 HTTPS,您可以按照以下詳細步驟進行操作: 生成密鑰庫和證書: 首先,您需要生成一個密鑰庫(keystore)和證書,可以使用 keytool 工具來生成。以下是使用 keytool 生成密鑰庫和證書的…

文章四《深度學習核心概念與框架入門》

文章4:深度學習核心概念與框架入門——從大腦神經元到手寫數字識別的奇幻之旅 引言:給大腦裝個"GPU加速器"? 想象一下,你的大腦如果能像智能手機的GPU一樣快速處理信息會怎樣?這正是深度學習的終極目標&…

關于CSDN創作的常用模板內容

🤟致敬讀者 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺 📘博主相關 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息 文章目錄 好文評論新文推送 📃文章前言 &…

linux的信號量初識

Linux下的信號量(Semaphore)深度解析 在多線程或多進程并發編程的領域中,確保對共享資源的安全訪問和協調不同執行單元的同步至關重要。信號量(Semaphore)作為經典的同步原語之一,在 Linux 系統中扮演著核心角色。本文將深入探討…

《Android 應用開發基礎教程》——第十一章:Android 中的圖片加載與緩存(Glide 使用詳解)

目錄 第十一章:Android 中的圖片加載與緩存(Glide 使用詳解) 🔹 11.1 Glide 簡介 🔸 11.2 添加 Glide 依賴 🔸 11.3 基本用法 ? 加載網絡圖片到 ImageView: ? 加載本地資源 / 文件 / UR…

AE模板 300個故障干擾損壞字幕條標題動畫視頻轉場預設

這個AE模板提供了300個故障干擾損壞字幕條標題動畫視頻轉場預設,讓您的視頻具有炫酷的故障效果。無論是預告片、宣傳片還是其他類型的視頻,這個模板都能帶給您令人驚嘆的故障運動標題效果。該模板無需任何外置插件或腳本,只需一鍵點擊即可應用…

在 Python 中,以雙下劃線開頭和結尾的函數(如 `__str__`、`__sub__` 等)

在 Python 中,以雙下劃線開頭和結尾的函數(如 __str__、__sub__ 等)被稱為特殊方法(Special Methods)或魔術方法(Magic Methods)。它們確實是 Python 內置的,用于定義類的行為&#…