motan
motan copied to clipboard
motan服务端如何进行启动预热
学习了下motan源码发现,默认consumer负载均衡策略为ActiveWeightLoadBalance-低并发referer获取策略,正好和Dubbo的客户端逐步放量策略是相反的,这样motan服务端新起来的节点瞬间被命中的几率是很高的,加上初始化过程会造成瞬间压力很大。 两个问题:
- 请问如何做才能使服务端预热后再提供服务,标准做法是怎样的?
- 如果没有官方机制是否可以参考Dubbo通过负载均衡器根据节点新旧程度逐步放量进行,这样做是否有啥坑?
ActiveWeightLoadBalance 主要是实现近似能者多劳的负载均衡模式,适合应用在server节点处理能力不太均匀的场景,并不会特别的考虑预热相关的问题。如果server节点处理性能相近的情况下,可以使用轮询或随机的负载均衡方式。
关于你提到的两个问题,我说一下我个人的理解:
1、服务预热貌似也没有通用的做法,我们内部一般是在正式提供服务前通过预热脚本对关键服务和关键路径进行预热,预热完成后再正式对外提供服务,这样做的好处是不需要使用线上业务请求进行预热,对业务请求尽可能是无损的,缺点是需要对运维流程增加一定复杂度。
2、通过负载均衡使用少量请求对新节点进行预热,可以减少新节点放量瞬间大量请求失败。但是这少部分流量依然有可能会超时失败,是否采样这种方式,取决于是否能把对业务请求的影响减少到可接受的程度,跟业务场景相关吧
感谢价值回复!请问预热脚本方式应该需要具体业务服务事先定义好相关RPC接口后,通过Python脚本在服务Registry之前提前执行同机器应用服务实现的吧?
motan server端启动后需要调用下面的开关进行注册服务,这段时间就是留给预热的,可以在预热完成后触发开关变更,然后在正式注册并对外提供服务。
MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true)