协议与连接(motan:protocol)

介绍

Protocol用来配置Motan服务的协议。不同的服务适用不同的协议进行传输,可以自行扩展协议。

Motan协议

  1. <motan:protocol name="motan" />

Motan默认的rpc协议为Motan协议,使用tcp长连接模式,基于netty通信。

负载均衡

Motan 在集群负载均衡时,提供了多种方案,缺省为 ActiveWeight,并支持自定义扩展。负载均衡策略在Client端生效,因此需在Client端添加配置

目前支持的负载均衡策略有:

  • ActiveWeight(缺省)
  1. <motan:protocol ... loadbalance="activeWeight"/>

低并发度优先: referer 的某时刻的 call 数越小优先级越高由于 Referer List 可能很多,比如上百台,如果每次都要从这上百个 Referer 获得最低并发的几个,性能有些损耗,因此 random.nextInt(list.size()) 获取一个起始的 index,然后获取最多不超过 MAX_REFERER_COUNT 的状态是 isAvailable 的 referer 进行判断 activeCount.

  • Random
  1. <motan:protocol ... loadbalance="random"/>

随机选择。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。

  • RoundRobin
  1. <motan:protocol ... loadbalance="roundrobin"/>

轮循选择,调用比较均匀

  • LocalFirst
  1. <motan:protocol ... loadbalance="localFirst"/>

本地服务优先获取策略,对referers根据ip顺序查找本地服务,多存在多个本地服务,获取Active最小的本地服务进行服务。当不存在本地服务,但是存在远程RPC服务,则根据ActivWeight获取远程RPC服务当两者都存在,所有本地服务都应优先于远程服务,本地RPC服务与远程RPC服务内部则根据ActiveWeight进行

  • Consistent
  1. <motan:protocol ... loadbalance="consistent"/>

一致性 Hash,相同参数的请求总是发到同一提供者

  • ConfigurableWeight
  1. <motan:protocol ... loadbalance="configurableWeight"/>

权重可配置的负载均衡策略

容错策略

Motan 在集群调用失败时,提供了两种容错方案,并支持自定义扩展。高可用集群容错策略在Client端生效,因此需在Client端添加配置目前支持的集群容错策略有:

  • Failover 失效切换(缺省)
  1. <motan:protocol ... haStrategy="failover"/>

失败自动切换,当出现失败,重试其它服务器。

  • Failfast 快速失败
  1. <motan:protocol ... haStrategy="failfast"/>

快速失败,只发起一次调用,失败立即报错。

连接控制

  • 限制服务端连接池工作线程数
  1. <motan:protocol id="demoMotan" name="motan" maxWorkerThread="800" minWorkerThread="20"/>
  • 限制客户端对每个服务建立的连接数
  1. <motan:protocol name="motan" maxClientConnection="10" minClientConnection="2"/>

本地调用

  1. <motan:protocol name="injvm" />

Injvm 协议是一个伪协议,它不开启端口,不发起远程调用,只在 JVM 内直接关联,但执行 Motan 的 Filter 链。