心跳監測與服務剔除

2021-10-06 14:54:04 字數 2461 閱讀 7988

服務剔除

小結

假如志玲姐姐親了你一口,你卻沒有心動的感覺,那麼一定是你停止了心跳

今天社保中心來了一位釘子戶,90多歲的王大爺又興高采烈的來給自己快120歲的老父親領社保了!

工作人員這一想,好像**不對啊,這老父親120歲的年紀都可以上健力士世界紀錄了,要不咱幫老爺子去申請一下?王大爺一聽可慌了,連連表示使不得使不得,就來領個社保而已。但是本著負責的態度,社保中心還是決定實地走訪一下。

眼看要穿幫,王大爺只好老實交代,原來王大爺的老父親早就沒了十好幾年,墳頭草都快長成非洲大草原了,但是在社保中心沒有銷戶,這才造成了這麼乙個bug。

不光社保中心有這個情況,眼下eureka的註冊中心也有同樣的問題,昨天就有幾台伺服器中暑了,沒了響應,很多呼叫請求不停報404,那eureka有什麼行之有效的手段來解決這個問題呢?

心跳不息,生命不止。大道至簡的springcloud就借助這生命的本源,也就是「心跳」,來知曉服務的可用性。我們來看一下心跳檢測有哪些特點:

客戶端發起

我們前面說過eureka的註冊中心是乙個運籌帷幄的角色,足不出戶辦天下事,所以心跳服務是由乙個個服務節點根據配置的時間主動發起的。

同步狀態

我們說的「心跳」不光要告訴註冊中心「我還活著」,還要告訴他我活的好不好,是現在快不行了(out_of_service狀態)還是生龍活虎(up狀態)

服務剔除

現在輪到註冊中心做點事情了,對一段時間無響應的服務,反映到心電圖上就是一根直線跌停板,那便要主動從註冊列表中剔除,以防服務呼叫方請求失敗。

服務續約

也許大家還不知道,服務續約底層也是靠著心跳來實現的,但包含了一套「髒資料」處理流程,老師在服務續約章節會詳細講解。

心跳檢測之於服務註冊來說,就像做心電圖檢查之於辦入院手續,入院手續需要做全方位的檢查,因此要同步數十個屬性到註冊中心,而做乙個心電圖,僅僅需要以下這些資訊就夠了

## 客戶端指標

eureka.instance.lease-renewal-interval-in-seconds=10

eureka.instance.lease-expiration-duration-in-seconds=20

這兩個指標都配置在服務節點上,分別表示了以下的含義

通常第乙個時間一定是小於第二個時間的,否則還沒等到傳送第二個心跳,就被註冊中心推進太平間了。畢竟兩次心跳之間的間隔時間,還得再多加幾秒的網路延遲,才是判斷服務是否掛掉的最小時間。

大家通過乙個案例,思考一下在極端情況下服務剔除的作用。2023年5月份,因市政施工導致杭州支付寶機房的光纜被挖斷,隨後全國部分使用者陸續出現支付寶無法登陸的情況。支付寶隨後緊急通過技術手段,將使用者請求切換到其他機房,這才在近2個小時後使受影響使用者逐漸恢復。

假設我們自己的應用也碰到了類似情況,當一部分服務因為網路問題導致不可用,那麼如何在盡可能短的時間內,剔除不可用的節點?

這就要借助eureka的服務剔除功能,服務剔除是心跳檢測的後手,正是為了讓無心跳響應的服務節點自動下線,讓我們來看一下eureka的服務剔除流程

啟動定時任務

註冊中心在啟動的時候也會同步開啟乙個後台任務,預設每間隔60秒觸發服務剔除任務,當然我們也可以通過在服務端```eureka.server.eviction-interval-timer-in-ms=30000``做如下引數配置修改觸發間隔,這裡將間隔設定成了30秒。此處建議不要設定的時間過短。

呼叫evict

不像服務註冊的山路十八彎,服務剔除比較直接了當,通過abstractinstanceregistry的eviction方法直接執行。

遍歷過期服務 接下來註冊中心會遍歷所有服務節點,揪出所有過期服務。如何判斷乙個服務是過期服務呢,只要滿足以下兩點中任意一點就可以當做過期

計算可剔除的服務總個數

所有服務是否能被全部剔除呢?當然不是,服務中心也要顧及自身的穩定性,因此他設定了乙個係數(預設0.85),可剔除的服務數量,不能大於已註冊服務的總數量乘以這個係數。比如當前有100個服務,其中99個已經斷了氣,那麼註冊中心實際上只能剔除100*0.85 = 85個服務節點,而不是99個。

亂序剔除服務

本節帶大家學習了關於心跳檢測和服務剔除的知識

心跳檢測的作用,心跳包含的內容以及控制引數

註冊中心服務剔除操作的核心流程

elasticsearch心跳監測

bin sh idexport path path usr local sbin usr local bin usr sbin usr bin sbin bin opt bin usr i686 pc linux gnu gcc bin 4.1.2 usr kde 3.5 sbin usr kde ...

視景體方程與剔除

這次來討論一下視景體剔除的一些技巧,視景體在3d程式中是個很重要的概念,我們可以把視景體看作是一台攝像機也就是肉眼能夠看到的空間.視景體以外的東西是看不到的,可以利用這點來剔除多餘的模型,於是不必要的頂點將不會進入管線,這能夠提高不少fps.首先來看一下視景體是個啥東西 就是這麼個六面稜錐,這是經過...

心跳包機制及Socket通訊服務的心跳包

心跳包之所以叫心跳包是因為 它像心跳一樣每隔固定時間發一次,以此來告訴伺服器,這個客戶端還活著。事實上這是為了保持長連線,至於這個包的內容,是沒有什麼特別規定的,不過一般都是很小的包,或者只包含包頭的乙個空包。在tcp的機制裡面,本身是存在有心跳包的機制的,也就是tcp的選項 so keepaliv...