Zookeeper从入门到删库跑路

导语

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。

通俗来讲,ZooKeeper只是一个持久化存储工具。这个存储工提供了增删改查以外的一些分布式系统在进行通信时需要的基础特性,如具有父子关系的树形数据节点,节点临时性,节点顺序性,节点修改事件的发布订阅,zk集群高可用和强一致等等。这些特性就像是基础的加减乘除,开发人员利用zk的这些基础特性,与业务进行组合,可以实现诸多分布式系统需要的功能,如命名服务,分布式锁,分布式服务的动态发布的订阅等等。因此,zk的应用场景是丰富的,在分布式系统的业务开发过程中,只要我们有足够的想象力,总是能够利用那些加减乘除构建出我们需要的业务。所以说zk值得身处处处都是分布式的互联网时代的我们学习和掌握。掌握zk是当代java开发同学们必备的一个基础技能,就像是mysql和redis一样。
本文不会手把手教学zk的api,而是用一种俯视的姿态来理解zk。理解完了之后,写代码需要的就只有想象力和google了。真正做到了无招胜有招,不教api胜过教api。

ZK概述

首先,zk服务端是纯java实现,这一点就会让诸多java开发同学感到畏手畏脚,觉得zk的学习是不是要去瞅源码啊,那岂不是很难。这种先入为主的观念是错误的。除非你想到zk项目仓库提交代码做贡献,不然作为单纯使用者的你是不用去关注zk服务端的实现的。可以类比mysql,mysqld是c语系的实现,那么在日常工作使用中除了想要拔高学习,你有想过去看看它的源码吗?因此,和msyql一样,zk服务端对于我们普通开发人员来说其实是透明的,我们只需要在项目中集成zk的sdk也就是类似mysql 驱动,驱动利用传输层网络协议与服务端通信,而我们就可以利用驱动暴露的接口进行业务开发。
基于上面的假设,zk和mysql一样,都是提供持久化存储服务的工具,只是除了增删改查外各自提供的特性不同。那么接下来就很好理解了。

ZK安装运维

zk的安装运维不是本文的重点。这部分内容参考zookeeper安装即可。本质上来说其实就是配置部署一个java应用,这个应用可以集群部署用来提高可用性。至于集群间读写分离,数据同步等内容对于使用者来说是透明的,由zk集群实例依照zab协议自动进行。其中的实例角色如领导者,观察者,追随者在集群启动过程中自动选举产生。如无绝对必要,那就让子弹飞吧。

ZK客户端组成

和mysql一样,zk的客户端分为两个部分。一个是基于命令行的黑窗口。一个是zk连接驱动。zk是java实现,那么zk命令行的启动需要JRE。在zk的bin目录下,根据平台执行cli启动脚本即可打开命令行客户端,默认连接localhost。该客户端有许多命令,同时支持自动补全。这部分一般在调试阶段使用,用的也很少。详细
除此之外,就是用于和自己的项目集成的zk 驱动了。和msyql一样,虽然zk服务端是纯java实现,但是zk驱动提供了多种语言的实现,如python,c,java等,可以和多种语言生态的应用进行整合,利用tcp等传输层协议与服务端通信,提供操作zk的接口。mysql也如此,给各个语言生态的应用提供了驱动,与服务端通信,提供了操作mysql数据的接口。
本文主要讲解zk在java生态中的使用。

ZK驱动

原文地址:https://www.cnblogs.com/yungyu16/p/8661759.html