协议与连接(motan:protocol)
介绍
Protocol用来配置Motan服务的协议。不同的服务适用不同的协议进行传输,可以自行扩展协议。
Motan协议
- <motan:protocol name="motan" />
Motan默认的rpc协议为Motan协议,使用tcp长连接模式,基于netty通信。
负载均衡
Motan 在集群负载均衡时,提供了多种方案,缺省为 ActiveWeight,并支持自定义扩展。负载均衡策略在Client端生效,因此需在Client端添加配置
目前支持的负载均衡策略有:
- ActiveWeight(缺省)
<motan:protocol ... loadbalance="activeWeight"/>
低并发度优先: referer 的某时刻的 call 数越小优先级越高由于 Referer List 可能很多,比如上百台,如果每次都要从这上百个 Referer 获得最低并发的几个,性能有些损耗,因此 random.nextInt(list.size()) 获取一个起始的 index,然后获取最多不超过 MAX_REFERER_COUNT 的状态是 isAvailable 的 referer 进行判断 activeCount.
- Random
<motan:protocol ... loadbalance="random"/>
随机选择。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
- RoundRobin
<motan:protocol ... loadbalance="roundrobin"/>
轮循选择,调用比较均匀
- LocalFirst
<motan:protocol ... loadbalance="localFirst"/>
本地服务优先获取策略,对referers根据ip顺序查找本地服务,多存在多个本地服务,获取Active最小的本地服务进行服务。当不存在本地服务,但是存在远程RPC服务,则根据ActivWeight获取远程RPC服务当两者都存在,所有本地服务都应优先于远程服务,本地RPC服务与远程RPC服务内部则根据ActiveWeight进行
- Consistent
<motan:protocol ... loadbalance="consistent"/>
一致性 Hash,相同参数的请求总是发到同一提供者
- ConfigurableWeight
<motan:protocol ... loadbalance="configurableWeight"/>
权重可配置的负载均衡策略
容错策略
Motan 在集群调用失败时,提供了两种容错方案,并支持自定义扩展。高可用集群容错策略在Client端生效,因此需在Client端添加配置目前支持的集群容错策略有:
- Failover 失效切换(缺省)
<motan:protocol ... haStrategy="failover"/>
失败自动切换,当出现失败,重试其它服务器。
- Failfast 快速失败
<motan:protocol ... haStrategy="failfast"/>
快速失败,只发起一次调用,失败立即报错。
连接控制
- 限制服务端连接池工作线程数
<motan:protocol id="demoMotan" name="motan" maxWorkerThread="800" minWorkerThread="20"/>
- 限制客户端对每个服务建立的连接数
<motan:protocol name="motan" maxClientConnection="10" minClientConnection="2"/>
本地调用
<motan:protocol name="injvm" />
Injvm 协议是一个伪协议,它不开启端口,不发起远程调用,只在 JVM 内直接关联,但执行 Motan 的 Filter 链。