她只是怅然若失,解放的潘多拉 bt,刘玄真吧
cap 定理:
一个分布式系统不可能同时满足一致性 (c:consistency)、可用性(a:availability)和分区容错性(p:partition tolerance)这三个基本要求,最多只能同时满足其中的两项。
我们需要明确一点,对于一个分布式系统而言,分区容错性是一个最基本的要求,既然是一个分布式系统,那么分布式系统中的组件必然需要被部署到不同的节点,否则也就无所谓分布式系统了。因此我们一般把精力花在如何根据业务特点在 c 和 a 之间寻求平衡。
base 理论:
base 是 basically available (基本可用),soft state (软状态)和 eventually consistent (最终一致性) 三个短语的简写,base 是对 cap 中一致性和可用性权衡的结果,其核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。
zookeeper 是一个开源的分布式的(多台机器一起工作),为分布式应用提供协调服务的 apache 项目。
zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,zookeeper 就将负责通知已经在 zookeeper 上注册的那些观察者做出相应的反应。
例子:
服务端启动时去注册信息(创建的都是临时节点);客户端获取当前在线服务器列表,并注册监听;当服务器节点下线,服务器节点下线事件通知客户端,客户端重新去获取服务器列表,并注册监听。
zookeeper = 文件系统 + 通知机制
zk 数据模型的结构整体上可以看作一棵树,每个节点称作一个 znode。每个 znode 默认能够存储 1mb 的数据,每个 znode 都是通过其路径唯一标识的
zk 提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
在分布式环境下,经常需要对应用/服务进行统一命名,便于识别
例如:ip 地址难记,但是域名好记。如下图,将 www.baidu.com 这个域名与旗下的三个 服务器 ip 地址对应起来,当访问 www.baidu.com 的时候自动从三个 ip 地址中选一个进行访问。
客户端能够实时洞察到服务器上下线的变化。服务端启动时去注册信息(创建的都是临时节点);客户端获取当前在线服务器列表,并注册监听;当服务器节点下线,服务器节点下线事件通知客户端,客户端重新去获取服务器列表,并注册监听。
在 zookeeper 中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求。
例子:
假设有五台服务器组成的 zookeeper 集群,他们的 id 从 1-5,同时它们都是刚刚启动的。假设这些服务器依序启动:
说明:创建 znode 时设置顺序标识,znode 名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。在分布式系统中,顺序号可用被用于为所有的事件进行全局排序,这样客户端可用通过顺序号来推断事件的顺序。
zookeeper 是一个采用 zab 作为数据一致性协议的分布式数据一致性协调框架。zookeeper 可以作为分布式配置管理,集群服务,数据发布/订阅,服务注册/发现,分布式锁等的实现。其内部采用 znode 节点维护一系列数据,当数据改变的时候可以通过 watche 机制告诉客户端。当 zookeeper 作为分布式消息系统的管理,如 kafka 的管理时,可以将所有 kafka 服务器,即所有的 broker 的信息写入 zookeeper 节点中,当加服务器时只要在节点下加入一个临时子节点,服务器宕机或下线时临时子节点将会自动删除。很容易实现服务器的集群管理。不光如此,zookeeper也可以用来维护 topic 主题和 producer 和consumer 等的信息。当 zookeeper 作为分布式服务框架的注册中心时,可以将服务注册到 zookeeper 节点上,每个服务对应一个节点,子节点就是所有提供了该服务的机器的地址。每当有一个服务提供者启动的时候都会网对应的服务节点下创建自己的临时节点,存放自己的地址信息。消费者需要某个服务的时候只需要到对应的服务节点中随便取一个子节点然后使用该服务就行了。监控中心可以很容易的通过现有的节点监控信息。
zookeeper 集群中会自动选举一个 leader 服务器负责事务的操作,其余的 follower服务器可以处理非事务操作、参与 leader 服务器的投票等。而 observer 服务器只能处理非事务的操作,但是不能参与任何投票。
总之,zookeeper 常用来维护各种分布式应用的一个状态,使得分布式应用本身无状态,只需要向 zookeeper 注册自己的状态,当需要某种状态的时候直接去 zookeeper 上取就行了。当自己关注的消息发生变化时,zookeeper 会通过 watche 进行通知,自己再进行对应的处理即可。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
去 HBase,Kylin on Parquet 性能表现如何?
如何找到Hive提交的SQL相对应的Yarn程序的applicationId
如何在 HBase Shell 命令行正常查看十六进制编码的中文?哈哈~
HBase Filter 过滤器之 Comparator 原理及源码学习
安装 Hadoop 2.9.1 on Windows 10 64 bit (最全步骤整理)
网友评论