RPC:支持各种传输协议,远程过程调用。
SOA:具有服务治理功能,提供服务的注册和发现,提供各种容错机制和负载均衡策略。用zookeeper实现注册中心,启动时候服务端会把所有接口注册到注册中心,并且订阅configurators,服务消费端订阅provide,configurators,routers。
健壮性保证:
监控中心宕掉不影响使用,只是丢失部分采样数据
数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
注册中心对等集群,任意一台宕掉后,将自动切换到另一台
注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
服务提供者无状态,任意一台宕掉后,不影响使用
服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复
集群下dubbo负载均衡配置
在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。
Random LoadBalance:随机,按权重设置随机概率。
RoundRobin LoadBalance:轮循,按公约后的权重设置轮循比率。
LeastActive LoadBalance:最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。慢的提供者收到更少请求,
ConsistentHash LoadBalance:一致性 Hash,相同参数的请求总是发到同一提供者。
dubbo的provider启动主要是以下几个过程
1.首先provider启动时,先把想要提供的服务暴露在本地。
2.然后再把服务暴露到远程。
3.启动netty服务,建立长连接。
4.连接到注册中心zk上。
5.然后监控zk上的消费服务。
注册过程:
设置一个项目的别名,然后是定义注册中心和设定传输协议,
之后定义服务名,服务接口以jar形式导入到provider!
一个服务发布暴露首先由spring的spacehander 把相关的xml或者注解全部转化为springBean,之后通过ServiceConfig.exerp()方法把bean传化为传输所需的url和参数注册到注册中心,发布后provder端的ref(helloImpl)通过protocl(传输协议,如dubboprotocl,hessionprotocl)转化为Invoker对象,即调用信息,包括类,方法,参数等等,再通过proxy操作(代理)如jdkproxy代理转为为Exporter对象,这就是整个的服务暴露过程!
消费过程:
首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例。接下来把Invoker转为客户端需要的接口。
Dubbo有几种容错机制:
1.failsafe 失败安全,可以认为是把错误吞掉(记录日志)
2.failover(默认) 重试其他服务器;retries(2)重试的次数,默认为2次
3.failback 失败后自动恢复
4.forking forks. 设置并行数
5.Broadcast 广播,任意一台报错,则执行的方法报错,通过cluster方式,配置制定的容错方案