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. Abp vNext 切换MySql数据库

    Abp vNext是Abp的下一代版本,目前还在经一步完善,代码已经全部重写了,好的东西保留了下来,去除了很多笨重的东西,从官宣来看,Abp vNext主要是为了以后微服务架构而诞生的. 从源码来看, ...

  2. 几种c++字符串split 函数实现的比较

    文中的字符串split函数功能是 从字符串中按照特定的分隔符进行分割,分割的结果保存到std::vector中. 1. strtok实现 std::vector<std::string> ...

  3. Steps to One DP+莫比乌斯反演

    卧槽,这么秀吗??? 暂时留坑...

  4. springboot 学习进度

    1 hello world --------------ok 主启动程序必须在层次结构的最上面. 2 配置 3.日志 4.Web开发 1)SpringBoot集成JSP的方法 配置applicatio ...

  5. Kubernetes — 深入解析Pod对象:基本概念(一)

    在上一篇文章中,我详细介绍了 Pod 这个 Kubernetes 项目中最重要的概念. 现在,你已经非常清楚:Pod,而不是容器,才是 Kubernetes 项目中的最小编排单位.将这个设计落实到 A ...

  6. Kubernetes — 作业副本与水平扩展

    Deployment 看似简单,但实际上,它实现了 Kubernetes 项目中一个非常重要的功能:Pod 的“水平扩展 / 收缩”(horizontal scaling out/in). 这个功能, ...

  7. 23个Python爬虫开源项目代码,让你一次学个够

    今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [1]– 微信公众号 ...

  8. poj2778(AC自动机+矩阵快速幂)

    题意:给你n个字符串,问你长度为m的字符串且字符串中不含有那n个子串的字符串的数量 解题思路:这道题一开始就不太懂,还以为是组合数学的题目,后面看了别人的博客,才知道这是属于AC自动机的另一种用法,是 ...

  9. Sumdiv POJ 1845

    http://poj.org/problem?id=1845 题目 Time Limit: 1000MS   Memory Limit: 30000K Description Consider two ...

  10. python之路day01--变量

    一.变量 变量就是将一些运算的中间结果暂存到内存中,以便后续代码块调用. 规范: 1.必须由数字.字母.下划线任意组合,且不能数字开头. 2.不能是python中的关键字.如:‘print’ 'and ...