1 集群配置管理

应用服务器的配置通常会放到properties文件中,格式为:

system1.module2.prop3=value4

然后启动的时候加载,这样带来的问题是启动后无法修改,想修改必须要重启应用服务器;

  • 一个简单的替代方式是存放到数据库中,应用服务器每次从数据库中加载配置,这样带来的问题是由于数据库是一种昂贵的资源从而降低性能;
  • 一个简单的改进方式是存放到数据库中后再存放到缓存中,应用服务器每次从缓存中加载配置,这时要解决的问题是数据库和缓存的数据一致性问题,缓存的可靠性问题,而且会增加相当多的网络IO(缓存读操作);
  • 一个简单的改进方式是应用服务器在本地也存一份配置,每次从缓存中加载配置或者定时从缓存中加载配置,缓存读超时则使用本地配置;

回过头来看,配置的名字是一个标准的树形结构,可以直接将所有配置以及值放到zookeeper中,

/config/system1/module2/prop3=value4

由于zookeeper将所有的数据存放在内存中,所以读操作非常快,应用服务器启动之后从zookeeper中将所有配置存储到本地一份,另外利用zookeeper的watcher,当配置修改之后所有的应用服务器都可以收到通知,同步修改本地配置即可,这样达到的效果是如果配置没有更新(极大概率事件),则所有的配置读取都是本地操作(没有网络io);如果配置有更新(极小概率事件),所有的应用服务器都可以及时收到通知并更新本地;

2 服务器分组及动态更新

在大规模集群中通常有很多类型角色的服务器,这时会将服务器按照类型角色进行分组,然后可以动态监控组内服务器的变更,然后做进一步处理;

比如在Dubbo中会将producer服务器分组,当producer服务器有变更时consumer端会及时收到更新方便做balance,这样实现producer服务器动态增减以及自动发现;

比如在Kafka中会将consumer服务器分组,当consumer服务器有变更时也会触发rebalance;

另外还可以用来对组内服务器的存活进行监控报警;

3 Master主备

众多的开源软件中比如Hadoop(HDFS、YARN)、HBase、Spark Standalone、Oozie等,都是通过zookeeper来实现master的HA,实现主从切换;

比如:

/hadoop-ha/$hdfs_name/ActiveStandbyElectorLock

/yarn-leader-election/$yarn_name/ActiveStandbyElectorLock

/hbase/master

4 分布式锁

分布式环境中有时需要在服务器之间进行协调,比如一个任务只允许在集群中的一台服务器运行等,常用的方法是利用数据库锁,这里分为乐观锁和悲观锁两种实现;

比如Quartz的分布式部署,就是利用数据库锁;

使用数据库锁有一些问题,1 数据库资源昂贵,而且有并发数限制,悲观锁会直接占用连接数,乐观锁可能由于数据库连接池满导致锁释放,悲观锁可能由于数据库连接池满导致卡住;2 数据库连接有超时时间限制;

利用zookeeper的Ephemeral Node+Sequence Node+watch可以很方便的实现分布式锁,Sequence Node可以保证只有一个节点能拿到锁,Ephemeral Node+watch可以保证一旦锁的持有者挂掉,其他等待锁的节点可以马上收到通知,同时再利用Sequence Node保证下一个节点能拿到锁;

【原创】大数据基础之Zookeeper(4)应用场景的更多相关文章

  1. 【原创】大数据基础之Zookeeper(2)源代码解析

    核心枚举 public enum ServerState { LOOKING, FOLLOWING, LEADING, OBSERVING; } zookeeper服务器状态:刚启动LOOKING,f ...

  2. 【原创】大数据基础之Zookeeper(1)介绍、安装及使用

    zookeeper3.4.11 http://zookeeper.apache.org/ 一 简介 ZooKeeper is a centralized service for maintaining ...

  3. 【原创】大数据基础之Zookeeper(3)选举算法

    提到zookeeper选举算法,就不得不提Paxos算法,因为zookeeper选举算法是Paxos算法的一个变种: Paxos要解决的问题是:在一个分布式网络环境中有众多的参与者,但是每个参与者都不 ...

  4. 决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试

    决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试 [TOC] Apache ZooKeeper 单机模式安装 创建hadoop用户&赋予sudo权限, ...

  5. 大数据篇:Zookeeper

    Zookeeper 1 Zookeeper概念 Zookeeper是什么 是一个基于观察者设计模式的分布式服务管理框架,它负责和管理需要关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Z ...

  6. 【原创】大数据基础之Impala(1)简介、安装、使用

    impala2.12 官方:http://impala.apache.org/ 一 简介 Apache Impala is the open source, native analytic datab ...

  7. 【原创】大数据基础之词频统计Word Count

    对文件进行词频统计,是一个大数据领域的hello word级别的应用,来看下实现有多简单: 1 Linux单机处理 egrep -o "\b[[:alpha:]]+\b" test ...

  8. 【原创】大数据基础之Benchmark(2)TPC-DS

    tpc 官方:http://www.tpc.org/ 一 简介 The TPC is a non-profit corporation founded to define transaction pr ...

  9. 大数据平台搭建-zookeeper集群的搭建

    本系列文章主要阐述大数据计算平台相关框架的搭建,包括如下内容: 基础环境安装 zookeeper集群的搭建 kafka集群的搭建 hadoop/hbase集群的搭建 spark集群的搭建 flink集 ...

随机推荐

  1. JShell脚本工具

    JShell脚本工具是JDK9的新特性 什么时候会用到 JShell 工具呢,当我们编写的代码非常少的时候,而又不愿意编写类,main方法,也不愿意去编译和运行,这个时候可以使用JShell工具.启动 ...

  2. 软件工程(FZU2015) 赛季得分榜,第四回合

    SE_FZU目录:1 2 3 4 5 6 7 8 9 10 11 12 13 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分=团队得分+个人贡献分 个人贡献分: 个人 ...

  3. Oracle SQLULDR2 以及 SQLLDR 进行导入导出的功能说明

    Study From http://blog.itpub.net/28291944/viewspace-2142187/ 自己尝试了下 可以实现. 下载完sqluldr2,文件夹内容如下:sqluld ...

  4. linux中去掉^M的方法

    转:https://blog.csdn.net/sty945/article/details/80347901 (1)是用VI的命令: 在命令模式下运行命令 :%s/^M//g 回车 注意:手动输入该 ...

  5. 有关swiper动态改变数据遇到的坑(不能自动滚动,自动跟新数据,切换不正常)

    以前都觉得swiper的使用很简单,那是因为使用swiper时都是写的数据,按照官网上介绍直接初始化swiper,随便丢一个地方初始化就ok了,但是在很多需求中,我们都需要动态的改变数据,这样可能就会 ...

  6. Git让你从入门到精通,看这一篇就够了

    简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...

  7. 洛谷 P1064 金明的预算方案 (有依赖的0/1背包)

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...

  8. request param 获取

    通过request对象获取客户端请求信息 getRequestURL方法返回客户端发出请求时的完整URL. getRequestURI方法返回请求行中的资源名部分. getQueryString 方法 ...

  9. python 第一课 helloworld

    #!/usr/bin/env python #-*-coding:utf-8-*- #以上是配置编写环境的开始 #第一行env表示运行当前环境变量内的python版本(2.x or 3.x) #第二行 ...

  10. tensorflow Method源码阅读之 fully_connected

    https://www.tensorflow.org/api_docs/python/tf/contrib/layers/fully_connected fully_connected: 1.先根据权 ...