一 、Dubbo高可用机制
1.1 集群容错
-
服务路由
- 路由规则:决定了服务的消费者怎么选择服务提供者
- 条件路由
- 格式: 服务消费者匹配条件 => 服务提供者匹配条件
- host = 192.168.242.128 => host = 10.20.30.40
- 四种路由配置(服务提供者匹配条件为空 即有禁用的消费者)
- 白名单
- host != 192.168.242.128 =>
- 即以上之外的机器可以访问任何机器 白名单
- 黑名单
- host = 192.168.242.128, xxx =>
- 读写分离
- method=find,get => host=xxxx
- 前后台分离
- application = front => host = xxx
- 白名单
- 脚本路由
- 标签路由
- 条件路由
- 路由规则:决定了服务的消费者怎么选择服务提供者
-
集群容错
-
failover:当出现失败重试其他服务器,重试会带来更长延迟,所以一般重试使用"retries=2"
-
<dubbo:service retries="2"> <dubbo:reference retries="2">
-
-
failfast:只发起一次调用,失败后立刻报错。用于非幂等
-
failsafe:失败安全,出现异常直接忽略,一般用在记录日志
-
failback:失败自动恢复,定时重发,一般用于消息通知
-
forking:并行调用,只要有一个成功即返回,对实时性要求很高
-
broadcast:逐个调用,如果有一台机器报错了即整个报错
-
-
负载均衡
- random:随机
- roundrobin:轮询
- 节点性能不一样会有问题
- leastActive:最少活跃数
- 统计服务调用次数(活跃数计数器)
- Consistant Hash:一致性的Hash
1.2服务治理
-
服务降级
-
屏蔽掉出错的非关服务、并定义降级后的返回策略
-
mock
-
mock=force: return null:服务调用直接返回null,不再发起远程调用,会抛异常
-
mock=fail: return null: 消费方对服务调用失败,返回null,但是不会抛异常
-
<dubbo:service mock="return null" <dubbo:servcice mock="true">
-
-
-
整合hystrix
- pom
- @EnableHystrix
- 消费方方法上加上@HystrixCommand(fallbackMethod=xxx)
二、Dubbo的SPI机制
-
Service Provider Interface
-
服务发现机制
- 接口实现类全限定名配置在配置文件中(约定), 启动程序时加载配置文件,从而加载实现类
-
java SPI
- 缺点
- 这些实现类都需要加载
- 不能够通过参数获取,没有一种方式来获取想要的实现类
- 缺点
-
Dubbo SPI
- 接口上+@SPI
- META-INF/dubbo/全限定名的接口文件 —> key = value
- 比Java加了扩展
- 通过key获取想要的对象
三、Dubbo源码分析
- Dubbo服务暴露
- 加载BeanDefinitionParser解析配置文件
- Dubbo文件的加载依赖于另外一个类 DubboBeanDefinitonParser
- DubboBeanDefinitonParser解析spring与dubbo整合的xml文件,解析成 xxxConfig对象
- xxxConfig对象对应xml中的节点 <dubbo:service …> 即 serviceConfig
- Dubbo服务引入
四、拓展
-
基于NIO
-
New IO/ Non-Block IO
-
多路复用
-
BIO vs NIO
-
BIO 一个请求一个线程 阻塞式
-
NIO 使用通道 SocketChannel selector 多路复用器
-
-