班级网站建设php,旅游网站组织结构图怎么做,建设工程质量 协会网站,番禺网站建设培训学校alibaba有好几个分布式框架#xff0c;主要有#xff1a;进行远程调用(类似于RMI的这种远程调用)的(dubbo、hsf)#xff0c;jms消息服务(napoli、notify)#xff0c;KV数据库(tair)等。这个框架/工具/产品在实现的时候#xff0c;都考虑到了容灾#xff0c;扩展#xff… alibaba有好几个分布式框架主要有进行远程调用(类似于RMI的这种远程调用)的(dubbo、hsf)jms消息服务(napoli、notify)KV数据库(tair)等。这个框架/工具/产品在实现的时候都考虑到了容灾扩展负载均衡于是出现一个配置中心(ConfigServer)的东西来解决这些问题。 基本原理如图 在我们的系统中经常会有一些跨系统的调用如在A系统中要调用B系统的一个服务我们可能会使用RMI直接来进行B系统发布一个RMI接口服务然后A系统就来通过RMI调用这个接口为了解决容灾扩展负载均衡的问题我们可能会想很多办法alibaba的这个办法感觉不错。 本文只说dubbo原理如下 ConfigServer 配置中心和每个Server/Client之间会作一个实时的心跳检测因为它们都是建立的Socket长连接比如几秒钟检测一次。收集每个Server提供的服务的信息每个Client的信息整理出一个服务列表如 serviceNameserverAddressListclientAddressList UserService192.168.0.1192.168.0.2192.168.0.3192.168.0.4 172.16.0.1172.16.0.2 ProductService192.168.0.3192.168.0.4192.168.0.5192.168.0.6172.16.0.2172.16.0.3 OrderService192.168.0.10192.168.0.12192.168.0.5192.168.0.6 172.16.0.3172.16.0.4 当某个Server不可用那么就更新受影响的服务对应的serverAddressList即把这个Server从serverAddressList中踢出去从地址列表中删除同时将推送serverAddressList给这些受影响的服务的clientAddressList里面的所有Client。如192.168.0.3挂了那么UserService和ProductService的serverAddressList都要把192.168.0.3删除掉同时把新的列表告诉对应的Client 172.16.0.1172.16.0.2172.16.0.3 当某个Client挂了那么更新受影响的服务对应的clientAddressList ConfigServer根据服务列表就能提供一个web管理界面来查看管理服务的提供者和使用者。 新加一个Server时由于它会主动与ConfigServer取得联系而ConfigServer又会将这个信息主动发送给Client所以新加一个Server时只需要启动Server然后几秒钟内Client就会使用上它提供的服务 Client 调用服务的机器每个Client启动时主动与ConfigServer建立Socket长连接并将自己的IP等相应信息发送给ConfigServer。 Client在使用服务的时候根据服务名称去ConfigServer中获取服务提供者信息这样ConfigServer就知道某个服务是当前哪几个Client在使用Client拿到这些服务提供者信息后与它们都建立连接后面就可以直接调用服务了当有多个服务提供者的时候Client根据一定的规则来进行负载均衡如轮询随机按权重等。 一旦Client使用的服务它对应的服务提供者有变化服务提供者有新增删除的情况ConfigServer就会把最新的服务提供者列表推送给ClientClient就会依据最新的服务提供者列表重新建立连接新增的提供者建立连接删除的提供者丢弃连接Server 真正提供服务的机器每个Server启动时主动与ConfigServer建立Scoket长连接并将自己的IP提供的服务名称端口等信息直接发送给ConfigServerConfigServer就会收集到每个Server提供的服务的信息。 优点 1只要在Client和Server启动的时候ConfigServer是好的服务就可调用了如果后面ConfigServer挂了那只影响ConfigServer挂了以后服务提供者有变化而Client还无法感知这一变化。 2Client每次调用服务是不经过ConfigServer的Client只是与它建立联系从它那里获取提供服务者列表而已 3调用服务-负载均衡Client调用服务时可以根据规则在多个服务提供者之间轮流调用服务。 4服务提供者-容灾某一个Server挂了Client依然是可以正确的调用服务的当前提是这个服务有至少2个服务提供者Client能很快的感知到服务提供者的变化并作出相应反应。 5服务提供者-扩展添加一个服务提供者很容易而且Client会很快的感知到它的存在并使用它。 顺便说一下hadoop里面的中心节点跟这里的configServer作用类似在维护节点列表方面不过它的相关计算都需要通过中心节节点让它来分配任务。 本文转自左正博客园博客原文链接http://www.cnblogs.com/soundcode/p/6363936.html如需转载请自行联系原作者