首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
join
list
uml
plugins
testing
数组
main
erlang
utf-8
web3
typescript
command
default
triggers
include
object
subset
express
usb
heap
nodejs
javascript
iostream
bit
audio
timestamp
python3
post
request
copy
lua
jsp
email
buffer
char
expression
integer
go
loops
shell
python2
import
merge
fetch
controller
c语言
keyword
client
filter
flutter
substring
tree
heatmap
search
scala
instance
dll
rsa
stream
web
grid
const
future
select
php7
less
case
frameworks
dockerfile
window
replace
java
string
spring
process
header
require
golang
sum
当前位置:
开发笔记
>
编程语言
> 正文
【技术分享】揭秘KDB数据库集群下的锁管理机制
作者:ShenTing止想念 | 来源:互联网 | 2023-09-25 10:40
作为传统数据库领域的新成员,K-DB不断挑战技术壁垒,实现了基于共享存储的高可用多活集群。我们和大家一起分享K-DB集群高效的锁管理机制的实现方式,如何解决对象在多节点被并发访问的
本文整理自DTCC2016主题演讲内容,录音整理及文字编辑IT168@杨璐。如需转载,请先联系本公众号获取授权!
演讲嘉宾
霍俊路
浪潮高级软件工程师
K-DB数据库高级技术服务工程师。多年一线实施测试经验,参与数百个数据库项目的集成测试。 清晰掌握 K-DB 数据库的内部原理和逻辑架构,擅长数据库的性能优化和故障诊断。快速定位和解决用户在使用 K-DB 的过程中的任何问题。
分享内容
很高兴有这么一个机会,能跟这么多朋友在一起,来聊聊技术,做一个计划的分享。希望我的讲解能够给大家带来一定的收获。
讲解分为三个部分:第一,主要是知识;第二,是针对主要知识一个现场展示;第三,关于K1,还有解决方案。
传统数据库架构的发展历程
我们数据库发展一共分为三个阶段。第一阶段,主要是一个单机的数据库,特点是基于MACC架构,闪存,闪回等,可以给用户解决一定的问题。但是架构的缺陷也非常明显。原因第一,它解决不了用户的应用扩展性的问题。第二,解决不了用户的单点故障的问题。
第二个阶段,就是说主库所有的操作产生的日志,都会传送到备库,在备库层面做一个恢复,这样主库宕掉以后,备库依然可以起来进行服务。那么同时在这个传输的过程中,备库是可以只读模式打开的,可以分享一部分,就是说主库的压力。
经过很长时间的一个研发过程和积累,我们数据库进入到第三个阶段,就是说集群阶段。那么集群阶段,它具有什么特点呢?就是它要比前面这几个增加了两个非常明显的特征。第一,负载均衡,第二,就是故障恢复。所谓负载均衡,就是说多个点是可以一起进行的,故障恢复,任何一个节点宕掉以后,都不会影响到用户的继续使用。
这就是要讲的一个核心。KB的集群,它是基于一个共享,由多个节点共享磁盘,在共享磁盘上有着数据库必须要的软件,数据软件等等,除此之外,这里面显示的叫做集群控制软件,这个文件的用处在什么呢?就是说它是作为集群件的一个注册表的一个信息。然后我们这个集群,各个节点之间,其实它是由两条网络进行搭建的,分别是外网还有内网。外网是处理用户的需求的,也就是所有的用户的请求,统一是从外往这边进入的。内网是集群节点之间的一个通信的一条通道。
多活集群,就是说它的每一个节点都是可读可写,可以同时读写。在我们数据库的集群中,我们刚才说过,我们有一条内网,它是用于处理数据在节点之间的传输。在多个节点中,如果我想要获取的这个数据块已经在别的节点中了,那么我不需要将对应的数据块刷回到磁盘,我再从磁盘进行读取,而我的这种处理方式是直接通过内网将这个数据块传输过来。这样就减少一个IO的消耗。这种技术,在我们数据库称为一种缓存的融合技术。也就是说,多个节点的这种内存,我们可以把它当成统一来处理。
实现缓存融合需解决问题
第一, 多个节点有可能会同时共同读取数据块。
第二, 节点和节点之间,然后有读有写,同一个数据块。
第三, 就是写和读。
第四,写和写。
我们需要处理多个节点的对于同一个数据块的稳定。在数据库中,对于同一个数据块的,就是说对同一个对象之间处理,统一的方案,这个锁在数据库当中是普遍来解决并发的,我们在单节点当中也是经常看到的。如何把这个锁在多个节点,在集群环境下设计出来,那么来解决这样的问题呢?我们需要考虑哪些因素呢?我自己做了一个总结,主要是从三个方面,第一,就是说这个锁放在什么地方?因为它是一个多节点的环境,我这个锁放在哪个地方是很重要的一个东西,那么我需要多个节点都能感测到。这个锁里面会存放哪些信息,我们知道,在单节点当中,大部分主要就是先放一个锁,申请一个模式就OK了,在集群一下,这样够不够呢?
主要数据库就通过这三个模块进行处理。刚说到GLD,它是一部分内存,那么它究竟是什么样的内存呢?放在什么地方呢?可能通过这个图大家能够找到答案。
从这个图里面,每一个节点,在它的共享内存当中,所有的内存,然后就放在一起,组成在一起,就是构成了整个的GLD,也就是说,每一个节点,它都是GLD的一部分,所有的节点放在一起,内存这个信息,大家可能还有一些疑惑,疑惑在哪儿呢?它怎么跟数据连在一块的,是说任何一个数据块,它的锁的这个信息,我们都会放在它的master节点中。那么这节点和这个数据块之间是怎么联系起来的呢?其实是中间有一个算法,就是说任何一个节点它都会映射到这个节点,这是一个三节点的集群,是影射的一个关系。
在集群中,它的并发,我们的对象是数据块,那么我们需要在master节点中需要记录什么呢?第一,这个数据块它的地址在哪儿,这是一定要的,这是第一个信息。第二个信息,这个数据块它是在一个多节点并发访问的一个环境下,那么谁访问谁正在占用,这个信息也是需要的。也就是说,我们需要记录当前正在访问的,正在使用的实例ID(Instance id)这是两个。第三,我们对于一个锁的申请,那么在不同的状态下它是不一样的,如果我们是读写的数据块,我们一般申请一个共享锁,如果我们要想写这个数据块进行一个改写,我们会直接申请一个,这个是在单节点方面适用的,同样在这里我们必然也会需要。就是说我们的模式,我们是想申请。这个锁,一旦被申请到了,这个数据块的状态它必然会不一样。那么这个数据块的状态,我们大家在单节点当中经常遇到,就是CR,CURRET 等等,那么这些在集群的环境下多多少少还不太一样,在这里面它多了一个状态,叫做 Past Imange,这个状态在单节点当中是永远看不到的,这个状态是在集群中有。
第三个问题是怎么来维护。按照逻辑梳理,读写数据块,找master节点,它借助锁模块。就是说当我们需要申请一个锁的时候,它都会有一个记录。当新的用户申请,然后也在申请这个锁的时候,那么这个锁,新的用户能否马上分配到,打一个比方,A节点正在读这个数据块,B节点也想要读这个数据块,OK了,这两个读的时候,都是需要申请X的,这个时候既然是兼容的,我们就可以直接分配。把这个锁直接分配了,分配在这个链条里面。那么用户有可能在想,如果不兼容怎么办?再来一个用户,他想写这个块,他跟原来不一样,不兼容,他申请一个X,那怎么办?让他等待,这个时候他的另一个就起到了作用,就是说它会把相关锁的结构,该申请的还是申请,但是要等待它状态的一个变化。比如说等到A节点、B节点,刚才那两个节点读完了,锁释放了,或者是其他状态,就可以直接转过去。好处就是先把结构申请了,然后只做一个状态转换,处理效率更快。
理论知识后面的几组场景
第一个场景,想表达的事件。
第二个场景,C节点,怎样申请对应数据块的排他锁。
第三个场景,节点宕机怎么办?
如果就是说一个节点宕机了以后,怎样处理?我们原来的处理方式,就是由一个节点进行读取,然后进行恢复。那么我们现在做的,多个节点并行的恢复。这个我们认为还是比较先进的一个技术。就是说当某一个节点宕机以后,它由多个节点并行恢复,那么它的恢复的时间是很快的。多节点的并行恢复要比单节点的恢复,它的性能要多一倍。
关于KPS技术
浪潮主要是做硬件,做服务器的。K1小机是自主研发的一款小机,我们在K1的基础上加上了KPB,推出一体化的优化方案,因为我们在上面做了很多很多的优化。不管是从硬件、软件,包括数据库的参数,操作系统的参数,CPU指令集,甚至非常非常重要的代码编辑,这个地方我们都做了深度的优化。在整个我们实验的环境中,测试了很多很多人,最终我们把性能提升的非常非常好,在我们原有的基础上提升了大约1倍。
总结:
由K-DB和天梭K1搭建的数据处理系统性能接近Oracle,很多场景下,甚至有所超越。从技术层面看,这源于多进程多线程、多版本并发控制、存储虚拟化等众多领先的技术。K-DB拥有高可用集群KRAC、异地容灾K-SC等高级功能。当数据库集群节点出现故障或者人为关机时, K-DB可以多节点同时执行恢复操作,大幅缩短系统恢复的时间。
总之,K1和KDB结合在一起,浪潮整合了从服务器到操作系统、存储、数据库,再到应用,整体一体化的优化方案,也可以看出浪潮欲服务更多关键业务的信心和决心!
关于DTCC
中国数据库技术大会(DTCC)是目前国内数据库与大数据领域最大规模的技术盛宴,于每年春季召开,迄今已成功举办了七届。大会云集了国内外顶尖专家,共同探讨MySQL、NoSQL、Oracle、缓存技术、云端数据库、智能数据平台、大数据安全、数据治理、大数据和开源、大数据创业、大数据深度学习等领域的前瞻性热点话题与技术,吸引IT人士参会5000余名,为数据库人群、大数据从业人员、广大互联网人士及行业相关人士提供了极具价值的交流平台。
关注
大会官方公众号
,获取更多详情
!
↓↓↓
数据库
并发
架构
扩展
日志
负载均衡
文件
io
缓存
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
算法
如何限制php数据库链接数和连接超时时间?
本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ...
[详细]
蜡笔小新 2023-12-14 14:06:10
算法
一句话解决高并发的核心原则
本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ...
[详细]
蜡笔小新 2023-12-12 10:56:24
算法
Redis的RDB文件与AOF文件的保存与还原机制
本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ...
[详细]
蜡笔小新 2023-12-12 08:51:10
算法
Java工具类库Hutool介绍及功能概述
本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ...
[详细]
蜡笔小新 2023-12-14 14:29:36
request
t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ...
[详细]
蜡笔小新 2023-12-14 10:17:48
default
eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ...
[详细]
蜡笔小新 2023-12-14 00:31:35
default
Hyperledger Fabric外部链码构建与运行的开发笔记
本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ...
[详细]
蜡笔小新 2023-12-13 21:47:39
copy
图解redis的持久化存储机制RDB和AOF的原理和优缺点
本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ...
[详细]
蜡笔小新 2023-12-13 20:24:11
testing
问题2:重新命名或者移动数据文件、日志文件到新的位置
本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ...
[详细]
蜡笔小新 2023-12-13 13:02:24
testing
分享2款网站程序源码/主题等后门检测工具
本文介绍了2款用于检测网站程序源码和主题中是否存在后门的工具,分别是WebShellkiller和D盾_Web查杀。WebShellkiller是一款支持webshell和暗链扫描的工具,采用多重检测引擎和智能检测模型,能够更精准地检测出已知和未知的后门文件。D盾_Web查杀则使用自行研发的代码分析引擎,能够分析更为隐藏的WebShell后门行为。 ...
[详细]
蜡笔小新 2023-12-13 09:10:23
list
Linux如何安装Mongodb的详细步骤和注意事项
本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ...
[详细]
蜡笔小新 2023-12-12 21:54:15
list
mysql-cluster集群sql节点高可用keepalived的故障处理过程
本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ...
[详细]
蜡笔小新 2023-12-12 19:20:50
object
Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ...
[详细]
蜡笔小新 2023-12-12 17:57:15
object
Oracle优化新常态的五大禁止及其性能隐患
本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ...
[详细]
蜡笔小新 2023-12-12 12:55:55
list
Vagrant虚拟化工具的安装和使用教程
本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ...
[详细]
蜡笔小新 2023-12-11 14:24:00
ShenTing止想念
这个家伙很懒,什么也没留下!
Tags | 热门标签
join
list
uml
plugins
testing
数组
main
erlang
utf-8
web3
typescript
command
default
triggers
include
object
subset
express
usb
heap
nodejs
javascript
iostream
bit
audio
timestamp
python3
post
request
copy
RankList | 热门文章
1
将滑块设置为初始位置 - React native
2
如何为具有角度cli的角度组件样式启用SCSS内联模板
3
怎样用jquery mobile实现手机上的文字或者图片可以左右滑动?
4
最新版Firefox中的问题
5
P30
6
Oculus Rift S丨(五)实现将UI放在眼前、与UI交互
7
UITableView黑暗主题
8
FastJson对复杂的泛型对象的解析问题
9
Bazel BUILD文件与构建/文件夹冲突
10
vue的$nextTick方法
11
如何在SASS/SCSS中创建硬件背景?
12
fiddler相关随笔(网络异常、证书问题、配置代理)
13
H3C Comware的作用
14
Redux表单域组件和验证
15
android如何在单击事件上的按钮上添加声音?
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有