Zookeeper的典型应用场景

Zookeeper的配置很简单,用自带的zkCli可以对ZNode进行操作,可以实现分布式锁和小文件分布式存储等功能,这些都是基础功能。在现实世界里,Zookeeper用来构建一些分布式应用会都会涉及到核心功能:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁、分布式队列等等。

典型应用场景和实现

数据发布/订阅

就是配置中心,发布者将数据发布到Zookeeper的一个或多个节点,供订阅者进行数据订阅,实现配置信息的集中式管理和数据的动态更新。

Zookeeper采用的是推拉模型相结合的方式,客户端向服务端注册自己需要关注的节点,一旦节点数据发生变化,服务器会向客户端发送Watcher事件通知,客户端收到通知后主动到服务端获取最新数据。

在应用系统中,经常碰到这样的需求:系统中需要使用一些通用的配置信息,例如机器列表信息、运行时开关配置、数据库配置等等,这些全局配置信息具备以下三个特点:

1、数据量比较小

2、数据在运行时发生动态变化

3、集群中各机器共享,配置一致

用Zookeeper可以很容易实现,将配置放到一个ZNode中,集群机器初始化阶段会读取这个节点的配置,同时注册一个数据变化的Watcher监听,一旦配置变化,所有订阅的客户端都可以获得这个配置变化。

负载均衡

Zookeeper实现的是软负载均衡。


命名服务

是指通过指定的名字来获取资源或者服务的地址,提供者的信息。利用Zookeeper很容易创建一个全局的路径,而这个路径就可以作为一个名字,它可以指向集群中的集群,提供的服务的地址,远程对象等。简单来说使用Zookeeper做命名服务就是用路径作为名字,路径上的数据就是其名字指向的实体。

阿里巴巴集团开源的分布式服务框架Dubbo中使用ZooKeeper来作为其命名服务,维护全局的服务地址列表。在Dubbo实现中:服务提供者在启动的时候,向ZK上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。服务消费者启动的时候,订阅/dubbo/{serviceName}/providers目录下的提供者URL地址, 并向/dubbo/{serviceName} /consumers目录下写入自己的URL地址。注意,所有向ZK上注册的地址都是临时节点,这样就能够保证服务提供者和消费者能够自动感应资源的变化。另外,Dubbo还有针对服务粒度的监控,方法是订阅/dubbo/{serviceName}目录下所有提供者和消费者的信息。

分布式协调/通知

分布式协调/通知服务是分布式系统中不可缺少的一个环节,是讲不同的分布式组件有机结合在一起的关键。对于一个在多台机器上部署运行的应用,通常需要一个协调者coordinator来控制整个系统的运行。

Zookeeper中特有的Watcher注册与异步通知机制,能够很好的实现分布式环境下不同机器,甚至是不同系统之间的协调与通知,从而实现对数据变更的实时处理。

集群管理

传统集群管理需要在每个客户机安装Agent,这种方案不灵活而且Agent升级、功能都会有局限性。

监控系统在/clusterSevers节点上注册一个Watcher监听,但凡进行动态添加机器的操作,就会在/clusterSevers节点下创建一个临时节点:/clusterServers/[hostname]。这样监控系统就能实时监测到机器的变动情况。

Master选举


分布式锁

分布式队列

Zookeeper在大型分布式系统中的应用

Hadoop

在Hadoop中,Zookeeper用来实现HA,这部分逻辑在Hadoop Common HA模块中,HDFS的NameNode与YARN的ResourceManager都基于这个HA模块来实现自己的HA。在YARN中,Zookeeper也用来存储应用的运行状态。

HBase

在整个Hbase架构中,Zookeeper用来串起HBase集群和CLient。

Kafka

Kafka主要用来实现低延时的发送和收集大量的事件和日志数据,是一个吞吐量极高的分布式消息系统,其整体设计是典型的发布和订阅模式。Kafka使用Zookeeper的负载均衡策略来解决生产者和消费者的负载均衡问题。

Zookeeper在阿里巴巴

消息中间件Metamorphosis(用作负载均衡)、RPC框架Dubbo(用作服务注册)、基于MySQL数据库Binlog实现的增量订阅和消费组件Canal。在Canal中,Zookeeper用来实现主备切换HA。实时计算引擎JStrom使用Zookeeper负责协调Nimbus和Supervisor。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容

  • 此文知识来自于:《从Paxos到Zookeeper分布式一致性原理与实践》第六章 数据发布/订阅(配置中心) 负载...
    李文文丶阅读 1,740评论 0 3
  • 此文知识来自于:《从Paxos到Zookeeper分布式一致性原理与实践》第六章 集群管理(子节点) Master...
    李文文丶阅读 543评论 0 1
  • ZooKeeper是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布与...
    端木轩阅读 3,442评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,672评论 18 139
  • ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境...
    Bobby0322阅读 389评论 0 2