ZooKeeper系列(1)--分布式系统的基石
分布式架构有以下几点普适性的共性需求:
1. 提供集群的集中化的配置管理功能,可以不重启就让新的配置参数生效,类似与配置中心
2. 简单可靠的集群节点动态发现机制,便于动态发现服务,动态扩展节点
3. 简单可靠的leader选举机制
4. 提供分布式锁
zookeeper的数据结构整体上可以看作一颗目录树,其中每个节点被称作ZNode,每个Znode都可以通过其路径(Path)唯一标识,如/services/helloworld。每个ZNode都可以绑定一个二进制存储数据(Data),用来存储少量数据,默认最大1MB。不建议在ZNode中存储大量的数据,因为数据多份复制,会带来宽带压力,降低性能。
ZNode有一个ACL访问权限列表,用来决定当前操作API 的用户是否有操作此节点的权限。ZNode还提供了实时通知的接口--Watch,应用可以选择任意ZNode进行监听,如果被监听的ZNode或者其Child发生变化,则应用可以实时收到通知,这样一来,很多场景和需求都能通过ZooKeeper来实现了。
此外,ZNode是有生命周期的,这取决于节点的类型,节点的类型分为以下几类:
1. 持久节点:节点创建后就一直存在,直到有删除操作来主动删除该节点
2. 临时节点:临时节点的生命周期和创建该节点的客户端会话绑定,即如果客户端会话失效(客户端宕机或下线),这个节点自动删除
3. 时序节点:创建节点是可以设置这个属性,ZooKeeper会自动为给定的节点加上一个数字后缀,作为新的节点名。数字后缀的范围是整型的最大值
4. 临时性时序节点:同时具备临时节点与时序节点的特性,主要用于分布式锁的实现
从上面的分析来看,持久节点主要用于保存持久化数据,如集群的配置信息,结合Watch特性,实现配置的实时生效。
临时节点可以实现复杂的动态服务发现和服务路由功能。通常的做法是,分布式集群不同服务器上的服务注册到同一个ZooKeeper上,并在某个指定的路径下创建各自对应的临时节点,如/serviceA/node1, /serviceA/node2,客户端则监听/service目录。当有新的节点加入集群时,ZooKeeper会把变化实时通知到所有客户端,客户端就可以及时更新自己的服务路由转发表,实现全自动透明的服务发现和服务路由功能。
时序类型的节点,在创建时,每个节点名都会被追加一个递增的序号,类似于数据库自增主键,每个ZNode都有唯一序号,而且不会冲突。以此可以实现简单的Master(Leader)选举机制。即把一组service实例都注册为临时性时序节点ZNode,每次选取Master时,选取序号最小的为Master,而当Master宕机时,相应的ZNode会消失,新的服务器列表会推送至客户端,继续选举下一任Master,这样就做到了动态选举Master。
ZooKeeper主要用于以下场景:
1. 实现配置管理(配置中心)
2. 服务注册中心
3. 集群通信与控制子系统
作为服务注册中心时:
首先服务提供者将自身的服务信息注册到注册中心。通常注册信息包含如下内容:
1. 服务的类型
2. 隶属于哪个系统
3. 服务的IP/端口
4. 服务的请求URL
5. 服务的权重
其次注册中心要将所有服务信息存储,同时负责将注册信息的更新推送到所有的消费者(通过Watch机制实现)。
最后,服务消费者只有在初始化及服务变更时会依赖注册中心,而在整个服务调用过程中与服务提供方直接通信,不依赖于任何第三方,包括注册中心。
欢迎关注我的微信公众号(Sunnick,请扫码关注),随时留言交流~

ZooKeeper系列(1)--分布式系统的基石的更多相关文章
- zookeeper系列(五)zookeeper在大型分布式系统中的应用
作者:leesf 掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6063694.html 尊重原创感谢博主公开这么好的博文, ...
- Zookeeper系列六:服务器角色、序列化与通信协议、数据存储、zookeeper总结
一.服务器角色 1. Leader 1)事务请求的唯一调度者和处理者.保证事务处理的顺序性 事务请求:导致数据一致性的请求(数据发生改变).如删除一个节点.创建一个节点.设置节点数据,设置节点权限就是 ...
- Zookeeper 系列(三)Zookeeper API
Zookeeper 系列(三)Zookeeper API 本节首先介绍 Zookeeper 的 Shell 命令,再对 Java 操作 Zookeeper 的三种方式进行讲解,本节先介绍 Zookee ...
- Zookeeper 系列(一)基本概念
Zookeeper 系列(一)基本概念 https://www.cnblogs.com/wuxl360/p/5817471.html 一.分布式协调技术 在给大家介绍 ZooKeeper 之前先来给大 ...
- 【分布式】Zookeeper在大型分布式系统中的应用
一.前言 上一篇博文讲解了Zookeeper的典型应用场景,在大数据时代,各种分布式系统层出不穷,其中,有很多系统都直接或间接使用了Zookeeper,用来解决诸如配置管理.分布式通知/协调.集群管理 ...
- zookeeper系列之六—zookeeper之应用
http://www.cnblogs.com/sharpxiajun/archive/2013/06/02/3113923.html Zookeeper是hadoop的一个子项目,虽然源自hadoop ...
- ZooKeeper系列(1):安装搭建ZooKeeper环境
ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk ZooKeeper有三种安装模式:单机安装(standalone ...
- ZooKeeper系列(2):ZooKeeper命令行工具zkCli.sh
ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk 1.简介 ZooKeeper提供了一个非常简单的命令行客户端zk ...
- ZooKeeper系列(3):znode说明和znode状态
ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk 1.znode znode的官方说明:http://zookee ...
- ZooKeeper系列(4):ZooKeeper的配置文件详解
ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk zkServer.sh读取的默认配置文件是$ZOOKEEPER_ ...
随机推荐
- css设置一行显示,超出部分显示...
碰到一些介绍时候需要一行显示,然后超出部分用...替代 white-space: nowrap;不换行显示text-overflow: ellipsis;以...显示overflow: hidden; ...
- AngularJS实现原理
个人觉得,要很好的理解AngularJS的运行机制,才能尽可能避免掉到坑里面去.在这篇文章中,我将根据网上的资料和自己的理解对AngularJS的在启动后,每一步都做了些什么,做一个比较清楚详细的解析 ...
- Apache服务器运维笔记(4)----服务器扩展部分
在Apache的默认配置文件夹中有一个 extra 目录,这个目录是用来存放 Apache 其他模块的配置文件的.这些文件是 Apache 针对常用的模块而设置并提供的,它们都是通过 Include ...
- arcgis silverlight api Query接口
Query.text 是 根据发布图层的 Display Field 字段进行模糊查询的 Query.where 是输入查询语句的 如果要进行模糊查询where = F_AREA like'12312 ...
- javascript 同源策略及web安全
同源策略为什么而生? JS可以读取/修改网页的值. 一个浏览器中,打开一个银行网站和一个恶意网站,如果恶意网站能够对银行网站进行修改,那么就会很危险. 你打开了恶意网站和另一个网站,如果没有同源限制, ...
- SQL Server ->>监控和管理Tempdb
Tempdb作为一个公共数据库,存储着一些临时的数据.有些是用户自己创建的,有些是SQL Server自己创建的.Tempdb空间被使用的一些常见场景有 用户自定义:临时表和表变量.游标. SQL S ...
- 【Leetcode】【Medium】Construct Binary Tree from Inorder and Postorder Traversal
Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- February 12 2017 Week 7 Sunday
There is no place like home. 任何地方都不能与家相提并论. After tens of years roving outside the hometown, I sudde ...
- 【pbrt】在c++程序中使用pbrt进行渲染
近段时间做一个关于水面的动画.由于我用c++实现水面动画的,然而使用c++我自己的渲染系统渲染结果被同学说是可视化不叫渲染,所以我决定修改一下…… 恰好进来在学习pbrt,所以索性就蛋疼了考虑直接用p ...
- Steeltoe
谈谈Circuit Breaker在.NET Core中的简单应用 http://www.cnblogs.com/catcher1994/p/8975192.html 前言 由于微服务的盛行,不少公司 ...