前言
略
起因
服务发版时启停阶段有大量交易超时,超时时间为1s
原因
- 停服务时,springboot 管理的nacos下线时机非常靠后。具体原因见nacos源码浅析
- 停服务时,在服务终止前一刻,定时调度触发加载mysql信息,导致连接中断
- 停服务时,线程池部分交易没有处理完,上游socket time out
- 起服务时,服务未启动时就注册了nacos,启动后才订阅nacos,
蜜汁操作 - 起服务时,大量交易瞬间涌入,线程池创建线程耗时,ribbon初始化连接耗时,kafka创建实例耗时(不是线程安全的)
解决
- 停服务时,自定义实现优先下线nacos;所有线程池统一管理,监听线程池状态;监听tomcat连接状态,直到没有未处理的消息,并没有新请求进来
- 起服务时,加载缓存,将所有缓存数据优化为hashmap,时间复杂度降低到O(1); 线程池预热; ribbon开启饥饿模式;自定义实现nacos延迟注册(不支持);灰度发布(未实现);测试用例预热http连接池(未实现);