写在前面的话
相信经过第一个成长记的成长,大家都对JDK的集合并发有了更多的认识,你可能不太记得所有知识,但是我和你都不是天才或神童,我也不可能一次记不住那么多知识,除了你对技术一直保持有兴趣,要想真正掌握,大家平常还是要不断的重复学习,重复分享,讨论,把知识传递出去的过程,才是你自己真正的成长。
除了技术和能力的成长,在成长记系列中,更重要的是思想和观念的提升,这个就需要大家自己不断的体悟,大道至简而归一,本质上只有一条大道,你只能自己“悟”, 悟到的才是自己的,自己才会真正践行。大家记住,人生处处是道场,任何时候,和任何人,任何事都可以学习,学到东西,这个心态和思想希望你们可以贯彻下去,就会发现人生是另一番天地。
JDK源码成长记之后,将要推出大家期待已久的Zookeeper成长记。主要脉络分为3章,第一章目的是让你掌握或者回顾 Zookeeper的架构原理和使用,也有一些金句甜点,给大家分享一些好的思想和观念,第二章主要目的是让你掌握Zookeeper的核心源码原理,第三章和之前一样会偏重项目经验和生产经验,分享一些Zookeeper生产经验,到时候大家也可以投稿问题给我,我来总结后,给你们分享。
希望你通过这次Zookeeper成长记,你可以熟练使用Zookeeper,可以看懂和理解各个开源技术源码中Zookeeper的使用,解决Zookeeper各种生产问题等等。
下面你就来和我一起开始Zookeeper成长记第一章的学习吧!
Zookeeper能干嘛?
不知道在你印象中的Zookeeper是不是这样的?Zookeeper主要可以用来做分布式锁、配置中心、中间件元数据管理、主从选举、分布式系统的协调和通知等等。如下图所示:
Zookeeper各个功能使用的本质
Zookeeper虽然有这么多的作用,但是技术本质是为了解决一类问题应运而生的。所以这里你要学会一个思想,那就是透过现象看本质。
Zookeeper看似作用一大堆,你可能或多或少接触过,但是不要仅仅停留在使用和它的功能表象,要仔细想想本质,Zookeeper主要提供了其实就两类功能,一是对数据的存储,二是对数据的监听。
你可能说了很多中间件都有这种功能了呀,但是不同的实现就会具备不同的特性。Zookeeper的实现让他具有很多独特的特性,特性主要如下:
在理解到这个前提下,你再来看Zookeeper的作用就会有另一番理解。比如你可以看下下面的Zookeeper的应用
1)Zookeeper作为分布式锁的应用
(本质也是数据的存储功能、对数据的监听的共同体现,锁的数据集中存储在zk了而已,其实可以是redis,mysql,甚至是一个普通文件都是有一样的,只不过zk的底层实现分布式锁的原理是监听回调通知机制而已)
2)Zookeeper作为配置中心、注册中心的应用
(本质也是数据的存储功能、对数据的监听的共同体现,只是存的数据是配置而已。由于Zookeeper对数据的一致性和对数据的监听,可以把配置数据放在zk,发生变化可以主动回调通知监听者)
3)Zookeeper作为中间件元数据管理、主从选举、分布式系统的协调和通知的应用
(本质也是数据的存储功能、对数据的监听的共同体现,只是存的数据是中间的元数据而已。可以是Kafka的broker,partition,topic的基本元数据,也可以是hdfs、canal、hbase的元数据,数据发生变更通过监听回调来维护,从而监听变化进行HA选举)
分布式系统中需要集中存储元数据,监听数据变化做一些事情(可以是选举,服务注册发现,配置管理,元数据管理),就可以考虑用Zookeeper。
而这些功能常常应用于开源、自研的分布式系统或者很多分布式的业务系统中。
初窥Zookeeper的架构原理
你在了解Zookeeper常见功能之后,肯定想知道它是怎么实现这些功能的,它的底层原理是什么。在之后的成长记中我会一步一步和你研究明白这些。而且可以让你学到的不只是知识,还会有更多的观念、思想。
Zookeeper主要分为客户端和服务端两大部分,主要涉及的原理可以概括如下:
Zookeeper客户端
1)一般是原生的Java客户端或者Curator框架封装的客户端。
2) Curator核心源码原理
3) 客户端的核心机制和原理(通信、session维护等)
Zookeeper的服务端
1)服务端的架构基本就是Leader-Follower的主从模式。
2)服务端有很多机制和原理:比如内存数据模型、节点角色划分、基于ZAB协议选举机制,通信机制是NIO+BIO+自定义TCP协议(Jute),Watcher监听机制,主从同步原理、崩溃恢复原理、保证数据一致性的机制、持久化机制等等。
3)Zookeeper服务端集群部署和运维
这其实上面这些就是Zookeeper核心的架构原理。这也是第一章的重点。会用一步一图,简单的方式让你掌握或者回顾 Zookeeper的服务端的架构原理和使用,而且也有一些金句甜点,给大家分享一些好的思想和观念。至于客户端的研究会放到第二章源码原理篇中。敬请期待。
下面是第一章的宣传海报,大家可以先一睹为快。也可以分享到朋友圈让更多人的和你一起成长。