-
Notifications
You must be signed in to change notification settings - Fork 495
无损上下线插件
shedfreewu edited this page Mar 18, 2024
·
7 revisions
微服务发布过程中,可能会因为服务的变更造成流量的错误或中断。Spring Cloud Tencent 提供了插件来实现无损上下线,其原理为:
- 服务端的无损上线:在服务启动后,等待服务完全就绪后再注册到注册中心(无配置健康探测接口时为延迟注册),并对外提供服务。然后再滚动更新下一个节点。
- 服务端的无损下线:在服务停止前,先从注册中心注销,拒绝新的请求,等待旧的请求处理完毕后再下线服务。
Spring Cloud Hoxton 版本从 1.14.0-Hoxton.SR12-RC1 开始支持,其他 Spring Cloud 版本在支持中
在 pom.xml
中添加依赖
<dependencies>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-tencent-lossless-plugin</artifactId>
</dependency>
</dependencies>
在就绪检查配置中,设置 HTTP 探测,检查端口为无损上下线插件端口(默认为 28080),请求路径固定为 /online。
在 preStop 脚本中。配置 curl -X PUT http://127.0.0.1:28080/offline && sleep 20
,其中 28080 端口为无损上下线插件端口,/offline 是无损下线接口。sleep 20s 为优雅下线后,服务处理存量请求的时间。Kubernetes 默认等待 30s 后强制停止 pod,如果休眠时间加上 pod 停止时间超过 30s,需要调整 deployment yaml 中的 terminationGracePeriodSeconds
值。
yaml 参考示例:
apiVersion: apps/v1
kind: Deployment
# 其他部署配置这里忽略
spec:
template:
spec:
containers:
- image: xxx
lifecycle:
preStop:
exec:
command: ["curl","-X","PUT","http://localhost:28080/offline","&&","sleep","20"]
readinessProbe:
httpGet:
path: /online
port: 28080
initialDelaySeconds: 30
periodSeconds: 5
terminationGracePeriodSeconds: 30
配置项Key | 默认值 | 是否必填 | 配置项说明 |
---|---|---|---|
spring.cloud.polaris.lossless.enabled | true | 否 | 无损上下线插件开关 |
spring.cloud.polaris.lossless.port | 28080 | 否 | 无损上下线插件提供的额外端口(非业务程序端口) |
spring.cloud.polaris.lossless.health-check-path | 无 | 否 | 业务程序健康探测接口 |
spring.cloud.polaris.lossless.delay-register-interval | 30000 | 否 | 无配置业务程序健康探测接口,延迟注册时间。默认 30000(单位ms) |
spring.cloud.polaris.lossless.health-check-interval | 5000 | 否 | 配置业务程序健康探测接口后,健康探测间隔。默认 5000(单位ms) |
- 您在使用过程中遇到任何问题,请提 Issue 或者加入我们的开发者群告诉我们,我们会在第一时间反馈
- Spring Cloud Tencent 社区期待您的加入,一个 Star、PR 都是对我们最大的支持
- 项目介绍
- 使用指南
- 最佳实践
- 开发文档
- 学习资料