Spring boot 2.3优雅下线,距离生产还有多远?

本文探讨了Spring Boot 2.3的优雅下线特性,分析了其在不同Server类型下的实现,并通过配置示例展示了如何启用该功能。同时,文章介绍了EDAS 3.0如何通过Java Agent技术实现无损下线,强调了无损下线在微服务中的重要性,并提出了完整的解决方案。最后,文中提及EDAS在服务下线过程中的客户端增强策略,确保服务的连续性。
摘要由CSDN通过智能技术生成

前言

在生产环境中,随着云原生架构的发展,自动的弹性伸缩、滚动升级、分批发布等云原生能力让用户享受到了资源、成本、稳定性的最优解。但是在应用的缩容、发布等过程中,由于实例下线处理得不够优雅,将会导致短暂的服务不可用,短时间内业务监控会出现大量 io 异常报错;如果业务没做好事务,那么还会引起数据不一致的问题,那么需要紧急手动订正错误数据;甚至每次发布,您需要发告示停机发布,否则您的用户会出现一段时间服务不可用。没处理好服务实例下线,无论发生上述哪种情况,都会对您业务的连续性造成困扰。

对于任何一个线上应用,如何在服务更新部署过程中保证业务无感知是开发者必须要解决的问题,即从应用停止到重启恢复服务这个阶段不能影响正常的业务请求,这使得无损下线成为应用生命周期中必不可少的一个环节。

同时在多次 Dubbo Meetup 中,平滑上下线一直都是位居微服务开发痛点前 Top 3。

下面我们来了解一下 Spring Boot 2.3 中提供的新特性 Graceful Shutdown,来分析一下它对我们生产稳定性带来什么样的帮助。

Spring Boot graceful shutdown

Graceful shutdown

Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. When enabled using server.shutdown=graceful, upon shutdown, the web server will no longer permit new requests and will wait for a grace period for active requests to complete. The grace period can be configured using spring.lifecycle.timeout-per-shutdown-phase. Please see the reference documentation for further details.

Spring Boot 2.3.0.RELEASE引入了Graceful Shutdown的功能。其中应用在等待下线期间对待新请求的方式,取决于我们所使用的 Server 类型。根据官方文档Tomcat、Jetty 和 Reactor Netty将会在网络层面停止接收新的请求。Undertow 会继续接收新的请求,但立即会以 HTTP 503(服务不可用)来响应。

配置与使用

在Spring Boot 2.3.0中,优雅停机的使用非常简单,可以通过在应用程序配置文件中设置两个属性来进行。
1、 server.shutdown 属性可以支持的值有两种

  1. immediate 这是默认值,配置后服务器立即关闭,无优雅停机逻辑。
  2. graceful 开启优雅停机功能,并遵守 spring.lifecycle.timeout-per-shutdown-phase
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值