当前位置 > 主页 > 网站建设 > 网站制作 >

网站制作里分布式网站会遇到的典型问题

日期:2019-06-20 11:37:59 作者:果冻 出自:贵州海?#38382;pp开发公司

在大型分布式互联网系统中,Session问题是典型的分布式化过程中会遇到的难题。因为Session数据必须在服务端的机器中共享,并要保证状态的一致性。

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是一个为分布式应用提供一~致性服务的软件,所提供的功能包括:配置维护、域名服务、分布式同步、组服务等。?#26053;?#25105;们介绍一下典型的分布式环境下遇到的一些典型问题的解决办法。

image.png

集群管理(GroupMembership)

ZooKeeper能够很容易地实现集群管理的功能,如图1.15所示。如果多台Server组成一个服务集?#28023;?#37027;么必须有一个“总管”知道当前集群中每台机器的服务状态,一旦有机器不能提供服务,就必须知会集群中的其他集?#28023;?#24182;重新分配服务策略。同样,当集群的服务能力增加?#20445;?#23601;会增加一台或多台Server,这些也必须让“总管”知道。Zo0Keeper不仅能够维护当前集群中机器的服务状态,而且能够选出一个“总管?#20445;?#35753;“总管”来管理集群一这就是ZookeeperI的另一个功能LeaderElection。

它的实现方式是在Zookeeper上创建一个EPHEMERAL类型的目录节点,然后每个Server在它们创建目录节点的父目录节点?#31995;?#29992;getchildrenfStringpath,Booleanwatch)方法并设置watch为true。由于是EPHEMERAL目录节点,当创建它的Server死去?#20445;?#36825;个目录节点也随之被?#22659;?#25152;以Children将会变化;这时getChildren?#31995;腤atch将会被调用,通知其他Server?#31243;⊿erver已死了。新增Server也是同样的原理。那么,Z0Keeper如?#38382;?#29616;LeaderElection,也就是选出一个MasterServer呢?

和前面的一样,每台Server创建一个EPHIEMERAL目录节点,不同的是它还是一个SEQUENTIAL目录节点,所以它是个EPHEMERALSEQUENTIAL目录节点。之所以它是EPHEMERALSEQUENTIAL目录节点,是因为我们可以给每台Serverg编号。我们可以选择当前最小编号的Server为Master,假如这个最小编号的Server死去,由于它是EPHEMERAL节点,死去的Server对应的节点也被?#22659;?#25152;以在当前的节点列表中又出现一个最小编号的节点,我们就选择这个节点为当前Master。这样就实现了动态选择Master,避免传统?#31995;aster容易出现的单点故障问题。

image.png

共享锁

在同一个进程中,共享锁很容?#36164;?#29616;,但是在跨进程或者不同Server的情况下就不好实现了。然而Zookeeper能很容易地实现这个功能,它的实现方式也是通过获得锁的Server创建一个EPHEMERALSEQUENTIAL目录节点,再通过调用getchildren方法,查询当前的目录节点列表中最小的目录节点是否是自己创建的目录节点,如果是自己创建的,那么它就获得了这个锁;如果不是,那么它就调用exists(Stringpath,Booleanwatch)方法,并监控Zookeeper上目录节点列表的变化,直到使自己创建的节点是列表中最小编号的目录节点,从而获得锁。释放锁很简单,只要?#22659;?#21069;面它自己所创建的目录节点即可。

队列管理

Keener可以外理以下两种型的队列其一,同步队?#23567;?#21363;当一个队列的成员都聚齐?#20445;?#36825;个队列才可用,否则一直等待所有成员到达。其二,队列按照FIFO方式进行入队?#32479;?#38431;操作,例如实现生产者和消费者模型。用Zo0Keeper实现同步队列的实现思路如下。

创建一个父目录/synchronizing,每个成员?#25216;?#25511;标志(SetWatch)位目录/synchronizing/start是否存在,然后每个成员?#25216;?#20154;这个队列;加人队列的方式就是创建/synchronizing/memberi的临时目录节点,之后每个成?#34987;?#21462;/synchronizing目录的所有目录节点,也就是member_i;?判断i的值是否已经是成员的个数,如果小于成员个数等待/'synchronizing/start的出现,如果已经相等就创建/synchronizing/star。用Zookeeper实现FIFO队列的思路如下。

在特定的网站制作目录下创建SEQUENTIAL类型的子目录queueI,这样就能保证所有成员加入队列时都是有编号的;出队列时通过getChildren()方法返回当前所有队列中元素,再消费其中最小的一个,这样就能保证FIFO。

(编辑:果?#24120;?/p>

上一篇:网站开发里面选择语言的考量因素有哪些? 下一篇:前端技术在网站制作领域中的应用
18585853123
在线留言
二分时时彩是统一开奖?
旱地冰球图片 福利彩票东方6+1玩法 彩票买多还是买复式好 浙江体彩20选5基本走势图 com三肖中特期期准大公开 福彩快三彩票软件中奖 双色球胆拖玩法 好运彩3直播 什么彩票网站送彩金 云南时时彩五星综合 香港赛马会官方网站app 浙江6十1体育彩票 66777论码堂心水论坛 今日天津快乐十分开奖结果 顶呱刮去哪里买