开篇阐述:
Zookeeper的寓意与角色定位Zookeeper(简称zk)这个名字颇具象形意义,如同动物园管理员般,它在Hadoop生态系统这个多彩动物园内,确实在有序地管理着包括Hadoop(象征大象)、HBase(象征鲸鱼)等各种“动物”。实际上,不仅限于此,zk还深受 Storm、Kafka 等外部用户的信赖。在分布式环境中,zk广泛应用在数据发布/订阅、命名服务、配置中心、分布式锁、集群管理和主从选择及服务发现等多个场景。
在大数据时代初创之际,传统的数据库巨头Oracle、MySQL以及PostgreSQL面对爆发式增长的数据资源(DATA)显得束手无策。此时,大数据大陆上的居民们团结协作,构建起像Hadoop联邦、HBase联邦等各类联合体,由统一的"国王"(master)领导下的诸多"城池"(worker)协同处理和利用DATA资源。
大数据联邦之所以能更好地应对DATA挑战,关键在于随DATA规模扩大,它们可通过合并"城池"扩容,有效地抵消数据压力。然而,随之而来的问题亦日益显现...
当国王(master)发生故障或因网络问题孤立时,如何确保联邦正常运作并选出新任国王成为一大难题。
国王承担决策并直接向所有领主(follower)下发指令,但这一模式可能导致国王不堪重负,同时网络问题或领主异常状态会影响指令传递,若任其发展,则联邦的整体协作将受到严重阻碍。
正当大数据联邦成员们为此苦恼之际,议会(Zookeeper)应运而生,它以其卓越的解决方案赢得了普遍欢迎,并开启了封神之路。
议会设立了一把代表国王身份的"权杖"——Zookeeper临时锁。取得权杖者即成为新国王,并引领各方处理DATA事务。
各领主一边协助国王处理DATA,一边密切关注议会中的新权杖动态,并时刻准备争夺。与此同时,议会持续监控国王状态,一旦国王失去联系,议会立即启动新国王选举流程。
权杖失效,议会重新生成新权杖,领主们一拥而上,首位夺得权杖者便成为新国王,整个过程周而复始,确保联邦稳定运行。
议会接过重任,代替国王传达命令,降低了国王的工作负荷。具体做法是国王签署命令后告知议会首脑(Zookeeper leader),后者负责在议会内部同步命令,随后通知领主执行。
领主无需再直接向国王申请任务,只需联系议会中的任意议员即可获取命令,从而减轻了国王的压力,也保证了命令传递的安全性和效率。
对于资源DATA的操作,领主可直接与议会沟通,但涉及高级操作如建立DATA存储仓库(NOSQL表)还需国王参与,但国王处理后仍将相关命令存入议会供领主使用。
得益于议会的有效协调,各大数据联邦得以缓解痛点,逐渐成为行业标准,步入辉煌期。
然而,随着时间推移,议会面临新挑战,一些新兴大数据联邦舍弃了它,老牌联邦也开始对其失去信任,试图另寻出路。议会为何失宠?
直接原因:
由于Zookeeper采取强一致性模型,导致数据同步需要一定时间。当数据处理压力增大,特别是频繁读写场景下,其性能瓶颈日益凸显,制约了组件的数据处理速度。
Zookeeper作为一个独立集群,需占用资源,且组件若想优化性能或处理流程还需顾忌Zookeeper的支持程度和性能限制,这给组件带来了不稳定因素。
间接原因:
Raft算法的出现打破了原有共识算法格局,Zookeeper不再一枝独秀。Raft易于理解与实现,众多类似算法涌现,如Elasticsearch、TiDB、2.8以后的Kafka等,使得Zookeeper的地位遭受冲击。
去中心化的大数据产品(如Cassandra)开始崭露头角,采用 gossip 协议进行数据同步,不再依赖共识算法,市场份额被进一步瓜分。
尽管Zookeeper曾是一款出色的协调服务,但在数据量激增和高读写压力的场景下,其力不从心已成事实。如今,新一代大数据组件越来越少使用Zookeeper,而现存使用者(如HBase)也在降低对Zookeeper的依赖,或尝试用Raft等替代方案(如Kafka 2.8以后的版本)。
不过,技术的发展就是这样充满魅力,长江后浪推前浪。Zookeeper昔日的辉煌已然载入史册,而我们身为技术人员,唯有不断学习、拥抱新技术、适应变化,方能在技术浪潮中砥砺前行,扬帆远航!