Skip to content

无损上下线插件

Haotian Zhang edited this page Dec 16, 2024 · 7 revisions

插件说明

微服务发布过程中,可能会因为服务的变更造成流量的错误或中断。Spring Cloud Tencent 提供了插件来实现无损上下线,其原理为:

  • 服务端的无损上线:在服务启动后,等待服务完全就绪后再注册到注册中心(无配置健康探测接口时为延迟注册),并对外提供服务。然后再滚动更新下一个节点。
  • 服务端的无损下线:在服务停止前,先从注册中心注销,拒绝新的请求,等待旧的请求处理完毕后再下线服务。

使用指南

1. 引入依赖

Spring Cloud Hoxton 版本从 2.0.0.0 开始支持,其他 Spring Cloud 版本在支持中

pom.xml 中添加依赖

<dependencies>
	<dependency>
		<groupId>com.tencent.cloud</groupId>
		<artifactId>spring-cloud-tencent-lossless-plugin</artifactId>
	</dependency>
</dependencies>

2. 配置就绪检查和 preStop 脚本

在就绪检查配置中,设置 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 值(默认值 30)。

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 业务程序健康探测接口。每 health-check-interval 时间调用一次 health-check-path ,如果返回200,则触发注册。
spring.cloud.polaris.lossless.delay-register-interval 30000 无配置业务程序健康探测接口,延迟注册时间。默认 30000(单位ms)
spring.cloud.polaris.lossless.health-check-interval 5000 配置业务程序健康探测接口后,健康探测间隔。默认 5000(单位ms)
Clone this wiki locally