RPC實戰與核心原理之服務發現

2022-09-21 03:15:11 字數 630 閱讀 3646

為了高可用,在生產環境中服務提供方都是以集群的方式對外提供服務,集群裡面的這些 ip 隨時可能變化,我們也需要用一本「通訊錄」及時獲取到對應的服務節點,這個獲取的過程我們一般叫作「服務發現」。

對於服務呼叫方和服務提供方來說,其契約就是介面,相當於「通訊錄」中的姓名,服務節點就是提供該契約的乙個具體例項。服務 ip 集合作為「通訊錄」中的位址,從而可以通過介面獲取服務 ip 的集合來完成服務的發現。這就是我要說的 rpc 框架的服務發現機制

示意圖:

整體流程圖:

zookeeper 的一大特點就是強一致性,zookeeper 集群的每個節點的資料每次發生更新操作,都會通知其它 zookeeper 節點同時執行更新。它要求保證每個節點的資料能夠實時的完全一致,這也就直接導致了 zookeeper 集群效能上的下降

因為要求最終一致性,我們可以考慮採用訊息匯流排機制。

具體流程

採用兩級快取,註冊中心和消費者的記憶體快取,通過非同步推拉模式來確保最終一致性。

通過訊息匯流排的方式,我們就可以完成註冊中心集群間資料變更的通知,保證資料的最終一致性,並能及時地觸發註冊中心的服務下發操作。服務發現的特性是允許我們在設計超大規模集群服務發現系統的時候,捨棄強一致性,更多地考慮系統的健壯性。最終一致性才是分布式系統設計中更為常用的策略。

RPC實戰與核心原理之非同步RPC

提公升吞吐量,其實關鍵就兩個字 非同步 提高cpu等資源的利用率 非同步,最常用的方式就是返回 future 物件的 future 方式,或者入參為 callback 物件的 方式,而 future 方式可以說是最簡單的一種非同步方式了。我們發起一次非同步請求並且從請求上下文中拿到乙個 future...

RPC實戰與核心原理之健康檢測

因為有了集群,所以每次發請求前,rpc 框架會根據路由和負載均衡演算法選擇乙個具體的 ip 位址。為了保證請求成功,我們就需要確保每次選擇出來的 ip 對應的連線是健康的 業內常用的檢測方法就是用心跳機制,就是服務呼叫方每隔一段時間就問一下服務提供方目前的狀態 可用率的計算方式是某乙個時間視窗內介面...

RPC實戰與核心原理之優雅啟動

優雅停機,就是為了讓服務提供方在停機應用的時候,保證所有呼叫方都能 安全 地切走流量,不再呼叫自己,從而做到對業務無損。其中實現的關鍵點就在於,讓正在停機的服務提供方應用有狀態,讓呼叫方感知到服務提供方正在停機。簡單來說,就是讓剛啟動的服務提供方應用不承擔全部的流量,而是讓它被呼叫的次數隨著時間的移...