java集群_JAVA架构师学习:实践ZooKeeper 应用场景与集群管理,辛勤总结
ZooKeeper 典型的应用场景
Zookeeper 从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应,从而实现集群中类似 Master/Slave 管理模式,关于 Zookeeper 的详细架构等内部细节可以阅读 Zookeeper 的源码
下面详细介绍这些典型的应用场景,也就是 Zookeeper 到底能帮我们解决那些问题?下面将给出答案。
统一命名服务(Name Service)
分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于人识别和记住,通常情况下用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构,既对人友好又不会重复。说到这里你可能想到了 JNDI,没错 Zookeeper 的 Name Service 与 JNDI 能够完成的功能是差不多的,它们都是将有层次的目录结构关联到一定资源上,但是 Zookeeper 的 Name Service 更加是广泛意义上的关联,也许你并不需要将名称关联到特定资源上,你可能只需要一个不会重复名称,就像数据库中产生一个唯一的数字主键一样。
Name Service 已经是 Zookeeper 内置的功能,你只要调用 Zookeeper 的 API 就能实现。如调用 create 接口就可以很容易创建一个目录节点。
配置管理(Configuration Management)
配置的管理在分布式应用环境中很常见,例如同一个应用系统需要多台 PC Server 运行,但是它们运行的应用系统的某些配置项是相同的,如果要修改这些相同的配置项,那么就必须同时修改每台运行这个应用系统的 PC Server,这样非常麻烦而且容易出错。
像这样的配置信息完全可以交给 Zookeeper 来管理,将配置信息保存在 Zookeeper 的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中。
配置管理结构图
集群管理(Group Membership)
Zookeeper 能够很容易的实现集群管理的功能,如有多台 Server 组成一个服务集群,那么必须要一个“总管”知道当前集群中每台机器的服务状态,一旦有机器不能提供服务,集群中其它集群必须知道,从而做出调整重新分配服务策略。同样当增加集群的服务能力时,就会增加一台或多台 Server,同样也必须让“总管”知道。
Zookeeper 不仅能够帮你维护当前的集群中机器的服务状态,而且能够帮你选出一个“总管”,让这个总管来管理集群,这就是 Zookeeper 的另一个功能 Leader Election。
它们的实现方式都是在 Zookeeper 上创建一个 EPHEMERAL 类型的目录节点,然后每个 Server 在它们创建目录节点的父目录节点上调用
getChildren(String path, boolean watch)
方法并设置 watch 为 true,由于是 EPHEMERAL 目录节点,当创建它的 Server 死去,这个目录节点也随之被删除,所以 Children 将会变化,这时
getChildren
上的 Watch 将会被调用,所以其它 Server 就知道已经有某台 Server 死去了。新增 Server 也是同样的原理。
Zookeeper 如何实现 Leader Election,也就是选出一个 Master Server。和前面的一样每台 Server 创建一个 EPHEMERAL 目录节点,不同的是它还是一个 SEQUENTIAL 目录节点,所以它是个 EPHEMERAL_SEQUENTIAL 目录节点。之所以它是 EPHEMERAL_SEQUENTIAL 目录节点,是因为我们可以给每台 Server 编号,我们可以选择当前是最小编号的 Server 为 Master,假如这个最小编号的 Server 死去,由于是 EPHEMERAL 节点,死去的 Server 对应的节点也被删除,所以当前的节点列表中又出现一个最小编号的节点,我们就选择这个节点为当前 Master。这样就实现了动态选择 Master,避免了传统意义上单 Master 容易出现单点故障的问题。
集群管理结构图
这部分的示例代码如下,完整的代码请看附件:
清单 3. Leader Election 关键代码
void findLeader() throws InterruptedException {
byte[] leader = null;
try {
leader = zk.getData(root + "/leader
java集群_JAVA架构师学习:实践ZooKeeper 应用场景与集群管理,辛勤总结相关推荐
- java web 图灵_java架构师学习路线-Web架构的理解
图灵学院 java架构师学习路线-Web架构的理解 Web体系结构可以理解为具有三种,一种是仅JSP页面,即所有逻辑,业务处理和页面代码都在JSP上.在执行简单而无关紧要的程序时可以使用此方法.它速 ...
- java 心跳框架_java架构师学习路线-如何使用Netty实现心跳检测
心跳检测是Socket通信经常使用的保证网络连接正常的技术.那么如何实现心跳检测呢?图灵学院今天着重来为大家介绍一下如何使用Netty实现心跳检测. 1.新建java工程,并导入netty使用的jar ...
- java从小白到架构师学习路线
前言 "学习真的是一个循序渐进的过程,也是一件需要坚持的事情.对于这篇文章,不同阶段的人可能有不同的理解,所以我花了几天的时间整理了一套学习路线提供给大家,以供参考.下面的这个学习路线适合刚 ...
- 【Java从0到架构师(2),Java面试问题
新建一个核心配置文件:applicationContext.xml <?xml version="1.0" encoding="UTF-8"?>&l ...
- 【Java从0到架构师】Dubbo 基础 - 设置启动时检查、直接提供者、线程模型、负载均衡、集群容错、服务降级
Dubbo 分布式 RPC 分布式核心基础 分布式概述 RPC Dubbo Dubbo 入门程序 - XML.注解 部署管理控制台 Dubbo Admin 修改绑定的注册 IP 地址 设置启动时检查 ...
- Java 架构师学习路线
Java 架构师学习路线 一. 框架源码专题 1. 应用框架Spring 1.1. Spring IOC源码剖析 1.2. Spring AOP 源码剖析 1.3. Spring MVC 源码剖析 1 ...
- Java架构师学习路线图
1架构师是什么? 要想往架构师的方向发展首先要知道架构师是什么? 架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物. 一个架构师得需要足够的想像力,能把各种 ...
- 阿里架构师耗时一个月整理的《java架构师学习路线》太全了
很多新手和一些老程序员在学习java的时候都比较迷茫,不知道从哪里开始学起,这里就给大家整理了一份java开发和项目学习路线,比较系统全面,可参考这份大纲来安排学习计划,希望可以帮到你~ 2022年最 ...
- java培训分享:java培训架构师学习线路图
本期java教程分享主要是讲解关于java培训架构师方面的内容,主要针对java架构师的学习线路图进行一个知识点的概括,下面来看看学习java架构师都需要了解哪些内容吧. java培训分享:java培 ...
最新文章
- 创业公司如何做数据分析(一)开篇
- 推荐五星级C语言学习网站
- 进度管理计划7个过程及相关重点
- x79主板bios设置中文_bios菜单
- python购物车典例_Python入门:购物车实例
- 数据的表示方法和运算方法
- Linux系统调用getuid的简单分析
- STM32系统结构图理解及GPIO学习笔记
- 关于php的梗儿_抖音上的梗,你知道哪些?
- Android 超级轻量的版本更新库AppUpdate
- android关于消防栓的正确使用
- 中国人民大学计算机拟录取,2016年中国人民大学信息学院硕士研究生拟录取名单...
- 计算机组装室标语,TheShy的座位这么真实?电脑上的标语吸睛,网友看后笑出声...
- android 8.0 ps 命令,全网最全adb命令 - osc_8exjk9uk的个人空间 - OSCHINA - 中文开源技术交流社区...
- 若依框架免密登录(仅做参考)
- java公社博客_Java
- springboot controller 中新建一个控制器类 提示该类从未被使用
- 易百教程wxpython_wxPython+opencv 打造自己的画图板
- 响应式实例-兰途科技(jq)
- 智慧农场、智慧农业管理系统、农作物、农技指导、四防棚、农耕、种植、农事执行、地块、圈地、加热温室、圈养、生产、采收记录、采收计划、采收入库、销售、农资溯源记录、农场日志、axure原型、产品原型、rp
热门文章
- php 单利模式实例化,php-单例模式实现mysql实例化对象
- 160个Crackme015
- android开发关于和使用本机内存,内置存储卡和外置存储卡大揭秘
- 【Let‘s Encrypt】 too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limit
- 【AC Saber】二分
- 【PAT乙级】1086 就不告诉你 (15 分)
- Spring boot的Bean使用JSR 303校验
- Java集合LinkedList
- Mybatis的selectKey使用
- JavaScript教程之事件处理