目录
1、统一命名服务
2、配置管理
3、集群管理
4、分布式通知协调
5、分布式锁
这个可以简单理解为一个电话薄,电话号码不好记,但是人名好记,要打谁的电话,直接查人名就好了。
分布式环境下,经常需要对应用/服务进行统一命名,便于识别不同服务,客户端通过Zookeeper获取可用服务列表。
这个好理解,分布式系统都有好多机器,比如我在搭建hadoop的HDFS的时候,需要在一个主机器上(Master节点)配置好HDFS需要的各种配置文件,然后通过scp命令把这些配置文件拷贝到其他节点上,这样各个机器拿到的配置信息是一致的,才能成功运行起来HDFS服务。
Zookeeper提供了这样的一种服务:一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更。这样就省去手动拷贝配置了,还保证了可靠和一致性。
集群管理最麻烦的事情就是节点故障管理,zookeeper可以让集群选出一个健康的节点作为master,master节点会知道当前集群的每台服务器的运行状况,一旦某个节点发生故障,master会把这个情况通知给集群其他服务器,从而重新分配不同节点的计算任务。
Zookeeper不仅可以发现故障,也会对有故障的服务器进行甄别,看故障服务器是什么样的故障,如果该故障可以修复,zookeeper可以自动修复或者告诉系统管理员错误的原因让管理员迅速定位问题,修复节点的故障。
大家也许还会有个疑问,master故障了,那怎么办了?zookeeper也考虑到了这点,zookeeper内部有一个“选举领导者的算法”,master可以动态选择,当master故障时候,zookeeper能马上选出新的master对集群进行管理。
基于Znode 的临时节点和 Watch 特性,应用程序可以很容易地实现一个分布式通知协调系统。
比如在集群中为每个服务都创建一个周期为30s的临时节点作为服务状态监控,要求各个服务每10s定时向Zookeeper汇报监控状态。当Zookeeper连续30s未收到服务的状态反馈时,则可以认为该服务异常,将其从服务列表移除,同时将该结果通知到其他监控该节点状态的服务。
碰到分布二字貌似就难理解了,其实很简单。单机程序的各个进程需要对互斥资源进行访问时需要加锁,那分布式程序分布在各个主机上的进程对互斥资源进行访问时也需要加锁。很多分布式系统有多个可服务的窗口,但是在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,立即fail over到另外的服务。
这在很多分布式系统中都是这么做,这种设计有一个更好听的名字叫Leader Election(leader选举)。举个通俗点的例子,比如银行取钱,有多个窗口,但是呢对你来说,只能有一个窗口对你服务,如果正在对你服务的窗口的柜员突然有急事走了,那咋办?找大堂经理(zookeeper)!大堂经理指定另外的一个窗口继续为你服务!
上一篇:西媒:若巴萨收回工作室尚未支付的1亿欧,将在今夏不受限制注册 巴萨官宣900万3100万5亿违约金 巴萨今夏最近新消息
下一篇:辩护失败!沙特足协对C罗禁赛2场,今年第2次被罚,将缺战半个月 c罗被禁赛对沙特有什么影响 沙特媒体c罗将被停赛两场罚款