当前位置: 首页 > news >正文

北京建设规划许可证网站网站建设服务器租赁

北京建设规划许可证网站,网站建设服务器租赁,做家具的网站,网站整站源码下载ZooKeeper是一个分布式的应用程序协调服务。 2 ZooKeeper的工作原理 Zookeeper 的核心是原子广播#xff0c;这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab(Zookeeper Atomic Broadcast)协议。Zab协议有两种模式#xff0c;它们分别是恢复模式#xff08;… ZooKeeper是一个分布式的应用程序协调服务。   2 ZooKeeper的工作原理 Zookeeper 的核心是原子广播这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab(Zookeeper Atomic Broadcast)协议。Zab协议有两种模式它们分别是恢复模式recovery选主和 广播模式broadcast同步。当服务启动或者在领导者崩溃后Zab就进入了恢复模式当领导者被选举出来且大多数Server完成了和leader的状态同步以 后恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。    1、ZooKeeper数据模型 类似于一个标准的文件系统具有层次关系的数据结构 每个子目录项如NameService都被称作为znode。 ZNode根据其本身的特性可以分为下面两类 Regular ZNode: 常规型ZNode Ephemeral ZNode: (ɪfem(ə)r(ə)l)临时的类型的目录节点不能有子节点目录。 Zookeeper的客户端和服务器通信采用长连接方式每个客户 端和服务器通过心跳来保持连接这个连接状态称为session如果znode是临时节点这个session失效znode也就删除了。(3s/一次200次)。 如果Client因为Timeout和Zookeeper Server失去连接client处在CONNECTING状态会自动尝试再去连接Server如果在session有效期内再次成功连接到某个Server则回到CONNECTED状态。   2、ZooKeeper Watch       Zookeeper从设计模式的角度来看是一个基于观察者设计模式设计的。简单来说就是  Client可以在某个ZNode上设置一个Watcher来Watch该ZNode上的变化。如果该ZNode上有相应的变化就会触发这个Watcher把相应的事件通知给设置Watcher的Client。需要注意的是ZooKeeper中的Watcher是一次性的即触发一次就会被取消如果想继续Watch的话需要客户端重新设置Watcher。   3、 ZooKeeper特性       读、写(更新)模式     在ZooKeeper集群中读可以从任意一个ZooKeeper Server读。写的请求会先Forwarder到Leader然后由Leader来通过ZooKeeper中的原子广播协议将请求广播给所有的FollowerLeader收到一半以上的写成功的消息后就认为该写成功了就会将该写进行持久化并告诉客户端写成功了。      FIFO对于每一个ZooKeeper客户端而言所有的操作都是遵循FIFO顺序的这一特性是由下面两个基本特性来保证的一是ZooKeeper Client与Server之间的网络通信是基于TCPTCP保证了Client/Server之间传输包的顺序二是ZooKeeper Server执行客户端请求也是严格按照FIFO顺序的。 为 了保证事务的顺序一致性zookeeper采用了递增的事务id号zxid来标识事务。所有的提议proposal都在被提出的时候加上了 zxid。实现中zxid是一个64位的数字它高32位是 用来标识leader关系是否改变每次一个leader被选出来它都会有一个新 的epoch标识当前属于那个leader的统治时期。低32位用于递增计数。    ZooKeeper典型应用场景 名字服务(NameService) 每个ZNode都可以由其路径唯一标识路径本身也比较简洁直观另外ZNode上还可以存储少量数据这些都是实现统一的NameService的基础。通过简单的名字访问对应的服务器集群。   配置管理(Configuration Management)       一:分布式互斥锁  在传统的应用程序中线程、进程的同步都可以通过操作系统提供的机制来完成。但是在分布式系统中多个进程之间的同步操作系统层面就无能为力了。 zookeeper中,并没有像JAVA里一样有Synchronized或者是ReentrantLock机制来实现锁机制,但是在zookeeper中,实现起来更简单我们可以讲将zk的一个数据节点代表一个锁,当多个客户端同时调用create()节点创建节点的时候,zookeeper会保证只会有一个客户端创建成功,那么我们就可以让这个创建成功的客户端让其持有锁,而其它的客户端则注册Watcher监听当持有锁的客户端释放锁后,监听的客户端就会收到Watcher通知,然后再去试图获取锁,这样反复即可。 Zookeeper的三种角色 1.leader和follower          ZooKeeper需要在所有的服务可以理解为服务器中选举出一个Leader然后让这个Leader来负责管理集群。此时集群中的其它服务器则 成为此Leader的Follower。并且当Leader故障的时候需要ZooKeeper能够快速地在Follower中选举出下一个 Leader。这就是ZooKeeper的Leader机制下面我们将简单介绍在ZooKeeper中Leader选举Leader Election是如何实现的。  此操作实现的核心思想是首先创建一个EPHEMERAL目录节点例如“/election”。然后。每一个ZooKeeper服务器在此目录 下创建一个SEQUENCE|EPHEMERAL类型的节点例如“/election/n_”。在SEQUENCE标志下ZooKeeper将自动地 为每一个ZooKeeper服务器分配一个比前一个分配的序号要大的序号。此时创建节点的ZooKeeper服务器中拥有最小序号编号的服务器将成为 Leader。 在实际的操作中还需要保障当Leader服务器发生故障的时候系统能够快速地选出下一个ZooKeeper服务器作为Leader。一个简 单的解决方案是让所有的follower监视leader所对应的节点。当Leader发生故障时Leader所对应的临时节点将会自动地被删除此 操作将会触发所有监视Leader的服务器的watch。这样这些服务器将会收到Leader故障的消息并进而进行下一次的Leader选举操作。但 是这种操作将会导致“从众效应”的发生尤其当集群中服务器众多并且带宽延迟比较大的时候此种情况更为明显。 在Zookeeper中为了避免从众效应的发生它是这样来实现的每一个follower对follower集群中对应的比自己节点序号小一 号的节点也就是所有序号比自己小的节点中的序号最大的节点设置一个watch。只有当follower所设置的watch被触发的时候它才进行 Leader选举操作一般情况下它将成为集群中的下一个Leader。很明显此Leader选举操作的速度是很快的。因为每一次Leader选举几 乎只涉及单个follower的操作。 2.Observer       observer的行为在大多数情况下与follower完全一致, 但是他们不参加选举和投票, 而仅仅接受(observing)选举和投票的结果. Zookeeper集群选举机制     zookeeper选举机制 FastLeaderElection算法通过异步的通信方式来收集其它节点的选票同时在分析选票时又根据投票者的当前状态来作不同的处理以加快Leader的选举进程。        每个在zookeeper服务器启动先读取当前保存在磁盘的数据,zookeeper中的每份数据都有一个对应的id值,这个值是依次递增的换言之,越新的数据,对应的ID值就越大。     在读取数据完毕之后,每个zookeeper服务器发送自己选举的leader,这个协议中包含了以下几部分的数据: 1)、所选举leader的id(就是配置文件中写好的每个服务器的id) ,在初始阶段,每台服务器的这个值都是自己服务器的id,也就是它们都选举自己为leader。 2)、服务器最大数据的id,这个值大的服务器,说明存放了更新的数据。 3)、逻辑时钟的值,这个值从0开始递增,每次选举对应一个值,也就是说:如果在同一次选举中,那么这个值应该是一致的逻辑时钟值越大,说明这一次选举leader的进程更新。 4)、本机在当前选举过程中的状态,有以下几种:LOOKING,FOLLOWING,OBSERVING,LEADING     每台服务器将自己服务器的以上数据发送到集群中的其他服务器之后,同样的也需要接收来自其他服务器的数据,它将做以下的处理: A、如果所接收数据服务器的状态还是在选举阶段(LOOKING 状态),那么首先判断逻辑时钟值,又分为以下三种情况: a) 如果发送过来的逻辑时钟大于目前的逻辑时钟,那么说明这是更新的一次选举,此时需要更新一下本机的逻辑时钟值代码如下:  if (n.epoch logicalclock) { logicalclock n.epoch; recvset.clear(); if(totalOrderPredicate(n.leader, n.zxid,getInitId(), getInitLastLoggedZxid())) updateProposal(n.leader, n.zxid); else updateProposal(getInitId(),getInitLastLoggedZxid()); sendNotifications(); 其中的totalOrderPredicate函数就是根据发送过来的封包中的leader id,数据id来与本机保存的相应数据进行判断的函数首先看数据id,数据id大者胜出;其次再判断leader id,leader id大者胜出,返回true则调用updateProposal函数更新数据。 b) 发送过来数据的逻辑时钟小于本机的逻辑时钟 说明对方在一个相对较早的选举进程中,这里只需要将本机的数据广播出去 c) 两边的逻辑时钟相同,此时也只是调用totalOrderPredicate函数判断是否需要更新本机的数据,将最新的选举结果广播出去 B、如果所接收服务器不在选举状态,也就是在FOLLOWING或者LEADING状态 a) 如果逻辑时钟相同,将该数据保存到recvset,如果所接收服务器宣称自己是leader,那么将判断是不是有半数以上的服务器选举它,如果是则设置选举状态退出选举过程 如果逻辑时钟不相同,那么说明在另一个选举过程中已经有了选举结果,于是将该选举结果加入到outofelection集合中,再根 据outofelection来判断是否可以结束选举,如果可以也是保存逻辑时钟,设置选举状态,退出选举过程 以一个简单的例子来说明整个选举的过程. 假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的.假设这些服务器依序启动,来看看会发生什么 1) 服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态  2) 服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超 过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1,2还是继续保持LOOKING状态.  3) 服务器3启动,根据前面的理论分析,服务器3成为服务器1,2,3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader.  4) 服务器4启动,根据前面的分析,理论上服务器4应该是服务器1,2,3,4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了.  5) 服务器5启动,同4一样,当小弟  转载于:https://www.cnblogs.com/JimBo-Wang/p/6627133.html
http://www.zqtcl.cn/news/91202/

相关文章:

  • 网站建设销售经理职责大桥石化集团网站谁做的
  • 黄金网站软件免费靖江seo快速排名
  • 网站建设经验做法和取得的成效wordpress 浏览器兼容
  • 代理记账注册公司图片商丘网站seo
  • 北京网站建设推荐安徽秒搜科技河南建设工程信息网招标公告
  • 网站开发项目实训总结微网站设计
  • 山东济南建网站公司东莞排名seo网站关键词优化
  • 找网站建设企业培训机构哪家最好
  • 建什么类型个人网站比较好开发高端网站建设价格
  • 网站开发 卡片网站建设合同需要印花税
  • 手机端网站图片上传如何做新公司取名字大全免费
  • vue.js网站建设智慧团建官方网站登录入口
  • 江宁区建设局网站网站建设 美食站点
  • 哈尔滨松北区建设局网站唐山企业网站模板建站
  • 服装公司网站策划书外网设计灵感网站
  • 学做婴儿衣服网站windows 建网站
  • 银饰品网站建设规划策划书wordpress近义词搜索
  • 淘宝联盟网站推广位怎么做网站开发合同支付
  • 有没有一些有试卷做的网站ios开发教程
  • 网站备案服务类型红酒公司网站源码
  • 南宁网站优化推广方案4000套微信小游戏源码
  • 什么犁网站做淘宝门头阿里云 wordpress建站
  • 免费网站建设凡科设计师的网站有哪些
  • 微信公众号运营方法seo 排名 优化
  • 深圳做营销网站设计淘宝网官方网站免费下载
  • 菏泽住房和城乡建设厅网站企业查询官网免费查询一下
  • 青海网站建设公司电话163 com邮箱注册
  • 建设法律法规文本查询网站自由设计师是什么意思
  • 分站城市网站如何做seo上海网站建设选缘魁
  • 荆门网站建设电话如何制作网页链接二维码