MySQL的锁到底有多少内容?详细解说
正文
ZooKeeper 很流行,有个基本的疑问:
- ZooKeeper 是用来做什么的?
- 之前没有ZK,为什么会诞生 ZK?
OK,解答一下上面的疑问:(下面是凭直觉说的)
- ZooKeeper 是用于简化分布式应用开发的,对开发者屏蔽一些分布式应用开发过程中的底层细节
- ZooKeeper 对外暴露简单的 API,用于支持分布式应用开发
- ZooKeeper 在提供上述功能的同时,其还是一个 高性能、高可用、高可靠的分布式集群
上面说这么多,总结一下,ZK 能解决分布式应用开发的问题,ZK 能很好的解决问题。到这一步,疑问就更多了:
- 分布式应用开发,有哪些常见问题?ZK 是如何屏蔽这些底层细节的?
- ZooKeeper 对外暴露了那些 API?这些 API 如何支持分布式应用开发的?这些 API 还能简化吗?API 的语义性怎么样?
- ZooKeeper 自身是一个高性能、高可用、高可靠的分布式集群,那有个简单的问题:
- 高性能是指什么?ZooKeeper 为了达到高性能,做了哪些工作?
- 高可用同上
- 高可靠同上
Note:本篇 wiki 就是为了解决上述第一个疑问的。(其他疑问会在其他 blog 中逐步解答)
为什么有 ZooKeeper
一个应用程序,涉及多个进程协作时,业务逻辑代码中混杂有大量复杂的进程协作逻辑。
上述多进程协作逻辑,有 2 个特点:
- 处理复杂
- 处理逻辑可重用
因此,考虑将多进程协作的共性问题拎出,作为基础设施,让 RD 更加专注业务逻辑开发,即:
ZooKeeper 就是上述多进程协作基础服务的一种。
ZooKeeper 的特点
ZooKeeper 有几个简单特点:
- ZooKeeper 的 API:从 文件系统 API 得到的启发,提供简单的 API
- ZooKeeper 运行在专用服务器上,跟业务逻辑分离,保证了高容错性和可扩展性
ZooKeeper 是存储设施,但特别注意
- ZK上存储的数据聚焦为:
协作数据
(元数据
),而不是应用数据,应用数据有自己的存储方案,例如 HDFS 等 - ZK 本质上,可以看作一种
特殊的 FS
特别说明:
应用数据和元数据,由于使用场景不同,对一致性和持久性的要求有差异, 因此,架构设计、数据治理过程中,应将 2 类数据独立看待、独立存储。
ZooKeeper 的使命
ZK 要解决的核心问题:
ZK 目标:简化分布式应用开发中,多进程协作问题。为分布式应用,提供高效
、可靠
的分布式协调服务(基础服务),例如:
- 统一的命名服务
- 分布式锁
- 进程崩溃检测
- Leader 选举
- 配置管理:配置变更时,及时下发到各个 Client。
一个简单的问题:多进程的协作是什么?尼玛呀,有完没完,啥问题你都有,面对这个掉咋天的脑壳,还是回答一下。
多进程协作,整体分为 2 类:
- 协作:多进程需要一同处理某些事情,一些进程采取行动是的其他进程能够正常工作,例如:主从结构,M 向 S 分配任务,S 才会执行,否则 S 就保持空闲状态
- 竞争:两个进程不能同时工作,一个进程必须等待另个进程执行完毕,例如:主从结构,M 节点失效后,很多 S 都想成为 M,这时,就需要互斥锁,只有第一个获得锁的 S 成为 M
特别说明:
- 不跨网络协作:多进程,可以在同一台物理主机上,同步原语很方便(比如?管道、共享内存、消息队列、信号量)
- 跨网络协作:多进程,分布在不同的物理主机上,ZK 关注这一类
跨网络多进程协作
,进程通信,基本思路有 2 个:
- 消息机制:通过网络,直接信息交换,多消息传递算法,实现同步原语
- 共享存储:利用外部共享存储,实现多进程协作,要求
共享存储
提供有序访问,ZK 采用这种方式
真实系统中,跨网络通信,有几个共性问题:
- 消息延迟:由于网络原因,后发送先到达
- 处理器性能:由于系统调度原因,消息到达后,延迟处理
- 时钟偏移:不同物理主机,时钟发生偏移
ZK 精心设计用于屏蔽上述 3 个共性问题,使得这些问题在应用服务层面完全透明化。
ZooKeeper 特性
ZooKeeper 解决的本质问题
分布式系统的一致性问题:
- 消息传递:延迟性,先发送的消息,不一定先到达;
- 消息传递:丢失性,发送的消息,可能丢失;
- 节点崩溃:分布式系统内,任何一个节点都可能崩溃;
在这种情况下,如何保证数据的一致性?
- 提案投票:基于投票策略,2PC
- 选举投票:基于投票策略,投出
优先级最高的节点
(包含最新数据的节点)
Paxos 目标:解决分布式一致性
问题,提高分布式系统容错性
的一致性算法。
Paxos 本质:基于消息传递
的高度容错
的一致性算法
ZooKeeper 定位
ZooKeeper 是:
- 分布式协调服务
- 高效、可靠
- 方便应用程序,聚焦
业务逻辑开发
,而不需要过多关注分布式进程间协作细节
ZooKeeper 不直接暴露原语
,而是,暴露一部分调用方法
组成的 API,类似文件系统的 API,支持应用程序实现自己的原语
。
ZooKeeper 特性
ZooKeeper 可以保证如下分布式一致性特性:
- 顺序一致性:同一个 Client 发起的事务请求,严格按照发起顺序执行
- 原子性:事务请求,要么应用到所有节点,要么一个节点都没有应用
- 单一视图:Client 无论连接到哪个节点,看到的服务端数据都是一致的(Note:不准确,其实是最终一致性)
- 可靠性:事务一旦执行成功,状态永久保留
- 实时性:事务一旦执行成功,Client 并不能立即看到最新数据,但 ZooKeeper 保证最终一致性
ZooKeeper 设计目标
ZooKeeper 致力于提供高性能
、高可用
、顺序一致性
的分布式协调服务,保证数据最终一致性
。
目标一:高性能(简单的数据模型)
- 采用
树形结构
组织数据节点; - 全量数据节点,都存储在内存中;
- Follower 和 Observer 直接处理非事务请求;
目标二:高可用(构建集群)
- 半数以上机器存活,服务就能正常运行
- 自动进行 Leader 选举
目标三:顺序一致性(事务操作的顺序)
- 每个事务请求,都会转发给 Leader 处理
- 每个事务,会分配全局唯一的递增id(zxid,64位:epoch + 自增 id)
目标四:最终一致性
- 通过提议投票方式,保证事务提交的可靠性
- 提议投票方式,只能保证 Client 收到事务提交成功后,半数以上节点能够看到最新数据
ZooKeeper 出现之前
ZK 出现之前,分布式系统常用两种方式,实现多进程协作:
- 分布式锁管理器
- 分布式数据库
ZK 更专注于进程协作,而不提供任何锁接口和通用的存储数据接口。(疑问:ZK 也可以提供啊,我们不使用就行了)
应用服务器,常见的 2 种需求:
- Master-Slave Leader 选举:要求提供Master节点选举功能
- 进程响应跟踪 崩溃检测:要求提供进程存活状态的跟踪
- 分布式锁:互斥排它锁
ZK 为上述 2 种策略提供了基础 API。
ZooKeeper 不适用的场景:
- 海量数据存储:ZK 本质是
特殊的 FS
,但 ZK 用于存储元数据
,需要单独存储应用数据
最后
这次要给大家分享总结的东西就是这些了
资料全都放在——***我的学习笔记:大厂面试真题+微服务+MySQL+Java+Redis+算法+网络+Linux+Spring全家桶+JVM+学习笔记图***
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
这次要给大家分享总结的东西就是这些了
资料全都放在——***我的学习笔记:大厂面试真题+微服务+MySQL+Java+Redis+算法+网络+Linux+Spring全家桶+JVM+学习笔记图***
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
MySQL的锁到底有多少内容?详细解说相关推荐
- 强人锁男,MySQL到底有多少锁?
前言 读锁写锁意向锁,表锁行锁页面锁. 在学习Java并发编程的时候,肯定少不了学习锁.最常见的就是synchronized,锁的概念不是很好理解,有的地方说是锁住了一段代码,有的地方说是锁住了一个对 ...
- 深度剖析:Redis分布式锁到底安全吗?看完这篇文章彻底懂了!
阅读本文大约需要 20 分钟. 大家好,我是 Kaito. 这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题. Redis 分布式锁的话题,很多文章已经写烂了 ...
- 深度剖析:Redis 分布式锁到底安全吗?看完这篇文章彻底懂了!
作者 | Kaito 来源 | 水滴与银弹 阅读本文大约需要 20 分钟. 大家好,我是 Kaito. 这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题. Redis 分布式锁的话题 ...
- 万字长文剖析Redis分布式锁到底安不安全
阅读本文大约需要 20 分钟. 这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题. Redis 分布式锁的话题,很多文章已经写烂了,我为什么还要写这篇文章呢? ...
- 八、Mysql 间隙锁(gap 锁)与慢查询
Mysql 间隙锁(gap 锁)与慢查询 gap锁与慢查询 gap锁 事务语法 开启事务 事务回滚 事务提交 还原点(演示) 业务设计 逻辑设计 范式设计 查询测试 反范式设计 总结 范式化设计优缺点 ...
- 10年后端开发程序员详解数据库缓存方案到底有多少名堂。丨Linux服务器开发丨后端开发丨中间件丨web服务器丨数据库缓存
数据库缓存方案到底有多少花样,一节课带你缕清 1. 读写分离方案 2. 若干个缓存解决方案 3. 缓存故障如何解决 视频讲解如下,点击观看: 10年后端开发程序员详解数据库缓存方案到底有多少名堂.丨L ...
- mysql 行锁 超时_技术分享 | MySQL 行锁超时排查方法优化
作者:xuty 本文来源:原创投稿 * 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.大纲 #### 20191219 10:10:10,234 | com.ali ...
- mysql的锁表问题
SHOW PROCESSLIST查看数据库中表的状态,是否被锁: kill id //杀掉被锁的表 ================================================ ...
- mysql 中的脏读与幻读_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...
首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行 ...
最新文章
- 办公族的健康提醒脚本
- Java时间操作工具类
- [CQOI2018] 解锁屏幕(状压dp)
- 【APICloud系列|18】上架Android应用到腾讯应用包、百度手机助手、华为应用市场、小米应用商店、阿里应用分发平台需要准备哪些材料?
- Pointers On C 1
- Linux 在 M1 上跑起来了
- 抖音云蹦迪源码/很火的直播打赏类项目源码
- 易宝支付银行接口,各参数
- 简单的使用JS读取本地的文件
- 新中大银色快车服务器重装,新中大简约型ERP软件银色快车SEV9.0版安装说明.doc...
- 关于Mars3D运行步骤以及调接口的问题
- win10防火墙打不开,设置是灰色的、服务列表更改启动方式也是灰色的,怎么办?
- 【中文】【吴恩达课后编程作业】Course 5 - 序列模型 - 第三周作业 - 机器翻译与触发词检测
- 如何自己开发一个小程序?
- Fidder 请求信息颜色的含义
- 到底什么是Web2.0
- 【超详细】对比10种优化函数BGD、SGD、mini-batch GD、Momentum、NAG、Adagrad、RMSProp、Adadelta、Adam、AMSgrad
- Apache Hadoop YARN:另一个资源协调者
- java 指定垃g1圾收集_java垃圾回收G1收集器
- 球半比分,美职业:费城联合-华盛顿联 7月9日
热门文章
- oracle10g字符集问题
- JQuery学习—JQuery-Validation 使用
- 使用 Rodeo 分析总统候选人的推特内容
- mysql lamp_MySql将会继续让LAMP架构发扬光大吗?
- WiFi6E在VRAR中的应用优势
- 蓝桥杯python组—— 猴子分香蕉
- 2017 ACM/ICPC Asia Regional Shenyang Online(9.10)
- Flyway 数据库版本控制
- Topic 3. 克隆进化之 fishplot
- 驾校管理系统(SSM,JSP,JAVA,MYSQL)【源码,数据库脚本,论文】