zookeeper(三) 应用场景
来源:互联网 发布:js发post请求 ajax 编辑:程序博客网 时间:2024/06/05 13:22
ZooKeeper的应用领域(命名服务,配置管理,状态同步,组关系管理)
Tim在blog中提到了Paxos所能应用的几个主要场景,包括database replication、naming service、config配置管理、access control list等等,这也是ZooKeeper可以应用的几个主要场景。此外, ZooKeeper官方文档中提到了几个更为基础的分布式应用,这也算是ZooKeeper的妙用吧
一、统一命名服务(Name Service)
分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于人识别和记住,通常情况下用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构,既对人友好又不会重复。说到这里你可能想到了 JNDI,没错 Zookeeper 的 Name Service 与 JNDI 能够完成的功能是差不多的,它们都是将有层次的目录结构关联到一定资源上,但是 Zookeeper 的 Name Service 更加是广泛意义上的关联,也许你并不需要将名称关联到特定资源上,你可能只需要一个不会重复名称,就像数据库中产生一个唯一的数字主键一样。
Name Service 已经是 Zookeeper 内置的功能,你只要调用 Zookeeper 的 API 就能实现。如调用 create 接口就可以很容易创建一个目录节点。
二、配置管理(Configuration Management)
(1)公用配置参数场景
配置的管理在分布式应用环境中很常见,例如同一个应用系统需要多台 PC Server 运行,但是它们运行的应用系统的某些配置项是相同的,如果要修改这些相同的配置项,那么就必须同时修改每台运行这个应用系统的 PC Server,这样非常麻烦而且容易出错。
像这样的配置信息完全可以交给 Zookeeper 来管理,将配置信息保存在 Zookeeper 的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中。
图 . 配置管理结构图
(2)动态服务器列表案例:
场景描述:
在分布式应用中, 我们经常同时启动多个server, 调用方(client)选择其中之一发起请求.
分布式应用必须考虑高可用性和可扩展性: server的应用进程可能会崩溃, 或者server本身也可能会宕机. 当server不够时, 也有可能增加server的数量. 总而言之, server列表并非一成不变, 而是一直处于动态的增减中.
那么client如何才能实时的更新server列表呢? 解决的方案很多, 本文将讲述利用ZooKeeper的解决方案.
启动server时, 在zookeeper的某个znode(假设为/sgroup)下创建一个子节点. 所创建的子节点的类型应该为ephemeral, 这样一来, 如果server进程崩溃, 或者server宕机, 与zookeeper连接的session就结束了, 那么其所创建的子节点会被zookeeper自动删除. 当崩溃的server恢复后, 或者新增server时, 同样需要在/sgroup节点下创建新的子节点.
对于client, 只需注册/sgroup子节点的监听, 当/sgroup下的子节点增加或减少时, zookeeper会通知client, 此时client更新server列表.
AppServer的逻辑非常简单, 只须在启动时, 在zookeeper的"/sgroup"节点下新增一个子节点即可.
AppClient的逻辑比AppServer稍微复杂一些, 需要监听”/sgroup”下子节点的变化事件, 当事件发生时, 需要更新server列表.
- zookeeper(三) 应用场景
- zookeeper应用场景练习(分布式锁)
- ZooKeeper典型应用场景
- ZooKeeper典型应用场景
- ZooKeeper典型应用场景
- zookeeper应用场景
- ZooKeeper典型应用场景
- Zookeeper的应用场景
- ZooKeeper应用场景-配置管理
- ZooKeeper应用场景介绍
- zookeeper应用场景
- Zookeeper应用场景
- Zookeeper应用场景
- Zookeeper应用场景
- zookeeper应用场景!
- zookeeper应用场景
- zookeeper应用场景
- zookeeper应用场景
- FOJ Problem 1062 洗牌问题
- 日期date型 与string型简单汇总:
- C#中static类型的变量和方法
- OJ 系列之24点游戏算法
- iOS真机调试时“process launch failed: timed out waiting for app to launch”问题
- zookeeper(三) 应用场景
- makefile "="和“:=”的区别
- Windows Embedded Compact 实时调度介绍
- 提交带有html标签文本时,ASP.NET 报错解决方法
- Genymotion模拟器 Unable to create virtual devicec:Server returned HTTP satus code 0 错误解决
- jQuery.validator 参数使用javascript方式调用属性
- ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
- 初学hadoop2.7.1(三)第一个hadoop应用开发
- Android开发记录20-获取缓存大小和清除缓存功能