更新时间:2024-08-16 GMT+08:00
分享

功能介绍

在应用使用过程中,应用的发布、重启、扩缩容操作无法避免,为了保证应用正确上下线、流量不丢失,微服务引擎基于Sermant Agent提供了一套优雅上下线的方案,包括预热、延迟下线等,避免了请求超时、连接拒绝、流量丢失等问题的发生。

  • 此功能目前处于公测阶段,当前仅在华东-上海一支持。
  • 当ServiceComb引擎为2.x版本且未开启安全认证时,支持此功能。
  • 目前仅支持基于Spring Cloud框架开发java应用,支持的注册中心包含Eureka、Nacos、 Consul以及Zookeeper。
  • 优雅上下线基于Spring Cloud的负载均衡实现,若有实现自定义负载均衡,该能力将会失效。

优雅上线实现机制

预热是优雅上线的核心机制,Sermant Agent还提供了延迟注册机制,减少流量丢失,从而实现优雅上线。

  • 延迟注册

    在服务启动成功之后不立刻注册,而是延迟一段时间再去注册,目的是虽然服务启动成功了,但可能还有一些框架或者业务的代码没有初始化完成,可能会导致调用报错,可以通过设置延迟注册,让服务充分初始化后再注册到注册中心对外提供服务。

  • 预热

    该方式主要用于解决当流量突然增加时,可能瞬间把实例压垮的问题。通过预热,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,目的是采用少流量对服务实例进行初始化,防止服务崩溃。预热是基于客户端实现的,当流量进入时,Sermant Agent会动态调整流量,根据服务的预热配置,对流量进行动态分配。对于开启服务预热的实例,在刚启动时,会给该实例分配较少的流量,随后流量将以曲线方式逐渐增加至与其他实例近乎持平。

优雅下线实现机制

延迟下线是优雅下线的核心机制,且Sermant Agent还提供了流量统计机制,即服务处理完所有统计的请求后再下线,减少流量丢失,从而实现了优雅下线。

图1 优雅下线结构图
  • 延迟下线

    当服务提供者实例下线时,无法避免仍有业务请求还未处理完成,从而可能会出现请求丢失的现象。延迟下线即对下线的实例提供保护,优雅下线插件基于下线实时通知+刷新缓存的机制快速更新上游的实例缓存,服务消费者能尽早感知服务提供者实例下线的行为,同时基于流量统计的方式,确保即将下线的实例尽可能的将流量处理完成,最大程度避免流量丢失。

  • 流量统计

    当服务即将下线时,为确保当前请求已全部处理完成,Sermant Agent会尝试等待30s(可配置),定时统计和判断当前实例请求是否均处理完成,处理完成后最终下线。

版本支持

Spring Cloud Version

Spring Boot Version

Zookeeper Discovery Version

Nacos Discovery Version

Consul Discovery Version

Eureka Client Version

Edgware.SR2+

1.5.x

1.x.x、2.0.x

1.5.x

1.x.x、2.0.x、2.1.x

1.4.x、2.0.x、2.1.x

Finchley.x

2.0.x

2.x.x

1.5.x、2.0.x、2.1.x

1.3.x、2.0.x、2.1.x

1.4.x、2.0.x、2.1.x

Greenwich.x

2.1.x

2.x.x

1.5.x、2.0.x、2.1.x

1.3.x、2.0.x、2.1.x

1.4.x、2.0.x、2.1.x

Hoxton.x

2.2.x、2.3.x

2.x.x、3.0.0 - 3.1.0

2.x.x、2020.0.RC1、2021.1

1.3.x、2.0.x、2.1.x、2.2.x

1.4.4.RELEASE - 1.4.7.RELEASE、2.x.x、3.0.0 - 3.1.0

2020.0.x

2.4.x、2.5.x

3.0.0 - 3.1.0

2.x.x、2020.0.RC1、2021.1

3.0.0 - 3.1.0

2.1.x、2.2.x、3.0.0 - 3.1.0

2021.0.0

2.6.x

3.0.0 - 3.1.0

2.x.x、2020.0.RC1、2021.1

3.0.0 - 3.1.0

3.0.0 - 3.1.0

相关文档