`

zookeeper适用场景:zookeeper解决了哪些问题

    博客分类:
  • java
 
阅读更多
问题导读:
1.master挂机,传统做法备份必然是以前数据,该如何保证挂机数据与备份数据一致?
2.分布式系统如何实现对同一资源的访问,保证数据的强一致性?
3.集群中的worker挂了,传统做法是什么?zookeeper又是如何做的?



分布式系统的运行是很复杂的,因为涉及到了网络通信还有节点失效等不可控的情况。下面介绍在最传统的master-workers模型,主要可以会遇到什么问题,传统方法是怎么解决以及怎么用zookeeper解决。

Master节点管理
集群当中最重要的是Master,所以一般都会设置一台Master的Backup。

Backup会定期向Master获取Meta信息并且检测Master的存活性,一旦Master挂了,Backup立马启动,接替Master的工作自己成为Master,分布式的情况多种多样,因为涉及到了网络通信的抖动,针对下面的情况:

    Backup检测Master存活性传统的就是定期发包,一旦一定时间段内没有收到响应就判定Master Down了,于是Backup就启动,如果Master其实是没有down,Backup收不到响应或者收到响应延迟的原因是因为网络阻塞的问题呢?Backup也启动了,这时候集群里就有了两个Master,很有可能部分workers汇报给Master,另一部分workers汇报给后来启动的Backup,这下子服务就全乱了。
    Backup是定期同步Master中的meta信息,所以总是滞后的,一旦Master挂了,Backup的信息必然是老的,很有可能会影响集群运行状态。

解决问题:

    Master节点高可用,并且保证唯一。
    Meta信息的及时同步


zookeeper Master选举

zookeeper会分配给注册到它上面的客户端一个编号,并且zk自己会保证这个编号的唯一性和递增性,N多机器中只需选出编号最小的Client作为Master就行,并且保证这些机器的都维护一个一样的meta信息视图,一旦Master挂了,那么这N机器中编号最小的胜任Master,Meta信息是一致的。

配置文件管理

集群中配置文件的更新和同步是很频繁的,传统的配置文件分发都是需要把配置文件数据分发到每台worker上,然后进行worker的reload,这种方式是最笨的方式,结构很难维护,因为如果集群当中有可能很多种应用的配置文件要同步,而且效率很低,集群规模一大负载很高。还有一种就是每次更新把配置文件单独保存到一个数据库里面,然后worker端定期pull数据,这种方式就是数据及时性得不到同步。

解决问题:

    统一配置文件分发并且及时让worker生效


zookeeper发布与订阅模型
发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。

分布式锁

在一台机器上要多个进程或者多个线程操作同一资源比较简单,因为可以有大量的状态信息或者日志信息提供保证,比如两个A和B进程同时写一个文件,加锁就可以实现。但是分布式系统怎么办?需要一个三方的分配锁的机制,几百台worker都对同一个网络中的文件写操作,怎么协同?还有怎么保证高效的运行?
解决问题:

    高效分布式的分布式锁


zookeeper分布式锁

分布式锁主要得益于ZooKeeper为我们保证了数据的强一致性,zookeeper的znode节点创建的唯一性和递增性能保证所有来抢锁的worker的原子性。

集群worker管理

集群中的worker挂了是很可能的,一旦workerA挂了,如果存在其余的workers互相之间需要通信,那么workers必须尽快更新自己的hosts列表,把挂了的worker剔除,从而不在和它通信,而Master要做的是把挂了worker上的作业调度到其他的worker上。同样的,这台worker重新恢复正常了,要通知其他的workers更新hosts列表。传统的作法都是有专门的监控系统,通过不断去发心跳包(比如ping)来发现worker是否alive,缺陷就是及时性问题,不能应用于在线率要求较高的场景
解决问题:

    集群worker监控


zookeeper监控集群

利用zookeeper建立znode的强一致性,可以用于那种对集群中机器状态,机器在线率有较高要求的场景,能够快速对集群中机器变化作出响应。
分享到:
评论

相关推荐

    apache-ZooKeeper-3.7.1-bin

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件...ZooKeeper是一个强大且灵活的分布式协调服务,适用于大规模分布式系统的场景。

    ZooKeeper-分布式过程协同技术详解

    前言1 第一部分ZooKeeper的概念和基础 第1章简介7 1.1ZooKeeper的使命8 1.1.1ZooKeeper改变了什么10 1.1.2ZooKeeper不适用的场景10 · · · · · ·

    ElasticJob分布式调度解决方案.rar

    它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意...

    基于SpringBoot的银行二维码交易处理系统设计与实现

    基于分布式设计思想, 采用Dubbo框架将二维码支付的业务处理划分为多个服务注册在Zookeeper集群上, 由网关模块作为服务的消费者通过远程方法调用获取相应交易的服务。联机模块的业 务处理采用控制层,业务逻辑处理...

    CentOS下Hadoop+Hbase+ZooKeeper分布式存储部署详解

    前言:Hadoop是Apache开源组织的一个分布式计算开源框架,在很多大型网站上都已经得到了应用,如亚马逊...服务集成平台的日志量将会很大,而这也正好符合了分布式计算的适用场景(日志分析和索引建立就是两大应用场景)

    互联网公司Java面试题及核心知识点

    无论你是要开发高性能的服务器端应用、分布式系统,还是要优化现有系统的并发性能,本资源都将为你提供实用的方法和技巧,帮助你解决常见的并发编程问题,提高系统的并发处理能力。 其他说明:本资源注重理论与实践...

    从传统的 SSM 项目改造成基于 Spring Boot + Dubbo + Zookeeper 的微服务架构项目

    三、适用人群与场景 无论您是初学者还是资深开发者,无论您是在校学生还是职场人士,本系列资料都将是您学习SSM的得力助手。适用于Java Web开发、企业级应用开发、个人项目实践等多个领域。 四、使用建议 系统...

    基于flink-cdc实现监控数据源的实时变更数据捕获

    该文从基础定义、使用场景、分析、实际使用流程、源码分析、常见问题及解决方式等几个方向讲解了这个技术栈。如果公司有要使用搜索方案,涉及到业务库数据同步至搜索库的业务需求可以下载看一下,相信对你会有一些...

    微服务注册中心Eureka架构深入解读

    两者之所以推荐不同的实现方式,原因在于组件的特点以及适用场景不同。简单来说:ZK的设计原则是CP,即强一致性和分区容错性。他保证数据的强一致性,但舍弃了可用性,如果出现网络问题可能会影响ZK的

    java流程自动化工具

    四、模拟操作:接口调试,数据模拟,功能自测等等,适用于测试场景。 五、自动检测:基于流程循环,实现主动触发、检测、控制的需求场景,如服务器性能检测,应用存活检测,循环扫描操作等。 六、数据处理:如开发...

    四家二线大厂面经.pdf

    能说下 Redis 基本的数据结构以及 适用场景吗? 5、Redis 和 Zookeeper 分别是如何实现分布式锁的?优缺点各是什么? 6、目前线上业务的 Redis 使用了什么部署架构?了解哨兵是如何保证 Redis 高可用的吗?知道哨兵...

    java面试笔试资料包括JAVA基础核心知识点深度学习Spring面试题等资料合集.zip

    svn和git的区别及适用场景.doc ZooKeeper.doc 为什么分布式一定要有Redis.doc 分布式、高并发、多线程,到底有什么区别.doc 分布式事务.doc 四款消息队列大比拼.docx 多台web服务器之间共享session.docx 消息中间件...

    ElasticJob分布式调度解决方案-其他

    它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意...

    AC#Kafka驱动程序_C#_下载

    它特别适用于应用程序跨大量主题流式传输大量消息的场景。\n特征\n完全异步批量生产者\n简单的基于异步事件的消费者\n消费群体支持\n没有 Zookeeper 依赖\n压缩支持(Gzip 和 Snappy)\n高可配置性\n内存友好的 API ...

    百度地图毕业设计源码-seckill:秒杀系统改进

    JDK1.7、Maven、Mysql、Eclipse、SpringBoot1.5.10、zookeeper3.4.6、kafka_2.11、redis-2.8.4、curator-2.10.0 启动说明 启动前 请配置 application.properties 中相关redis、zk以及kafka相关地址,建议在Linux下...

    百度地图毕业设计源码-spring-boot-seckill:spring-boot-秒杀

    JDK1.7、Maven、Mysql、Eclipse、SpringBoot1.5.10、zookeeper3.4.6、kafka_2.11、redis-2.8.4、curator-2.10.0 启动说明 启动前 请配置 application.properties 中相关redis、zk以及kafka相关地址,建议在Linux下...

    大数据与人工智能-fy.docx

    比较适用于计数场景 C.所有数据都在内存中,高速读写 D.支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型) 答案解析:使用开源C语言编写 10...

    百度地图毕业设计源码-seckill:秒杀

    JDK1.7、Maven、Mysql、Eclipse、SpringBoot1.5.10、zookeeper3.4.6、kafka_2.11、redis-2.8.4、curator-2.10.0 启动说明 启动前 请配置 application.properties 中相关redis、zk以及kafka相关地址,建议在Linux下...

    百度地图毕业设计源码-spring-boot-seckill-copy:spring-boot-seckill-copy

    JDK1.7、Maven、Mysql、Eclipse、SpringBoot1.5.10、zookeeper3.4.6、kafka_2.11、redis-2.8.4、curator-2.10.0 启动说明 启动前 请配置 application.properties 中相关redis、zk以及kafka相关地址,建议在Linux下...

Global site tag (gtag.js) - Google Analytics