数据库的横向扩展已经成为各个企业用户的基本需求,一方面随着企业前端业务系统的膨胀,后端数据库系统的负载也在不断增长,企业进行纵向扩展技术难度较大,另一方面,数据库系统的关键性不断提高,横向扩展不仅提高处理性能,也极大的提高了数据库系统的容错能力。

目前,数据库横向扩展有多种实现方式,较为主流的是共享存储(Shared Disk)技术,不久前,浪潮发布的K-DB数据库,这款产品就基于共享存储技术,实现了双机高可用(HA)、多机集群(KRAC)等数据库横向扩展。

浪潮K-DB采用基于共享存储(SharedDisk)的双机或多机集群(KRAC)架构。

KRAC具有两大特点:故障转移和负载均衡。一方面,KRAC集群技术提供高可用解决方案,为用户提供统一数据服务的同时提供故障切换与恢复能力(Fail Over集群功能),避免单点故障,减少停机时间,确保系统全年7*24稳定运行。另一方面,后端数据库系统的负荷随着应用系统压力的上升也在不断的增加,集群技术能够实现数据库系统的横向扩展,将数据库的压力平均分配在多台数据库服务器上。

【KRAC演示视频】

http://v.qq.com/boke/page/x/k/1/x0174dycbk1.html

而在介绍这两大特点前,我们先通过下图了解KRAC的体系结构。

KRAC体系结构

KRAC由多个节点的数据库服务器和共享存储组成。共享存储上主要存放的是数据库必需的文件,包括数据文件、日志文件及控制文件等。数据库服务器上运行着数据库对应的实例,多实例之间通过内网进行数据的传输。KRAC的各个节点可以同时对磁盘进行读写,实现了多读多写的真正集群技术。

KRAC具有两大特点:故障转移和负载均衡。

特点一:故障转移

KRAC数据库可以对数据库系统中出现的任何单点故障节点的session 转移到其他正常的节点上,如磁盘、网络、服务器等,保障应用系统的不间断,最大程度的减少用户的损失。

KRAC故障转移

特点二:负载均衡

KRAC会将所有的用户session平均分配到各个节点上,集群中的各个节点均能对磁盘进行读写,达到应用系统的线性扩展,从整体上提高数据库的吞吐量。

数据库各个节点的实例之间通过高速的内网传送数据,避免了节点间访问数据而产生的不必要的IO,而影响到性能。而在KRAC集群中,由于有多个节点都具有block buffer,这就需要节点间的blockbuffer可以互相传输访问,才能达到一致性的状态。

要具备以上2大特点,就不得不提内存融合技术,他是实现KRAC功能的核心。

KRAC核心技术:内存融合

KRAC集群内部组件

KRAC的集群中由CCC(Cluster CacheControl)模块和GCA(Global CacheAdapter)模块实现集群间数据库的融合。传输的数据块类型根据不同场景的需要而不一样,主要包括CR block、Global dirty block、current block。节点间数据传输的功能由模块INC(Inter-NodeCommunication)服务。在节点间请求的block buffer由 CCC 和CGA 构造完毕后,INC 负责将对应的数据块传输到目的节点。

KRAC内存融合主要体现在4大核心技术上:锁机制、角色、PIBLOCK和GLOBAL LOCK DIRETROY。

下面,我们将为大家详细介绍这4个核心技术点的运行机制。

锁机制

在数据库中,对于数据块的block buffer的并发读写使用锁机制进行保护。每一个数据块的锁包括三种模式,分别为NULL、SHARED和EXCLUSIVE 。三种模式的兼容列表如下:

当某一个用户持有block buffer的锁时,如果其他用户以兼容模式的锁方式进行访问,那么这2个用户可以同时访问该数据块。

而一旦2个用户以不兼容方式访问同一个数据块时,后面的用户必须等到前一用户释放锁之后才能开始操作。这种解决方案是单实例K-DB数据库的解决方案。而在KRAC中,K-DB数据库在此基础上,增加了额外了管理方式-角色和Past image Block数据块。

角色

K-DB 对于数据块的分配了2种角色,分别是LOCAL 和GLOBAL,当数据blockbuffer只在一个节点与磁盘上的数据不一样(脏数据),该block buffer的角色为LOCAL状态。当在多个节点上存在“脏数据”时,block buffer的角色为GLOBAL.

PI BLOCK

如果一个block 在某一个节点中被修改后,然后该block传输到了其他节点,那么本节点存储的block块为PI(Past Image)block。PI BLOCK 块在以下2个方面具有一定的优化作用:

  1. 提升CR 块构建的速度。当本地构建的CR块的SCN 小于PI BLOCK 的SCN时,无需从其他节点传输最新的current数据库,直接在本地使用PI BLOCK可以构造。
  2. 节点宕机后,提升系统恢复的性能。当某一个节点宕机后,整个集群会暂时停止服务,进行内部恢复。恢复的原理就是将宕掉节点的redo日志在其他节点进行恢复。在恢复时,对于redo日志中小于PI BLOCK的SCN无需重做,从大于等于PI BLOCK的SCN处开始恢复,从整体上减少了恢复的工作量。

GLOBAL LOCKDIRETROY

在K-DB数据库中,所有各个节点对于bufferblock的锁信息,都会记录在GlobalLock Directory(GLD)。各个节点在share pool 内存中分配出一部分内存,共同组成整个的GLD。那么一个节点会记录哪一个数据块的锁和角色的相关信息呢?

在这里,KRAC又提出了一个新的机制,就是master机制。

所有的buffer block在当前的正在运行状态的集群中,只会对应到一个master节点,该master节点会记录相对应的buffer block在各个节点中锁状态和角色的相关信息。任何节点在访问某一个buffer block时,都需要向他的master节点进行申请。Master节点在收到buffer block访问的请求后,会确定该buffer block块的当前位置,然后将该buffer block块传送给请求用户。所有的master中的信息,共同组成了GLR(Global Lock Directory)。

数据块访问流程

为了便于大家更直观理解内存融合,下面通过三个场景举例说明:

场景示例——内存融合

测试参数说明:测试Block 的master 节点是C。Master节点中关于bufferblock一共记录了4个参数,第一个代表的锁模式,如S(Shared),E(Exclusive),N(Null)。第二个参数是定义的是角色,如L(Local),G(Global)。第三个参数定义的是是否为PI, 0代表否,1代表是。第四个参数是该锁对应的instance 节点。

场景一节点B读取磁盘中的BLOCK

(1)B节点向master C节点申请读取block(2,203),BLOCK 中的数据为21

(2)主节点master C 向B节点赋予block(2,203)的 local 角色shared 模式lock

(3)B节点从磁盘读取block块(2,203)

场景二节点A更新节点B中缓存的buffer block

(1)      A节点向Master Node C申请写BL(2,203),将21修改为22.

(2)      Master节发现B节点以Shared 模式持有BL(2,203).master主节点要求B节点将当前的锁由Shared降为Null模式。

(3)      节点B将本地的锁降为Null模式后,将BL(2,203)发送给A节点。A节点获取local 角色的exclusive 模式的锁,修改BL(2,2003)中的数据为22.

场景三B节点再次更新同一个Block

  1. B节点向Master 申请X锁,写BlockBL(2,203).将数据修改为23
  2. Master 节点发现最新版本的数据块在A节点上,并且A 以X锁占有该数据块。Master节点要求A节点的锁降为NULL模式,同时由于此后2个节点中都存在与磁盘中的数据不一致的数据,A节点的角色升级为GLOBAL,A中当前的数据库记为PI块。
  3. A节点锁降级后,将数据块BL(2,203)传送到B 节点,节点B将数据修改为23.

    好了,通过上文介绍,想必大家对浪潮K-DB数据库的KRAC功能和运行原理有了全面认识。

    总结来讲,浪潮K-DB数据库是除了Oracle以外,第二个能够实现共享存储的集群技术的产品,采用KRAC多机集群架构,具有故障自动转移、高伸缩能力和自动负载均衡特性,保障系统可用性的同时,大幅提升可用性和性能,还能实现系统性能平滑升级且接近线性的扩展。

作者:佚名
来源:51CTO

【K-DB干货】浅谈KRAC内存融合技术相关推荐

  1. python股票网格交易法详解_干货 | 浅谈网格交易法

    原标题:干货 | 浅谈网格交易法 网格交易法的基本原理就是把行情的所有日间上下的波动全部囊括,它不会放过任何一次的行情上下波动. 不管市场价格如何上下波动,不外3种形态:上涨,盘整,下跌.由于不同的操 ...

  2. 浅谈主流内存发展历史

    浅谈主流内存发展历史 申屠志刚2018329621200 信息学院 计算机科学与技术18(3) 摘 要:计算机必然包含运算器.控制器.存储器和输入输出设备等五个重要部分,其中作为内存储器的内存条在PC ...

  3. java方法区对象类型_浅谈Java内存区域与对象创建过程

    一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...

  4. android 存储空间监控,浅谈 Android 内存监控(中)

    前言 在上篇 浅谈 Android 内存监控(上) 中,我们聊了 LeakCanary,微信的 Matirx 和美团的 Probe,它们各自有不同的应用场景,例如,在开发测试环境,我们会偏向用 Lea ...

  5. 浅谈Java内存模型、并发、多线程

    浅谈Java内存模型.并发.多线程 Java内存模型(Java Memory Model)是围绕着在并发编程中如何处理原子性,可见性,有序性三个特性而建立的模型. 下面我简单描述一下这三个特性: 原子 ...

  6. 浅谈Metaspace内存溢出原因及JVM参数设置

    浅谈Metaspace内存溢出原因及JVM参数设置 1.Metaspace内存溢出(oom) 日志 原因分析 从Java8开始,Java中的内存模型引入了一个称为元空间(Metaspace)的新内存区 ...

  7. 浅谈软件定义网络(SDN)技术研究现状和发展趋势

                       浅谈软件定义网络(SDN)技术研究现状和发展趋势 友情全文PDF链接:浅谈软件定义网络(SDN)技术研究现状和发展趋势.pdf-网络基础文档类资源-CSDN下载 ...

  8. 5月3日云栖精选夜读:乾隆会判阿尔法狗死刑吗 ——浅谈当前人工智能的技术进化...

    人生自古谁无死,乾隆会判阿尔法狗去死?一个能打败李世石的阿尔法狗并不可怕,而一个具备打败李世石实力,但却在某些场景下故意输给李世石的阿尔法狗,那才真正可怕! 技术分享 必须使用301重定向的运用场景 ...

  9. tcp转串口_浅谈串口转以太网技术

    浅谈串口转以太网技术 1.概述串口转以太网目前可以采用串口转以太网模块来实现,变得非常简单易用,但是在该技术中出现的一些新问题.使用误区需要引起注意.串口转以太网并不是简单传输媒介的变化,而是串口到T ...

  10. 中兴服务器扩展内存,中兴首发内存融合技术 Pro:12GB RAM 变 20GB,支持 OTA 更新...

    IT 之家 7 月 23 日消息 感谢 IT 之家网友热心线索投递,中兴 Axon 30 屏下版的 MyOS 11 系统现引入全新内存融合技术 Pro,容量 +8GB,可实现 12GB+8GB=20G ...

最新文章

  1. Winform/WPF实例中的相互操作
  2. mysql tomcat idea操作_IntelliJ IDEA + Tomcat + RestFul + Mysql打造属于自己的服务器
  3. 如何用DOS命令批量删除文件?(_desktop.ini 或 thumbs.db)
  4. 连续4年财务造假 造假金额过亿!捧红杨幂的欢瑞世纪被重罚
  5. 阿里、腾讯 | 算法岗面试复盘
  6. centos php自动提示,CentOS环境实现Git命令自动补全
  7. php中mysql数据库集群,MySQL集群
  8. usionCharts 技术文档-Jsp画图
  9. 用python调用ICTCLAS50进行中文分词
  10. qq2008珊瑚虫版SL
  11. 华为OSPF多区域配置实例
  12. 五一期间完成了某市交警系统的一个系统升级迁移项目
  13. java8调用unsafe_JDK8---UnSafe类实现CAS乐观锁
  14. 1433端口被运营商封锁的解决方法
  15. 计算方法(数值分析)实验:勒让德多项式求展开的三次平方逼近多项式代码实现 java
  16. 电脑只能上qq不能打开网页
  17. 【Python案例】OCR提取图片中的文字
  18. 用GIF图片来告诉大家程序猿的真实生活 ————“你熬了一整夜、耗了一整天,开始调试代码时:” 那张最有感觉了,你们感受一下。。。
  19. 【读者群答疑】使用xlwings编程进行调试时会在后台留下若干Excel进程,如何解决?
  20. 基频分析方法汇总【笔记】

热门文章

  1. runTime动态给类添加属性
  2. markdown公式编辑参考
  3. servlet跳转问题
  4. 超越阿里云,华为云网络服务竟然这么厉害!
  5. 手淘适配-flexible
  6. 第四次团队作业--选题
  7. [转]android:clipToPadding和android:clipChildren
  8. 一步一步学习hadoop(九)
  9. PHP Cookbook读书笔记 – 第13章Web自动化
  10. 【转】ASP.NET AJAX入门系列(8):使用ScriptManager控件