谈谈你对dubbo和Zookeeper的理解

dubbo是一个服务治理中间件,一个分布式高性能的RPC远程调用框架,Dubbo一般和Zookeeper组合使用,Dubbo由容器(Spring容器)、服务生产者、注册中心(Zookeeper)服务消费者和监控中心组成,运行流程为容器启动时,服务生产者会把自己的服务接口地址注册到注册中心,服务消费者订阅它需要的服务,他去查询注册中心,获取服务地址,拿到地址去调用服务,监控中心监控生产者和消费者的健康状态,消费者的具体消费过程为:client一个线程调用远程接口,生成一个唯一id,将打包的方法和调用信息(如调用的接口名称,方法名称,参数列表)和处理结果的回调对象callback,全部封装在一起,组成一个对象Object,向专门存放调用信息的全局ConcurrentHashMap里面存放ID和对象,在将id和对象封装成一个对象ConnRequest对象,使用IoSession.write异步发送出去,当当前线程尝试获取远程调用的结果时,要先检查是否获取到结果,没有则让当前线程等待,服务器收到异步请求处理后,将结果发送给客户端,结果包含前面的id,客户端socket连接上专门监听消息的线程收到消息,分析结果,去到id在从前面的concurrentHahMap里面知道回调对象,唤醒前面等待的线程

Zookeeper是为分布式提供一致性的软件,分布式应用程序中可以基于Zookeeper实现数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能,它的常用的使用场景是承担服务生产者和服务消费者的注册中心,它保证了顺序一致性,原子性,单一视图,可靠性和实时性,使用Zookeeper集群时,服务器台数最好是奇数台,因为当宕机半数以上的服务器时集群将崩溃,分布式的锁可分为两类,一是保持独占,二是控制时序。队列可分为同步队列:当队列成员齐聚后才可用。和队列按照FIFO方式进行入队和出队操作。zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步,实现这个机制的协议叫做Zab协议,Zab协议有两种,分别是恢复模式和广播模式,当服务启动或者在主机崩溃后,Zab就进入恢复模式,当主机被选举出来,且大多数Server完成了和Leader的状态同步后,恢复模式就结束了,状态同步保证了主机和Server具有相同状态。

猜你喜欢

转载自www.cnblogs.com/Web-spring/p/12195801.html