乐趣区

关于linux:为啥这么多公司用-ZooKeeper它到底解决了什么问题

指标

ZooKeeper 很风行,有个根本的疑难:

  • ZooKeeper 是用来做什么的?
  • 之前没有 ZK,为什么会诞生 ZK?

OK,解答一下下面的疑难:(上面是凭直觉说的)

  • ZooKeeper 是用于简化分布式应用开发的,对开发者屏蔽一些分布式应用开发过程中的底层细节
  • ZooKeeper 对外裸露简略的 API,用于反对分布式应用开发
  • ZooKeeper 在提供上述性能的同时,其还是一个 高性能、高可用、高牢靠的分布式集群

下面说这么多,总结一下,ZK 能解决分布式应用开发的问题,ZK 能很好的解决问题。到这一步,疑难就更多了:

  • 分布式应用开发,有哪些常见问题?ZK 是如何屏蔽这些底层细节的?
  • ZooKeeper 对外裸露了那些 API?这些 API 如何反对分布式应用开发的?这些 API 还 - 能简化吗?API 的语义性怎么样?
  • ZooKeeper 本身是一个高性能、高可用、高牢靠的分布式集群,那有个简略的问题:
  • 高性能是指什么?ZooKeeper 为了达到高性能,做了哪些工作?
  • 高可用同上
  • 高牢靠同上

为什么有 ZooKeeper

一个应用程序,波及多个过程合作时,业务逻辑代码中混淆有大量简单的过程合作逻辑。 上述多过程合作逻辑,有 2 个特点:

  • 解决简单
  • 解决逻辑可重用

因而,思考将多过程合作的共性问题拎出,作为基础设施,让 RD 更加专一业务逻辑开发,即:ZooKeeper 就是上述多过程合作根底服务的一种。

ZooKeeper 的特点

ZooKeeper 有几个简略特点:
  • ZooKeeper 的 API:从 文件系统 API 失去的启发,提供简略的 API
  • ZooKeeper 运行在专用服务器上,跟业务逻辑拆散,保障了高容错性和可扩展性

ZooKeeper 是存储设施,但特地留神

  • ZK 上存储的数据聚焦为:合作数据(元数据),而不是利用数据,利用数据有本人的存储计划,例如 HDFS 等
  • ZK 实质上,能够看作一种非凡的 FS

特地阐明:利用数据和元数据,因为应用场景不同,对一致性和持久性的要求有差别,因而,架构设计、数据治理过程中,应将 2 类数据独立对待、独立存储。

ZooKeeper 的使命

ZK 要解决的外围问题:

ZK 指标:简化分布式应用开发中,多过程合作问题。为分布式应用,提供高效、牢靠的分布式协调服务(根底服务),例如:

  • 对立的命名服务
  • 分布式锁
  • 过程解体检测
  • Leader 选举

配置管理:配置变更时,及时下发到各个 Client。

一个简略的问题:多过程的合作是什么?尼玛呀,有完没完,啥问题你都有,面对这个掉咋天的脑壳,还是答复一下。

多过程合作,整体分为 2 类:

  • 合作:多过程须要一起解决某些事件,一些过程采取行动是的其余过程可能失常工作,例如:主从构造,M 向 S 分配任务,S 才会执行,否则 S 就放弃闲暇状态
  • 竞争:两个过程不能同时工作,一个过程必须期待另个过程执行结束,例如:主从构造,M 节点生效后,很多 S 都想成为 M,这时,就须要互斥锁,只有第一个取得锁的 S 成为 M

特地阐明:

  • 不跨网络合作:多过程,能够在同一台物理主机上,同步原语很不便 (比方?管道、共享内存、音讯队列、信号量)
  • 跨网络合作:多过程,散布在不同的物理主机上,ZK 关注这一类

跨网络多过程合作,过程通信,基本思路有 2 个:

  • 音讯机制:通过网络,间接信息替换,多消息传递算法,实现同步原语
  • 共享存储:利用内部共享存储,实现多过程合作,要求共享存储提供有序拜访,ZK 采纳这种形式

实在零碎中,跨网络通信,有几个共性问题:

  • 音讯提早:因为网络起因,后发送先达到
  • 处理器性能:因为系统调度起因,音讯达到后,提早解决
  • 时钟偏移:不同物理主机,时钟产生偏移

ZK 精心设计用于屏蔽上述 3 个共性问题,使得这些问题在应用服务层面齐全透明化。

ZooKeeper 个性

ZooKeeper 解决的实质问题

分布式系统的一致性问题:

  • 消息传递:提早性,先发送的音讯,不肯定先达到;
  • 消息传递:失落性,发送的音讯,可能失落;
  • 节点解体:分布式系统内,任何一个节点都可能解体;

在这种状况下,如何保证数据的一致性?

  • 提案投票:基于投票策略,2PC
  • 选举投票:基于投票策略,投出优先级最高的节点(蕴含最新数据的节点)

Paxos 指标:解决分布式一致性问题,进步分布式系统容错性的一致性算法。

Paxos 实质:基于消息传递的高度容错的一致性算法

ZooKeeper 定位

ZooKeeper 是:
  • 分布式协调服务
  • 高效、牢靠
  • 不便应用程序,聚焦业务逻辑开发,而不须要过多关注分布式过程间合作细节

ZooKeeper 不间接裸露原语,而是,裸露一部分调用办法组成的 API,相似文件系统的 API,反对应用程序实现本人的原语。

ZooKeeper 个性

ZooKeeper 能够保障如下分布式一致性个性:

  • 程序一致性:同一个 Client 发动的事务申请,严格依照发动程序执行
  • 原子性:事务申请,要么利用到所有节点,要么一个节点都没有利用
  • 繁多视图:Client 无论连贯到哪个节点,看到的服务端数据都是统一的(Note:不精确,其实是最终一致性)
  • 可靠性:事务一旦执行胜利,状态永恒保留
  • 实时性:事务一旦执行胜利,Client 并不能立刻看到最新数据,但 ZooKeeper 保障最终一致性
ZooKeeper 设计指标

ZooKeeper 致力于提供高性能、高可用、程序一致性的分布式协调服务,保证数据最终一致性。

指标一:高性能(简略的数据模型)

  • 采纳树形构造组织数据节点;
  • 全量数据节点,都存储在内存中;
  • Follower 和 Observer 间接解决非事务申请;

指标二:高可用(构建集群)

  • 半数以上机器存活,服务就能失常运行
  • 主动进行 Leader 选举

指标三:程序一致性(事务操作的程序)

  • 每个事务申请,都会转发给 Leader 解决
  • 每个事务,会调配全局惟一的递增 id(zxid,64 位:epoch + 自增 id)

指标四:最终一致性

  • 通过提议投票形式,保障事务提交的可靠性
  • 提议投票形式,只能保障 Client 收到事务提交胜利后,半数以上节点可能看到最新数据

ZooKeeper 呈现之前

ZK 呈现之前,分布式系统罕用两种形式,实现多过程合作:

  • 分布式锁管理器
  • 分布式数据库

ZK 更专一于过程合作,而不提供任何锁接口和通用的存储数据接口。(疑难:ZK 也能够提供啊,咱们不应用就行了)

应用服务器,常见的 2 种需要:

  • Master-Slave Leader 选举:要求提供 Master 节点选举性能
  • 过程响应跟踪解体检测:要求提供过程存活状态的跟踪
  • 分布式锁:互斥排它锁

ZK 为上述 2 种策略提供了根底 API。

ZooKeeper 不实用的场景:

海量数据存储:ZK 实质是非凡的 FS,但 ZK 用于存储元数据,须要独自存储利用数据

专业术语介绍

文章起源:http://ningg.top/zookeeper-po…

退出移动版