徐雷 frank 2019-03-31 00:28:08 浏览 89 评论 0
大数据
架构
算法
服务器
hadoop
高可用
集群
微服务
分布式架构
面试题
zookeeper
ZK
摘要: ZooKeeper 是分布式协调服务, 开源分布式架构领域不可或缺的技术, 使用非常的广泛, 比如常见的 Hadoop 大数据架构, 阿里巴巴的 Dubbo 分布式架构, Spring Cloud 微服务架构等都有涉及. BAT 名企面试中也是经常作为考点.
ZooKeeper 是分布式协调服务, 开源分布式架构领域不可或缺的技术组件, 使用非常的广泛, 我们在一些分布式架构的文章中经常看到.
比如常见的 Hadoop 大数据架构, 阿里巴巴的 Dubbo 分布式架构, Spring Cloud 微服务架构等都有涉及. BAT 名企面试中也是经常作为考点. 重要性不言而喻, 作为互联网公司的架构师, 不懂 ZooKeeper 很难过关.
今天我们来一起系统学习《ZooKeeper 分布式架构实战系列》, 包括 ZooKeeper 概念, 功能, 架构, 与使用场景和面试题, 与各种技术组件的搭配使用, 部署, 运维与开发实战.
1,ZooKeeper 名字由来
ZooKeeper 在分布式领域大名鼎鼎, 但是很多人不理解为什么叫这个名字. 其实却是很痛苦, 我自己第一次听说也是很久不理解.
这和 ZooKeeper 最初诞生的时候的设计目标有关系, ZooKeeper 最早是为 Hadoop 大数据生态系统设计的. 我们今天基本都是用在其他的分布式系统场景下, 所以很难去理解这个奇怪的名字.
ZooKeeper : 动物饲养员, 动物管理员, 也就是现在 Logo 的样子, 不过这个 Logo 还不够形象, 会让人感觉是个挖下水道的工人.
作为中国程序员, 很难理解老外起名字的套路, 为什么一个好好的分布式工具, 叫这么奇怪的名字?
Hadoop 本意, 大象, Impala 黑斑羚, Pig 猪八戒二师弟. Hive 蜜蜂等, Hadoop 大数据生态的开源框架基本都是动物的名称, 所以就有了这个称谓. ZooKeeper 帮忙管理大数据分布式应用系统中的不同动物组件.
2011 年美国上映的一部电影《ZooKeeper 》,Kevin James 主演的动物管理员, 讲的是一个屌丝饲养员在动物的神助攻下追到金发美女的浪漫爱情故事. 中国大陆翻译为: 动物园看守. 这个名字霸气, 让你听了就感觉动物是在坐牢. 台湾的翻译是: 全民情兽. 哈哈. 让人不敢深入想想.
不过真正做过 ZooKeeper 的名人到有一位, 就是德云社相声演员: 孙越 (岳云鹏的搭档, 大胖子). 之前在北京动物园饲养大象, 一点都不浪漫. 最后回到德云社说相声, 发财娶老婆结婚.
2,ZooKeeper 核心概念
ZooKeeper 是 Apache 基金会重要的开源项目, 主要作用是提供分布式架构的协调工作. 最初的设计目标是为 Hadoop 大数据生态服务.
官方地址: https://zookeeper.apache.org/ .
Apache ZooKeeper 致力于开发和维护开源服务器, 实现高度可靠的分布式协调架构.
ZooKeeper 用于分布式协调, 目标是用来构建高可用的分布式应用程序的高性能协调程序.
ZooKeeper 提供了一种集中式服务, 用于维护配置信息, 命名, 分布式同步和组服务. 所有这些类型的服务都以分布式应用程序的某种形式使用. ZooKeeper 是一种用于分布式应用程序的高性能协调服务. 简单的界面中公开了常用服务 API - 例如命名, 配置管理, 同步和组服务 - 因此我们不必从 0 开始开发一个这样的工具. 我们可以使用 ZooKeeper 现成的方法来实现共识, 组管理, 领导者选举和协议. 我们也可以根据自己的特定需求进行二次扩展开发. 比如著名的阿里开源的 RPC 框架 Dubbo 就使用了 ZooKeeper. 这样可以节约大量的类似工具的开发成本.
3,ZooKeeper 分布式架构
今天来看使用到 ZooKeeper 的地方必然是分布式架构系统, 而且没有自身的高可用机制, 借助 ZooKeeper 来实现, 什么意思? 就好比动物, 没有人管理, 喂养, 会死掉的, 也就是没有人管理的应用, 除了没有可能整个系统就垮掉了. ZooKeeper 能管理, 发现, 解决这些问题.
ZooKeeper 很简单. ZooKeeper 允许分布式进程通过共享的层级命名空间相互协调, 该命名空间的组织方式与标准文件系统类似. 名称空间由数据寄存器组成 - 称为 znodes - 这些与文件和目录类似. 与专为存储而设计的典型文件系统不同, ZooKeeper 数据保存在内存中, 这意味着 ZooKeeper 是高性能协调协调服务程序, 可以实现高吞吐量和低延迟数量.
ZooKeeper 实现非常重视高性能, 高可用性, 严格有序的访问. ZooKeeper 可以在大型分布式系统中使用. 支持集群模式, 可靠性方面使其不会成为单点故障. 严格的排序意味着可以在客户端实现复杂的同步原语, 也就是严格的数据同步模式,.
4,ZooKeeper 的典型场景
ZooKeeper 在分布式系统架构中, 经常可以看到, 比如 Hadoop 大数据分布式架构, Dubbo 分布式架构, Kafka 消息队列分布式架构, Spring Cloud 微服务架构中都有, Solr 搜索引擎分布式架构等都可以使用. 几乎开源分布式架构都有关系.
5,ZooKeeper 的功能特新
ZK 提供了丰富的功能特性, 当然最核心的还是分布式协调, 为了完整性, 我们列举了所有的功能清单:
1.Naming service 命名服务
2.Updating the node's status 更新节点状态
3.Managing the cluster 管理集群
4.Automatic failure recovery 自动故障恢复
5.Sequential Consistency 顺序一致性
6.Single System Image 单一系统视图
7.Timeliness 及时性
ZK 使用简单, 可靠, 性能高, 速度快, 保证消息有序, 操作的原子性, 数据状态一致性.
6,ZooKeeper 的核心算法
为了保障 ZooKeeper 分布式协调服务的高可用, ZooKeeper 提供了集群模式, 默认有一个 Leader, 领导, 其他是 Follower, 备选. 集群 Leader 出错, 会快速进行选举, 选择新的 Leader, 响应客户的程序的请求.
7,ZooKeeper 的通信协议
ZooKeeper 默认的通信协议是 TCP, 内部集群选举的协议是广播. 客户端连接到单个 ZooKeeper 服务器. 客户端维护 TCP 连接, 通过该连接发送请求, 获取响应, 获取监视事件以及发送心跳. 如果与服务器的 TCP 连接中断, 则客户端将连接到其他服务器.
Zookeeper 的选举算法使用了 Zookeeper Atomic Broadcast 协议,(简称 ZAB,Zookeeper 原子消息广播协议) 作为数据一致性同步的核心算法的通信协议. ZAB 是一种与 Paxos 不同的协议, 后面我们会专门来讲解这个过程.
8,ZooKeeper 的典型公司
几乎著名的互联网公司都在使用 Zookeeper:
阿里巴巴
蚂蚁金服
腾讯
华为
今日头条
- Yahoo
- eBay
- Netflix
等名企都在使用.
我们以后慢慢来详细学习, 下一个文章我们学习, 如何在 Linux 系统上安装 Zookeeper. 逐步深入学习 ZooKeeper 实战开发.
参考资料:
- , http://zookeeper.apache.org/
- , https://movie.douban.com/photos/photo/1264463926
阿里巴巴 Java 群超过 4500 人
进群方式: 钉钉扫码入群
阿里巴巴 MongoDB 群
来源: https://yq.aliyun.com/articles/696060