服務之優雅停機

2021-10-08 10:02:29 字數 1507 閱讀 5055

服務優雅停機分運維層面和應用層面,在這裡主要講一下應用層面的優雅停機,這裡講到的實現方式和案例均是在springboot專案下。

springboot支援應用的優雅停機,當應用接收到kill的訊號(15 終止號令)時,會停止接收新的請求,並等待活躍的請求完成後,關閉服務,通過yml檔案配置:

server:

shutdown: graceful //immediate立即停機(預設值)、graceful

shutdown配置介紹:

graceful:should support graceful shutdown, allowing active requests time to complete.

immediate:should shut down immediately.

但是需要注意的事,該種方式只對web請求所產生的執行緒有效,應用內新建立的執行緒無效(只要活躍的請求完成,即使應用內有執行緒存活,依然會立即關閉)。

優雅停機效果同springboot2.3.1.

@component

@slf4j

private volatile connector connector;

private final int waittime = 30;

@override

public void customize(connector connector)

@override

this.connector.pause();

log.info("active thread count: {}", thread.activecount());

executor executor = this.connector.getprotocolhandler().getexecutor();

if (executor instanceof threadpoolexecutor)

} catch (interruptedexception e) }}

@bean

public configurableservletwebserve***ctory servletcontainer(final gracefulshutdowntomcat gracefulshutdowntomcat)

}

通過jvm的鉤子監控kill訊號,該種方式對應用內建立的執行緒池有效(會在設定的最大等待時間達到之前,一直等待執行緒執行完成,或到達最大時間停機),對web請求產生的執行緒暫時未找到等待方式,不過web使用者請求一般都由運維在k8s和nginx層面進行路由處理。

另外需要注意終止方法呼叫的最大等待時間,要根據程式設計,提供乙個合理的值,避免執行緒池中存在未執行完成的執行緒。

@configuration

public class shutdownhook catch (interruptedexception e)

}));

}}

Dubbo 優雅停機

對於任何乙個線上應用,如何在服務更新部署過程中保證客戶端無感知是開發者必須要解決的問題,即從應用停止到重啟恢復服務這個階段不能影響正常的業務請求。理想條件下,在沒有請求的時候再進行更新是最安全可靠的,然而網際網路應用必須要保證可用性,因此在技術層面上優化應用更新流程來保證服務在更新時無損是必要的。傳...

Dubbo優雅停機

對於任何乙個線上應用,如何在服務更新部署過程中保證客戶端無感知是開發者必須要解決的問題,即從應用停止到重啟恢復服務這個階段不能影響正常的業務請求。理想條件下,在沒有請求的時候再進行更新是最安全可靠的,然而網際網路應用必須要保證可用性,因此在技術層面上優化應用更新流程來保證服務在更新時無損是必要的。傳...

Dubbo應用優雅停機實踐

網上相關的帖子很多,主要方法也都是加鉤子hook,這裡我對優雅停機進行了實踐 目前不管是dubbox apache的dubbo alibaba的dubbo都沒有實現真正意義上的優雅停機 截止20191231 標紅是重點,目前jar中自帶的hook並不能滿足先從註冊中心移除 再銷毀容器的順序,且啟用h...