zookeeper原理

分布式锁专题

那年仲夏 提交于 2020-03-02 14:26:10
分布式锁 如果你觉得我写的不错, 或者想和我多交流, 就扫一扫关注我吧, 本人公众号: stormling 1. 什么是分布式锁 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在 分布式系统 中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证 一致性 ,在这种情况下,便需要使用到分布式锁。 2. 为什么要使用分布式锁 为了保证一个方法或属性在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLock或Synchronized)进行互斥控制。在单机环境中,Java中提供了很多并发处理相关的API。但是,随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的Java API并不能提供分布式锁的能力。为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题! 举个例子: 机器A , 机器B是一个集群, A, B两台机器上的程序都是一样的, 具备高可用性能. A, B机器都有一个定时任务, 每天晚上凌晨2点需要执行一个定时任务,

zookeeper分布式锁实现原理

落爺英雄遲暮 提交于 2020-03-02 04:40:38
文章转载自 https://blog.csdn.net/koflance/article/details/78616206 1、互斥锁mutex lock 顾名思义就是排它锁,同一时间只允许一个客户端执行。 实现步骤: 首先,创建一个lock node,例如“ locknode ” 其次,客户端lock执行以下方式: 创建(create)一个有序临时节点,例如“ locknode /guid-lock-”,其中guid可以是你客户端的唯一识别序号,如果发生前面说的创建失败问题,需要使用guid进行手动检查。 调用getChildren(watch=false)获取获取子节点列表,注意wtach设置为false,以避免羊群效应(Herd Effect),即同时收到太多无效节点删除通知。 从这个列表中,判断自己创建的节点 序号是否是最小 ,如果是则直接返回true,否则继续往下走。 从步骤2中获取的list中选取排在当前节点前一位的节点,调用exist(watch=true)方法。 如果exist返回false,则回到步骤2; 如果exist返回true,则等待exist的哨兵(watch)回调通知,收到通知后再执行步骤2. 最后,客户端unlock只需要调用delete删除掉节点即可。 节点操作示意图: 流程图: 优点 : 避免了轮询和超时控制 每次一个子节点的删除动作

Zookeeper学习系列【二】Zookeeper 集群章节之集群搭建

我们两清 提交于 2020-03-01 13:45:14
转载 https://segmentfault.com/a/1190000019153491 java zookeeper 更新于 2019-10-15 约 9 分钟 前言 同道们,好久不见,上一章中,我主要讲了Zookeeper的一些基础的知识点。数据模型 + 原语集 + Watches机制。本章内容主要讲的是集群搭建相关的知识。 本篇的内容主要包含以下几点: Zookeeper 运行模式 Zookeeper 搭建 一、Zookeeper 运行模式 Zookeeper 有两种运行模式,单点模式和集群模式。 单点模式(standalone mode)- Zookeeper 只运行在单个服务器上,常用于开发测试阶段,这种模式比较简单,但是不能保证Zookeeper服务的<font color= 'red'>高可用性</font>和<font color= 'red'>恢复性</font>。 集群模式(replicated mode)- 英文原文这种模式叫做“复制模式”;这个模式下,Zookeeper运行于一个集群上,适合生产环境。 同一个集群下的server节点被称为 quorum ,翻译过来就是“一个正式会议的法定人数”,如果你看完下一章介绍的ZAB协议的两种模式之后,应该会觉得这个比喻实际上很形象。 NOTE: 在集群模式下,最少需要三个server节点

zookeeper 负载均衡

我是研究僧i 提交于 2020-02-29 05:40:53
1,原理 将启动的服务注册到zookeeper 注册中心上面,采用临时节点,zookeeper 客户端从注册中心上读取服务的信息,之后再本地采用负载均衡算法(取模算法),将请求轮询到每个服务。 同时zookeeper 客户端有监听节点的功能,当临时节点的服务中断之后,更新注册中心上的服务的信息。将终端的节点信息给剔除。保证轮询的正确执行。 来源: https://www.cnblogs.com/pickKnow/p/11337966.html

Kafka原理及Kafka群集部署

五迷三道 提交于 2020-02-29 00:48:27
博文大纲: 一、Kafka概述 1)消息队列 2)为什么要使用消息队列? 3)什么是Kafka? 4)Kafka的特性 5)Kafka架构 6)Topic和Partition的区别 7)kafka流程图 8)Kafka的文件存储机制 9)数据的可靠性和持久性保证 10)leader选举 二、部署单机Kafka 1)部署Kafka 2)测试Kafka 三、部署Kafka群集 1)环境准备 2)部署zookeeper群集 3)部署Kafka群集 一、Kafka概述 1)消息队列 1)点对点模式 (一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此; 2)发布/订阅模式 (一对多,数据生产后,推送给所有订阅者) 发布订阅模型则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即使当前订阅者不可用,处于离线状态。 2)为什么要使用消息队列? 1)解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 2)冗余 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险

Zookeeper

拜拜、爱过 提交于 2020-02-27 02:20:49
157.zookeeper 是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户 zookeeper=文件系统+监听通知机制 原理概述   Zookeeper的核心是原子广播机制,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是 恢复模式 和 广播模式 。 (1) 恢复模式   当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。 (2) 广播模式   一旦Leader已经和多数的Follower进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个Server加入ZooKeeper服务中,它会在恢复模式下启动,发现Leader,并和Leader进行状态同步。待到同步结束,它也参与消息广播。ZooKeeper服务一直维持在Broadcast状态,直到Leader崩溃了或者Leader失去了大部分的Followers支持。   Broadcast模式

4,ZooKeeper原理

心已入冬 提交于 2020-02-26 23:16:04
1,ZooKeeper概述 ··· 作用: · ZooKeeper是为分布式应用程序提供的一个分布式开源协调框架,是Hadoop和Hbase的重要组件; · 主要用于解决分布式集群中应用系统的一致性问题; · 提供了类似于Unix的节点树方式来存储数据; · 可用于维护和监控存储数据的状态变化,从而达到基于数据的集群管理; · 提供了一组原语(机器指令),以及java和C语言的接口。 ··· 特点: · 也是一个分布式集群,一个领导者(leader),多个跟随者(follower)。 · 集群中只要有半数节点存活,ZooKeeper集群就可以正常服务。 · 全局数据一致性:每个server都会保存一份相同到的副本,无论client连接哪个server,数据都是一样的。 · 原子性:一次数据的更新,要么成功要么失败。 · 数据的实时性:在一定时间范围内,client能够读取到最新的数据。 ··· 数据模型: · ZooKeeper中的数据模型与Unix中的文件系统类似都是树形结构。在这个系统中没有文件和目录,而是采用节点 (node)的概念,在这里是 znode;znode既可以保存数据,类似于文件;也可以保存其他znode,类似于目录。 · 一个znode最多存储 1M的数据。 ··· 应用场景: · 同一配置管理 · 同一集群管理 · 节点动态上下线感知 · 软负载均衡 ·

Apache kafka原理与特性(0.8V)

我与影子孤独终老i 提交于 2020-02-26 07:03:07
文章目录 一.入门 1.1 简介 Topics/logs Distribution Producers Consumers Guarantees 1.2 Use cases Messaging Websit activity tracking Log Aggregation 二. 设计原理 1.Persistence 2.Efficiency 3. Producer Load balancing Asynchronous send 4.Consumer 5.Message Delivery Semantics 6. Replication 7.Log 8.Distribution 总结: 三.主要配置 1.Broker主要配置 2.Consumer主要配置 3.Producer主要配置 前言: Kafka是一个轻量级的/分布式的/具备replication能力的日志采集组件,通常被集成到应用系统中,收集"用户行为日志"等,并可以使用各种消费终端(consumer)将消息转存到HDFS等其他结构化数据存储系统中.因为日志消息通常为文本数据,尺寸较小,且对实时性以及数据可靠性要求不严格,但是需要日志存储端具备较高的数据吞吐能力,这种"宽松"的设计要求,非常适合使用kafka。 一.入门 1.1 简介 Kafka是一个"分布式的"/“可分区的(partitioned)”/“基于备份的

深入理解zookeeper

ぐ巨炮叔叔 提交于 2020-02-21 11:30:58
看过了倪超老师的《从Paxos到Zookeeper分布式一致性原理与实践》,很受启发,所以在此记录本书的重要知识点,以便以后的重温和回顾 一、初识分布式 1、从ACID ACID:原子性、一致性、隔离性、持久性 2、CAP定理 一个分布式系统不可能同时满足一致性、可用性和分区容错性,这三个基本需求最多只能同时满足其中两项。在分布式环境中一致性是指数据在多个副本之间能够保持一致的特性。可用性是指系统提供的服务必须一直处于可用的状态。分区容错性约束了一个分布式系统需要具有以下特性: 分布式系统在遇到任何网络分区错误的时候仍然需要能够需要保证对外提供一致性和可用性的服务,除非是整个网络环境中发生了故障。网络分区指的是在分布式系统中,不同的节点分布在不同的子网络(机房或者异地网络)中,由于一些特殊原因导致这些子系统之间出现通讯不连通的情况,但是子系统的内部网络是正常的,从而导致整个系统的网络环境被切分成若干个孤立的区域。 CAP定理应用:一个分布式系统不可能同时满足一致性、可用性和分区容错性,只能放弃其中一个从而满足另外两个特性,如图: 3、BASE理论 BASE理论指的是基本可用、软状态、最终一致性 基本可用:基本可用是指分布式系统出现不可预知故障的时候,允许损失部分可用性。(1)相应时间上的损失 (2)功能上的损失 软状态:指系统中的数据存在中间状态

java详细面试题

时间秒杀一切 提交于 2020-02-13 06:00:23
struts和springMVC区别? stringbuffer和stringbuilder区别? mybatis原理? soa原理? dubbo的原理? solr怎么搭建,倒序索引? MQ消息队列? SQL语句? maven以及本地仓库? final关键字? 为什么使用ssm而不用ssh? struts2和springmvc区别? 开发工具,jvm,gc,设计模式,平时开发工程是你自己搭建吗? 项目中用到的技术dubbo,zookeeper,solr等? 这三年工作中你统计过自己的代码量大概有多少? redis是多例的还是单例的,在多线程时怎么使用? hashmap线程冲突怎么解决? 介绍一下spring,mybatis。aop用的是静态代理还是动态代理? 介绍电商项目,开发周期多长?技术人员有多少?任务怎么分配什么时候上线?项目模块? 说说你负责的模块的具体代码? 数据库表熟悉吗?有哪些字段? 为什么不使用HttpApi进行项目通信而使用dubbo? TCP和UDP的区别? http,https,ftp,sftp分别使用哪个协议? 给你一个mysql数据库,不使用硬件也不使用软件如何优化? SQL语句的执行顺序? 给你两个表写出笛卡尔积的结果? redis的list数据类型是双向队列,完全可替代MQ,为何还要使用MQ,dubbo的底层原理和实现?