问题现象

使用 Pandora Boot 开发的 HSF 应用,当应用注册或订阅的服务数多时,启动比较慢。

可能原因

使用 Pandora Boot 开发的 HSF 应用会为每个发布(服务提供者端)或消费(服务消费者端)的服务设置从服务注册中心(ConfigServer)同步地址的默认时间,默认为 3000 毫秒。当发布或消费的服务数量多的时候,每个服务需要串行等待同步地址,会导致应用启动很慢。

解决方案


  • 打开 Pandora Boot 应用的application.properties文件,修改该全局默认同步时间参数spring.hsf.max-wait-address-time参数(单位:毫秒),例如:
    spring.hsf.max-wait-address-time = 500
    HSF 应用注册或订阅服务数多导致启动比较慢_HSF 问题_应用开发_故障处理_Serverless 应用引擎 阿里云技术文档 第1张
  • 服务消费者端还可以针对服务接口通过参数addressWaitTime单独设置地址同步时间。

    当服务进行订阅时,会在该参数指定的时间内阻塞线程,等待地址推送,避免调用该服务时因为地址为空而出现地址找不到的情况。在消费者端应用启动时就需要订阅服务的接口才需要设置该参数,推荐设置为 3000 ~ 5000 毫秒,否则应用启动时可能遇到 HSF-0001-HSFServiceAddressNotFoundException 的异常(设置该参数的一个副作用就是应用启动会延长)。

    在应用程序中对某个服务消费者接口单独设置等待地址推送时间addressWaitTime,单位:毫秒。

    HSF 应用注册或订阅服务数多导致启动比较慢_HSF 问题_应用开发_故障处理_Serverless 应用引擎 阿里云技术文档 第2张
  • 或者在应用配置文件application.properties中单独对某个服务接口设置spring.hsf.max-wait-address-times.<完整的服务接口名>=<等待地址推送时间,等待地址推送时间的单位为毫秒。HSF 应用注册或订阅服务数多导致启动比较慢_HSF 问题_应用开发_故障处理_Serverless 应用引擎 阿里云技术文档 第3张
  • 如果设置了 spring.hsf.max-wait-address-time 参数并重启了应用,应用启动还是有点慢,可以对正在启动的应用做线程堆栈(jstack <应用JVM进程号> >> threaddump.txt)并结合$USER_HOME/log/configclient/config-client.log$USER_HOME/log/hsf/下面的日志进行分析。