开发者社区 > 云原生 > 微服务 > 正文

如何实现SAE 微服务应用优雅下线?

如何实现SAE 微服务应用优雅下线?

展开
收起
小天使爱美 2020-03-27 13:03:30 1739 0
1 条回答
写回答
取消 提交回答
  • 微服务应用托管至 SAE,如果微服务应用停止前您期望其处理完请求后再停止,您可以使用 SAE 优雅下线功能(即无损下线)。

    微服务应用优雅下线方案 SAE 支持 Spring Cloud 和 Dubbo 应用优雅下线,如果您的 Sping Cloud 或者 Dubbo 微服务应用需要进行优雅下线,则需要如下操作:

    配置环境变量或者增加 -D 启动参数开启优雅下线功能。 在应用生命周期管理设置中配置 PreStop,SAE 将自动下线本地服务。 配置环境变量开启优雅下线功能 在 SAE 部署环节的高级设置 > 环境变量中添加profiler.micro.service.http.server.enable=true ,如下图所示。您也可以通过 JVM 参数 -D 进行配置。

    配置环境变量开启无损下线功能 应用生命周期管理设置中配置 PreStop 在 SAE 部署环节的高级设置 > 应用生命周期管理设置,增加需要处理的下线前请求。例如:curl http://127.0.0.1:54199/offline。

    应用生命周期管理 PreStop 中增加配置 SAE 优雅下线功能默认占用 54199 端口,如果此端口和您应用端口产生冲突,那么请在配置环境变量中配置新的端口。

    profiler.micro.service.http.server.port = 「您需要设置的端口」,配置如下图所示:

    修改默认端口号 配置完成后,在应用生命周期管理设置中同步修改 PreStop 中的端口。

    修改PreStop设置中的端口号 结果验证 以下均通过 JAR 包方式创建应用,分别对 Dubbo 和 Spring Cloud 开发框架的应用进行验证。

    Dubbo 框架:表现良好,无报错。 Spring Cloud 框架:有少量流量损失,如下图所示。结果验证-Dubbo结果验证--Spring Cloud 经经测试流量损失约 5 秒左右,其原因如下:

    应用部署后,Nacos 注册中心服务将下线,需要客户端主动去轮询实例列表,轮训间隔为 10s(非实时),致使下线过程中服务虽然注销仍但会有流量损失。

    如果您的服务注册中心使用自建的 Zookeeper 注册中心,则没有该问题。

    后续改进 在优雅下线二期,我们将会增强Spring Cloud这一的能力,完善由于注册中心短板造成的流量损失问题。敬请期待。

    2020-03-27 13:11:24
    赞同 展开评论 打赏

为微服务建设降本增效,为微服务落地保驾护航。

相关电子书

更多
SAE 引领应用步入 Serverless 全托管新时代 立即下载
Serverless时代下大规模微服务应用运维的最佳实践 立即下载
云效携手SAE助力掌讯科技持续降本提效 立即下载