一:分布式开发难度
“部分失败”-->信息在网络的两个节点之间传送出现故障,发送者无法知道接受者是否收到了这个信息。
Zookeeper可以解决上述问题,zookeeper不是让分布式系统避免“部分失败”问题,而是让分布式系统在碰到“部分失败”问题的时候,可以正确的处理解决此类问题,让分布式系统能够正常运行。
二:zookeeper在分布式系统中的实际运用场景
1:一组服务器向客户端提供某种服务。举个例子:几台服务器组成集群,向前端集群提供服务。在程序中会存在这一组服务器的列表名单,列表是高可用的,由存储这份列表的服务器共同管理,如果某台服务器坏掉了,其他的服务器可以替代坏掉的服务器,并且可以把坏掉的服务器从列表中删除,故障服务器退出整个集群。(zookeeper提供这种服务:统一命名服务,类似于javaEE的JNDI服务)。
2:分布式锁服务。当分布式系统对数据进行增、删、改、查的时候,保证数据的一致性。举个例子:在分布式系统将操作数据分散在集群的不同节点上,会存在数据操作不一致的问题。zookeeper提供了一个锁服务解决分布式数据运算问题,保证数据的一致性。
3:配置管理。把一个应用部署到分布式服务器上,就需要保证这些服务器上的配置文件是一样的。如果配置文件发生变化,一个一个的去更改服务器的配置不仅危险,而且很麻烦。这个时候可以将zookeeper当成一个高可用的配置存储器,将集群的配置文件拷贝到zookeeper文件系统的某个节点上,让zookeeper监视所有服务器的配置文件的状态,一旦发现配置文件有变化,每台服务器都会收到zookeeper的通知,让每台服务器同步zookeeper里的配置文件,zookeeper服务器也会保证同步操作原子性,确保每台服务器都能被正确更新配置文件。
4:为分布式系统提供故障修复的功能。集群管理(节点故障管理)zookeeper可以让集群选出一个健康的节点作为master(master可以动态选择,当master出现故障的时候,zookeeper会立即选出一个新的master对集群进行管理),master节点会知道当前集群的运营状态,一旦发现某个节点出现故障,master会把这个情况反映给其他服务器。从而分配新的服务器去替换掉出现故障的服务器。zookeeper也可以自动修复出现故障的服务器或者是将定位故障服务器的错误信息,将信息返回给集群管理员修复。