本文策略说明所有来自官方文档.node
Failover Cluster算法
Failfast Cluster缓存
Failsafe Cluster安全
Failback Cluster服务器
Forking Cluster网络
Broadcast Cluster多线程
2. 负载均衡策略并发
Random LoadBalanceapp
RoundRobin LoadBalance负载均衡
LeastActive LoadBalance
ConsistentHash LoadBalance
3. 静态服务
有时候但愿人工管理服务提供者的上线和下线,此时需将注册中心标识为非动态管理模式。
服务提供者初次注册时为禁用状态,需人工启用,断线时,将不会被自动删除,需人工禁用。
4. 服务分组
当一个接口有多种实现时, 能够用group区分
5. 多版本
当一个接口实现,出现不兼容升级时,能够用版本号过渡,版本号不一样的服务相互间不引用。
6. 分组聚合
按组合并返回结果,好比菜单服务,接口同样,但有多种实现,用group区分,如今消费方需从每种group中调用一次返回结果,合并结果返回,这样就能够实现聚合菜单项.
7. 泛化引用:
泛接口调用方式主要用于客户端没有API接口及模型类元的状况,参数及返回值中的全部POJO均用Map表示,一般用于框架集成,好比:实现一个通用的服务测试框架,可经过GenericService调用全部服务实现。
8. 泛化实现:
泛接口实现方式主要用于服务器端没有API接口及模型类元的状况,参数及返回值中的全部POJO均用Map表示,一般用于框架集成,好比:实现一个通用的远程服务Mock框架,可经过实现GenericService接口处理全部服务请求。
9. 回声测试:
回声测试用于检测服务是否可用,回声测试按照正常请求流程执行,可以测试整个调用是否通畅,可用于监控。
全部服务自动实现EchoService接口,只需将任意服务引用强制转型为EchoService,便可使用。
10. 异步调用:
基于NIO的非阻塞实现并行调用,客户端不须要启动多线程便可完成并行调用多个远程服务,相对多线程开销较小。
11. 参数回调:
参数回调方式与调用本地callback或listener相同,只须要在Spring的配置文件中声明哪一个参数是callback类型便可,Dubbo将基于长链接生成反向代理,这样就能够从服务器端调用客户端逻辑。
12. 事件通知:
在调用以前,调用以后,出现异常时,会触发oninvoke, onreturn, onthrow三个事件,能够配置当事件发生时,通知哪一个类的哪一个方法。
13. 本地存根:
远程服务后,客户端一般只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,好比:作ThreadLocal缓存,提早验证参 数,调用失败后伪造容错数据等等,此时就须要在API中带上Stub,客户端生成Proxy实,会把Proxy经过构造函数传给Stub,而后把Stub 暴露组给用户,Stub能够决定要不要去调Proxy。
14. 本地假装:
Mock一般用于服务降级,好比某验权服务,当服务提供方所有挂掉后,客户端不抛出异常,而是经过Mock数据返回受权失败。
Mock是Stub的一 个子集,便于服务提供方在客户端执行容错逻辑,因常常须要在出现RpcException(好比网络失败,超时等)时进行容错,而在出现业务异常(好比登 录用户名密码错误)时不须要容错,若是用Stub,可能就须要捕获并依赖RpcException类,而用Mock就能够不依赖 RpcException,由于它的约定就是只有出现RpcException时才执行。
15. 并发控制:
可控制客户端, 服务端并发执行的个数
16. 链接控制:
可控制服务端接受的链接数, 限制客户端使用的链接数
17. 延迟链接:
只对dubbo长链接有效, 只有当调用发起时, 再建立长链接
18. 粘滞链接:
粘滞链接用于有状态服务,尽量让客户端老是向同一提供者发起调用,除非该提供者挂了,再连另外一台。
19. 令牌验证:
防止消费者绕过注册中心访问提供者
在注册中心控制权限,以决定要不要下发令牌给消费者
注册中心可灵活改变受权方式,而不需修改或升级提供者
20. 路由规则:
条件路由规则, 几个有用的示例:
1) 排除预发布机:
=> host != 172.22.3.91
2) 白名单:(注意:一个服务只能有一条白名单规则,不然两条规则交叉,就都被筛选掉了)
host != 10.20.153.10,10.20.153.11 =>
3) 黑名单:
host = 10.20.153.10,10.20.153.11 =>
4) 服务寄宿在应用上,只暴露一部分的机器,防止整个集群挂掉:
=> host = 172.22.3.1*,172.22.3.2*
5) 为重要应用提供额外的机器:
application != kylin => host != 172.22.3.95,172.22.3.96
6) 读写分离:
method = find*,list*,get*,is* => host = 172.22.3.94,172.22.3.95,172.22.3.96
method != find*,list*,get*,is* => host = 172.22.3.97,172.22.3.98
7) 先后台分离:
application = bops => host = 172.22.3.91,172.22.3.92,172.22.3.93
application != bops => host = 172.22.3.94,172.22.3.95,172.22.3.96
8) 隔离不一样机房网段:
host != 172.22.3.* => host != 172.22.3.*
9) 提供者与消费者部署在同集群内,本机只访问本机的服务:
=> host = $host
21. 配置规则:
可动态的向注册中心写入动态配置覆盖规则.
22. 服务降级:
屏蔽不重要服务不可用时对调用方的影响。
容忍不重要服务不稳定时对调用方的影响。
23. 优雅停机:
原理:
设置优雅停机超时时间,缺省超时时间是10秒:(超时则强制关闭)
24. 服务容器:
服务容器是一个standalone的启动程序,由于后台服务不须要Tomcat或JBoss等Web容器的功能,若是硬要用Web容器去加载服务提供方,增长复杂性,也浪费资源。