本文介绍在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。 运维需要配合,在启动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端口号会在EDAS-Container启动后随机产生,一般为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-bd7bf121****] [] [] Receive online command.Do HSF online.