美文网首页
02-ZooKeeper预备知识

02-ZooKeeper预备知识

作者: wshsdm | 来源:发表于2019-04-26 14:53 被阅读0次

1 为什么需要zk

当前应用服务发生了很大的变化,在大数据和云计算盛行的今天,应用服务由很多独立的程序组成,如何让一个应用中多个独立的程序协同工作是一件非常头疼的事。

zookeeper从文件系统API得到启发,提供一组简单的API,使得开发人员可以实现通用的协作任务,包括选举主节点、管理组内成员关系、管理元数据等。zookeeper包括一个应用开发库(主要提供Java和C两种语言的API)和一个用Java实现的服务组件,ZK的服务组件运行在一组专用服务器上,保证了高容错性和可扩展性。

2 主从应用

典型的主从应用工作模式中,从节点处于空闲状态时会通知主节点可以接收工作,于是主节点会分配任务给从节点。获取主节点身份的过程就是获取锁的过程,获得主节点控制权锁的进程就是主节点进程。

在一个典型的不共享环境下不同的计算机之间不共享除了网络之外的其他任何消息,虽然许多消息传递算法可以实现同步原语,但是ZK使用一个提供某种有序共享存储的组件。

ZK的应用实例:

HBase是一个与Hadoop一起使用的数据存储仓库,在HBase中ZK用于选举一个集群中的主节点,以便跟踪可用的服务器,并保存集群的元数据;

Kafka是一个基于发布-订阅模式的消息系统,其中ZK用于检测崩溃、实现主题的发现,并保持主题的生产和消费状态;

Solr是一个企业级的搜素平台,分布式本名SolrCloud,它使用ZK来存储集群中的元数据,并协作更新这些数据。

开发中应用ZK往往看成是连接到ZK服务端的客户端,ZK客户端API包括:

A:保障强一致性、有序性和持久性;

B:实现通用的同步原语的能力;

C:简单的并发处理机制;

3 ZK特点

3.1 ZK区别其他分布式系统

ZK之前的一些系统采用分布式锁管理器或者分布式数据库实现协作。但是ZK设计更关注任务协作,并不提供任何锁或数据存储接口,同时ZK也没有给开发人员加入任何特殊的同步原语,使用起来非常灵活。

3.2 ZK构建分布式系统

分布式系统定义:分布式系统是同时跨越多个物理主机,独立运行多个软件组件所组成的系统;

分布式系统中的进程通信有两种方式:直接通过网络信息交换或读写某些共享存储。ZK使用共享存储模式来实现应用的协作和同步原语;共享存储本身需要在进程和存储间进行网络通信;ZK不适用海量数据存储;

在实际系统中的问题:

A:消息延迟

B: 处理器性能

C: 时钟偏移

CAP的定义

Consistency (一致性):

“all nodes see the same data at the same time”,即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。一致性的问题在并发系统中不可避免,对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。

Availability (可用性):

可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

Partition Tolerance (分区容错性):

即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,对于用户而言并没有什么体验上的影响。

CAP三个特性只能满足其中两个,那么取舍的策略就共有三种:

CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但放弃P的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限,没办法部署子节点,这是违背分布式系统设计的初衷的。

CP without A:如果不要求A(可用),相当于每个请求都需要在服务器之间保持强一致,而P(分区)会导致同步时间无限延长(也就是等待数据同步完才能正常访问服务),一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统。设计成CP的系统其实不少,最典型的就是分布式数据库,如Redis、HBase等。对于这些分布式数据库来说,数据的一致性是最基本的要求,因为如果连这个标准都达不到,那么直接采用关系型数据库就好,没必要再浪费资源来部署分布式数据库。

 AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。典型的应用就如某米的抢购手机场景,可能前几秒你浏览商品的时候页面提示是有库存的,当你选择完商品准备下单的时候,系统提示你下单失败,商品已售完。这其实就是先在 A(可用性)方面保证系统可以正常的服务,然后在数据的一致性方面做了些牺牲,虽然多少会影响一些用户体验,但也不至于造成用户购物流程的严重阻塞。

4 以HBase了解主从应用

HBase主节点服务器(HMaster)负责跟踪区域服务器(HRegionServer)是否可用,并分派区域到服务器。在这种架构中主节点进程负责跟踪从节点状态和任务东有效性,并分配任务到从节点。ZK完成了如选举主节点、跟踪有效东从节点,维护应用元数据。

面临三个关键问题:主节点崩溃、从节点崩溃、通信故障

问题解决:

主节点失效:当主节点崩溃时,备份主节点接管主节点角色,进行故障转移;新主节点需要恢复到旧的主节点崩溃时的状态,不能直接从崩溃的主节点获取信息,ZK负责获取崩溃主节点信息;

从节点失效:正常情况下客户端向主节点提交任务,之后主节点将任务派发到有效的从节点中,从节点接收到派发的任务,执行完成这些任务后向主节点报告执行状态,主节点会将执行结果通知给客户端。

如果从节点崩溃,所有派发任务可能执行完毕或没有执行完成,主节点具有检测从节点崩溃的能力,并清除之前的状态。

通信故障:主从节点网络故障导致一个任务执行多次,“仅一次”和“最多一次”的语义,对任务加锁并不能保证一个任务执行多次;

相关文章

  • 02-ZooKeeper预备知识

    1 为什么需要zk 当前应用服务发生了很大的变化,在大数据和云计算盛行的今天,应用服务由很多独立的程序组成,如何让...

  • 【 数据结构 & 算法 】—— 二叉树、图

    思维导图 预备知识:二叉树定义(★) 预备知识_二叉树定义.cpp 预备知识:二叉树的深度遍历(★) 预备知识_二...

  • 预备知识

    M3内核基本结构 Cortex-M3内核是32位的 M3F103内核采用Thumb-2指令集 支持16/32位指令...

  • 预备知识

    数据仓库定义 数据仓库的基本概念 面向主题的、集成的、非易失的、反应历史变化的,数据集合,用于支持管理决策。 数据...

  • 预备知识

    定义一个结构体,包括邻接结点和边权值,用来表示一条边 用vector表示结点 清空 添加 删除

  • 【 数据结构 & 算法 】—— 栈、队列、堆

    < 思维导图 > 预备知识:STL stack(堆) 预备知识:STL queue(队列) 使用队列实现栈(栈、队...

  • 2019-11-07 检查gcc交叉编译器预定义宏(ARM32/

    预备知识1 预备知识2https://www.veryarm.com/872.html Ubuntu 安装64位a...

  • 【 数据结构 & 算法 】—— 贪心算法

    < 思维导图 > 预备知识:钞票支付问题(贪心法) 预备知识_钞票支付.cpp 分糖果(排序、贪心)(★) Lee...

  • (一)预备知识

    1. 图像 1.1 图像(Image) 具体概念:可以看作是对物体或场景的一种表现形式,在人的视觉系统中产生视觉印...

  • NLP预备知识

    拉普拉斯平滑(Laplace Smoothing) 来源: https://www.cnblogs.com/bqt...

网友评论

      本文标题:02-ZooKeeper预备知识

      本文链接:https://www.haomeiwen.com/subject/jdofnqtx.html