本文介绍在 EDAS 中如何实现 HSF 应用的优雅上线。

前提条件

  • 请确保您的 EDAS Container 版本为 3.5.7 及以上版本。如果您的 EDAS Container 版本低于 3.5.7,请升级,详情请参见运行环境升降级
  • 请确保您的应用已经配置了健康检查 URL。

    要实现 HSF 应用的优雅上线,首先需要配置应用的健康检查 URL,以便挂载应用启动后自动执行的脚本,告知 EDAS 应用何时启动成功。

    EDAS 默认不会开启健康检查 URL,需要在应用代码中创建并配置对应的 Controller。

    @RestController
    public class HealthCheckController {
    
        @RequestMapping("/health")
        public String healthCheck(){
            return "success";
        }
    
    }

    相比端口号健康检查,URL 健康检查可以更加准确地反映出应用的健康状况。

    • 配置健康检查 URL 前:实例部署信息-配置健康检查 URL 前
    • 配置健康检查 URL 后:实例部署信息-配置健康检查 URL 后

背景信息

在应用启动过程中,服务会到注册中心进行注册,订阅该服务的消费者在收到通知后则可以向服务提供者发起调用。由于应用启动是一个持续进行的过程,在这个过程中,可能存在服务已经发布,但其依赖的组件(例如 Redis 或数据库资源)未完成初始化的情况。如果此时有流量进入,会直接导致调用失败。为了避免调用失败的风险,可以使用 HSF 的优雅上线功能。

HSF 所有的 ProvierBean 在初始化阶段都不会注册到注册中心,而是等 Spring 容器中所有 Bean 初始化成功并发出 RefreshEvent 事件后,再进行注册。同时,Pandora 会在所有服务注册后设置 status 为 true。 PE 需要配合,在启动 app server(tomcat) 后,启动 Web server 前,发送 curl localhost:12201/hsf/status 命令来检测服务是否初始化完毕,成功之后再启动 Web server (Apache/NGINX)。

为 HSF 应用配置延迟发布

  1. 登录 EDAS 控制台
  2. 在左侧导航栏选择应用管理 > 应用列表
  3. 应用列表页面单击需要优雅上线的应用。
  4. 在应用基本信息页面的应用设置区域单击设置,然后在列表中单击JVM
  5. 应用设置对话框单击自定义,在自定义参数文本框中输入-Dhsf.publish.delayed=true,然后单击配置 JVM 参数
    配置延迟发布之后,HSF 应用不会立刻发布,而是收到上线脚本通知后才发布。
  6. 登录 HSF 应用部署的 ECS 实例进行验证。
    1. 执行 telnet localhost 12201 登录 ECS 实例。
    2. 执行 cd hsf 进入 HSF 目录。
    3. 执行 ls 查看服务的发布状态。
      查看 HSF 服务发布状态

挂载自动上线脚本

  1. 登录 EDAS 控制台
  2. 在左侧导航栏选择应用管理 > 应用列表
  3. 应用列表页面单击需要优雅上线的应用。
  4. 在应用基本信息页面的应用设置区域单击设置,然后在列表中单击挂载脚本
  5. 挂载脚本对话框单击启动后脚本,输入以下挂载脚本。
    grep "PANDORA QOS PORT" /home/admin/edas-assist/edas-assist.pid | sed 's/\x0D$//' | awk -F":" '{ print "curl localhost:"$2"/hsf/online?k=hsf"}'| sh
    挂载脚本说明:
    • edas-assist.pid文件内容
      PID:19426
      HSF PORT:12200
      PANDORA QOS PORT:12203
      MONITOR PORT:8006
      CSP PORT:8719
    • /home/admin/edas-assist/edas-assist.pid 为记录 Pandora Boot 运行端口号的文件。Pandora Boot 端口号会在容器启动后随机产生,一般为 12201。当端口发生冲突时,会依次递增。
    • curl localhost:"$2"/hsf/online?k=hsf 命令用于执行上线操作,通知容器进行 HSF 服务发布,用户也可以手动调用该命令。

执行结果

验证 HSF 应用优雅上线包含 QoS 和日志两种方式。
  • QoS

    配置完脚本以后,执行部署应用、重置等操作时,即可以实现 HSF 应用的优雅上线。登录该应用部署的 ECS 实例,观察服务的发布状态。

    验证 HSF 服务优雅上线-QoS
  • 日志

    /home/admin/logs/hsf/hsf.log 中观察是否包含如下日志。包含即代表 HSF 接收到了上线命令。

    01 2019-11-26 16:23:03.456 INFO [qos-worker-3-1:t.hsf] [38ef6d01-10a8-405d-8725-bd7bf121e2e9] [] [] Receive online command.Do HSF online.