成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringCloud應用無損下線實踐

原創 精選
開發 后端
本文主要記錄了經銷商技術部在保證SpringCloud應用無損下線的一些實踐探索和總結,其中對SpringCloud服務下線造成損失的原因進行了比較全面的分析并提供了最終解決方案和實現,希望對其他人也有所幫助。

1、實踐背景

現在java主流的微服務技術棧毫無疑問是SpringCloud,這也是經銷商技術部微服務實踐采用的技術棧。注冊中心采用公司技術部的nacos。在SpringCloud實踐中大家普遍遇到的問題是應用默認是無法做到無損下線的,需要更多的輔助措施才能得到無損下線的效果,本文主要分享我們團隊解決應用無損下線的一些實踐。

2、有損下線

有損下線指的是應用在下線過程中,部分請求沒有被妥善處理,出現請求異常進而影響應用可用性,影響用戶使用。有損下線原因分析:

損失原因1:springboot實例默認接收到停止信號TERM時,馬上停止服務。如下圖

當springboot實例收到TERM信號立即關閉的時候,很有可能請求隊列中還有請求,還有一部分正在處理的請求。如果立即關閉這些請求都會損失掉。

解決方案:在springboot 2.3版本以上,提供了優雅關閉(Graceful Shutdown)配置。如下:

server:      
shutdown: graceful

配置了優雅關閉后,實例關閉過程如下圖所示:

springboot實例在收到TERM信號后,不會立即關閉應用,而是進入優雅處理階段,這個優雅時間段時長可以配置,默認為30秒。

springboot在網絡層拒絕新的請求進入的同時,會等隊列中的請求和正在處理請求都處理完成或者優雅時間耗盡才關閉應用。這樣只要給應用配置合適的優雅關閉階段時長就可以避免這類請求損失。

損失原因2:在使用注冊中心的默認情況下,服務下線狀態無法實時通知給調用方。

在微服務引入注冊中心的場景下,provider(服務提供方),registry(注冊中心),consumer(服務調用方)正常服務調用過程如下:

服務下線時的時序圖如下:  

當provider收到TERM信號進入Graceful shutdown階段的時候也就是圖中的1時間點,provider在網絡層便不再接收新的請求,然后直到時間點4,consumer才停止向provider發送請求。所以損失時間 = 時間點4 – 時間點1。

3、解決方案

方案1:provider下線盡快通知到consumer。

Ribbon默認采用輪詢拉取服務列表的方式,時間間隔默認為30秒,也就是說

時間點3 – 時間點2 = 30秒  (最長)

對一個服務來說,如果30秒不可用,情況是相當糟糕的,改進方法有兩個,一是縮短輪詢間隔到5秒左右;二是可以實現注冊中心事件推送方式通知consumer更新服務列表,盡量縮短損失時長。但是這只能治標不治本,因為雖然損失時長縮短了,但是仍然還有幾秒損失,每次上線都需要損失請求仍然是不可接受的。

方案2:在provider關閉前通知到consumer下線。

如果是可以人工干預下線過程,我們大概會這么干:首先把要下線的provider實例從負載中摘除掉確保不再有流量打到下線實例后,才真正執行下線命令。這樣就不會有任何流量損失了。只需要將這個流程自動化就可以完美解決了。

好在k8s提供了preStop配置,在k8s平臺中,preStop和TERM信號關系是這樣的:preStop會先執行完,然后k8s才會給pod發送TERM信號,k8s會給pod的停止設置一個寬限時長,超過寬限時長會強殺掉,這個寬限時長從preStop調用開始計時。采用這個方案的話,服務下線時序圖如下:  

可以看到當consumer不再往provider打流量后,provider才開始執行shutdown,這樣不會有任何損失。

4、實現步驟

1) 縮短輪詢間隔

在springboot應用中增加如下配置:

ribbon:  
ServerListRefreshInterval: 5000 # 服務列表刷新間隔

2)springboot應用增加preStop hook實現

擴展springboot actuator節點,具體代碼如下。

其中sleepSeconds可以根據項目配置。

3)在云平臺配置preStop

4)安全加固

由于暴露了prestop hook接口,如果服務直接暴露至公網,有可能被惡意掃描調用,對接口進行安全加固是很有必要的。我們在prestop hook接口增加token參數,例如:

prestop-hook-api?token=xxxxxxxxxxxxxx

每個項目可以約定不同token值,并對token值進行校驗,token值不對的訪問將被拒絕,這樣惡意掃描就無法訪問到prestop hook 接口了。

代碼實現我們已經封裝在harmless-starter中并集成到項目模板里,這樣使用者只需要配置sleepSeconds即可。

5、總結

本文主要記錄了經銷商技術部在保證SpringCloud應用無損下線的一些實踐探索和總結,其中對SpringCloud服務下線造成損失的原因進行了比較全面的分析并提供了最終解決方案和實現,希望對其他人也有所幫助。

責任編輯:龐桂玉 來源: 之家技術
相關推薦

2022-01-27 08:27:23

Dubbo上下線設計

2024-12-10 08:27:28

2023-07-14 21:34:40

JVM上下線線程

2022-02-10 07:03:32

流量應用架構數據交換

2023-04-12 07:14:31

Spring應用業務

2023-03-13 08:02:55

斷路器應用API

2018-06-22 10:54:49

ODCC

2017-03-24 09:44:33

Java反射機制

2017-05-17 15:28:15

Java反射機制

2013-11-20 10:21:30

閃存

2022-08-04 10:12:49

桌面技術

2021-09-28 06:41:54

LayUI開源Github

2023-02-07 07:43:27

微服務應用框架

2010-03-02 11:12:33

Android應用開發

2012-05-28 09:10:18

云計算應用

2020-12-18 10:42:14

鴻蒙開發應用

2009-10-28 10:26:36

2022-07-15 12:58:02

鴻蒙攜程華為

2020-12-08 09:45:33

鴻蒙OS應用開發

2020-12-03 10:05:07

鴻蒙OS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区四区电影视频在线观看 | 日韩电影免费在线观看中文字幕 | 亚洲视频 欧美视频 | 国产一区二区三区在线视频 | 久久久久无码国产精品一区 | 日韩欧美在线观看 | 午夜免费福利电影 | 亚洲精品美女视频 | 蜜桃精品噜噜噜成人av | 午夜精品一区二区三区在线 | 亚洲综合区 | 九九九久久国产免费 | 国产精品久久久久久久久免费 | www国产成人免费观看视频,深夜成人网 | 犬夜叉在线观看 | 亚洲成人二区 | 日韩成人免费视频 | 真人女人一级毛片免费播放 | 天天射视频 | 91色视频在线观看 | 国产成人jvid在线播放 | 日本一区二区三区四区 | 欧美一区二区成人 | 久久久精选 | 一区二区三区四区在线视频 | 久久久久久久国产精品影院 | 久久久久国产一区二区三区四区 | 一级片在线免费播放 | 91精品国产乱码久久久久久久久 | 亚洲色图综合 | 国产亚洲精品久久久久久豆腐 | 国产成人精品综合 | 日日操操 | 91九色视频 | 欧美精品一区二区在线观看 | 欧美视频免费在线 | 男人天堂免费在线 | 欧美视频第二页 | 午夜一区 | 国产 日韩 欧美 制服 另类 | 亚洲视频中文字幕 |