分布式DBMS for Enterprise

CAP定理是分布式系统理论的基石。当然,围绕它的争论不会平息:它的定义不是规范的,也没有严格的证明……尽管如此,坚定地坚持常识™的立场,我们凭直觉就知道该定理是正确的。







唯一不明显的是字母“ P”的含义。划分群集时,它决定是在达到仲裁之前不响应还是提供实际数据。根据选择的结果,系统分为CP或AP。例如,Cassandra可以按照这种方式运行,甚至不取决于集群设置,而是取决于每个特定请求的参数。但是,如果系统不是“ P”并且已经分裂,那又如何呢?



这个问题的答案有些出乎意料:CA群集无法拆分。

无法分裂的集群是什么?



这种群集的必不可少的属性是共享数据存储系统。在大多数情况下,这意味着通过SAN进行连接,这将CA解决方案的使用限制为可以包含SAN基础结构的大型企业。为了使多个服务器能够使用相同的数据,需要集群文件系统。此类文件系统可在HPE(CFS),Veritas(VxCFS)和IBM(GPFS)的产品组合中找到。



甲骨文RAC



Real Application Cluster选项首先出现在2001年的Oracle 9i版本中。在这样的集群中,多个服务器实例与同一个数据库一起工作。

Oracle既可以使用群集文件系统,也可以使用其自己的解决方案-ASM(自动存储管理)。



每个副本都有自己的日记。在一个实例中执行并提交事务。在实例发生故障的情况下,尚存的群集节点(实例)之一将读取其日志并恢复丢失的数据,从而确保可用性。



所有实例都维护自己的缓存,并且相同的页面(块)可以同时位于多个实例的缓存中。此外,如果一个实例需要一个页面,并且该页面位于另一个实例的缓存中,则可以使用缓存融合机制从“邻居”获取页面,而不是从磁盘读取。







但是,如果其中一个实例需要更改数据怎么办?



Oracle的特点是它没有专用的锁定服务:如果服务器要锁定一行,则锁定记录将直接放置在锁定行所在的内存页面上。这种方法使Oracle成为整体数据库的性能冠军:锁定服务永远不会成为瓶颈。但是在群集配置中,此体系结构可能导致大量的网络流量和死锁。



一旦记录被阻止,该实例就会通知所有其他实例:已以独占模式获取了存储记录的页面。如果另一个实例需要更改同一页上的记录,则它必须等待直到提交该页上的更改为止,也就是说,将更改信息写入磁盘上的日志中(并且事务可以继续)。也可能会依次更改页面几份,然后将页面写入磁盘时,您必须找出谁拥有此页面的当前版本。



意外地在不同的RAC节点之间刷新相同的页面会大大降低数据库性能-导致群集性能比单个实例慢。



Oracle RAC的正确用法是对数据进行物理分区(例如,使用分区表机制),并通过专用节点访问每组分区。 RAC的主要目的不是水平缩放,而是容错。



如果节点停止响应心跳,则首先检测到该节点的节点将启动磁盘投票过程。如果此处未记录丢失的节点,则其中一个节点负责数据恢复:



  • “冻结”丢失节点的缓存中的所有页面;
  • 读取丢失节点的日志(重做),并重新应用这些日志中记录的更改,以及检查其他节点是否具有更新版本的页面;
  • 回滚未提交的事务。


为了简化节点之间的切换,Oracle具有服务的概念-虚拟实例。一个实例可以提供多种服务,并且一个服务可以在节点之间移动。为基础的某个部分(例如,一组客户端)服务的应用程序实例使用一个服务,当一个节点发生故障时,负责基础的这一部分的服务将移动到另一个节点。



IBM Pure Data Systems用于事务



DBMS的群集解决方案于2009年出现在Blue Giant产品组合中。从理论上讲,它是在“常规”硬件上构建的Parallel Sysplex集群的后继者。 2009年,DB2 pureScale作为软件套件发布了,2012年,IBM提供了一种称为Pure Data Systems for Transactions的设备。不应将其与用于分析的Pure Data Systems混淆,后者不过是重命名的Netezza。



pureScale体系结构乍一看就像Oracle RAC:以同样的方式,多个节点连接到共享存储系统,并且每个节点运行自己的DBMS实例,并具有自己的内存区域和事务日志。但是与Oracle不同,DB2具有由db2LLM *进程集表示的专用锁定服务。在群集配置中,此服务放置在单独的节点上,在并行Sysplex中称为耦合工具(CF),在Pure Data中称为PowerHA。



PowerHA提供以下服务:



  • 锁管理器;
  • 全局缓冲区缓存;
  • 进程间通信领域。


远程内存访问用于将数据从PowerHA传输到数据库节点,反之亦然,因此集群互连必须支持RDMA协议。 PureScale可以在以太网上同时使用Infiniband和RDMA。







如果节点需要一个页面,而该页面不在高速缓存中,则该节点将在全局高速缓存中请求一个页面,并且仅当该页面不存在时,它才会从磁盘读取该页面。与Oracle不同,查询仅针对PowerHA,而不针对邻近节点。



如果实例将要更改字符串,它将在独占模式下将其阻止,而字符串所在的页面将处于共享模式。所有锁都在全局锁管理器中注册。事务完成后,节点将消息发送给锁管理器,锁管理器将修改后的页面复制到全局缓存中,释放锁,并使其他节点的缓存中的修改后的页面无效。



如果包含修改后的字符串的页面已被锁定,则锁定管理器将从进行更改的节点的内存中读取修改后的页面,释放该锁,使其他节点的缓存中的修改后的页面无效,然后将页面锁定提供给请求它的节点。



可以从常规节点和PowerHA(输出)将“脏”(即已更改)页面写入磁盘。



如果pureScale节点之一发生故障,则恢复将仅限于发生故障时尚未完成的事务:该节点在已完成的事务中修改的页面位于PowerHA的全局高速缓存中。节点在其中一台群集服务器上以精简配置重新启动,回滚未提交的事务并释放锁。



PowerHA在两台服务器上运行,并且主节点同步复制其状态。如果主PowerHA节点发生故障,集群将继续与备用节点一起运行。

当然,如果您通过单个节点访问数据集,则总体群集性能会更好。PureScale甚至可能注意到某个节点正在处理某些数据区域,然后与该区域相关的所有锁将由该节点在本地处理,而无需与PowerHA通信。但是,一旦应用程序尝试通过另一个节点访问此数据,集中锁处理将恢复。



内部IBM基准测试(读取工作量为90%,写入工作量为10%)非常类似于真实的生产负载,显示出最多可线性扩展到128个节点。conditions,没有公开测试条件。



HPE NonStop SQL



惠普企业产品组合还具有自己的高可用性平台。这是Tandem Computers在1976年推出的NonStop平台。 1997年,该公司被康柏(Compaq)接管,康柏随后于2002年与惠普合并。



NonStop用于构建关键应用程序,例如HLR或银行卡处理。该平台以软硬件复合体(设备)的形式交付,其中包括计算节点,数据存储系统和通信设备。 ServerNet(在现代系统中为Infiniband)既可用于节点之间的交换,又可用于访问数据存储系统。



该系统的早期版本使用彼此同步的专有处理器:所有操作都是由多个处理器同步执行的,并且一旦其中一个处理器出现错误,便将其关闭,而另一个继续运行。后来,系统切换到常规处理器(首先是MIPS,然后是Itanium,最后是x86),并且其他机制开始用于同步:



  • 消息:每个系统进程都有一个“影子”双胞胎,活动进程会定期向其发送有关其状态的消息;如果主进程失败,则影子进程从最后一条消息确定的那一刻开始工作;
  • : , , ; , /.


自1987年以来,关系DBMS一直在NonStop平台上运行-首先是SQL / MP,然后是SQL / MX。



整个数据库分为多个部分,每个部分负责其自己的数据访问管理器(DAM)流程。它提供了数据写入,缓存和锁定机制。数据处理由Executor服务器进程处理,该进程在与各个数据管理器相同的节点上运行。 SQL / MX调度程序在执行程序之间划分任务,并合并结果。如果需要进行一致的更改,则使用TMF(事务管理工具)库提供的两阶段提交协议。







NonStop SQL能够对进程进行优先级排序,以便较长的分析查询不会干扰事务的执行。但是,其目的恰恰是处理空头交易,而不是分析。开发人员保证NonStop群集的可用性为“五个”级别,即每年停机时间仅为5分钟。



SAP HANA



HANA DBMS(1.0)的第一个稳定版本于2010年11月发布,SAP ERP软件包于2013年5月移至HANA。该平台基于购买的技术:TREX搜索引擎(在列式存储中搜索),P * TIME和MAX DB。



“ HANA”一词本身是首字母缩写词,即高性能分析设备。该DBMS以可以在任何x86服务器上运行的代码的形式提供,但是,仅允许在经过认证的设备上进行工业安装。有来自惠普,联想,思科,戴尔,富士通,日立,NEC的解决方案。某些Lenovo配置甚至允许在没有SAN的情况下进行操作-本地磁盘上的GPFS群集起着共享存储的作用。



与上面列出的平台不同,HANA是内存中的DBMS,也就是说,数据的主映像存储在RAM中,并且只有日志和定期快照才会写入磁盘以备灾难时进行恢复。







HANA群集的每个节点负责其自己的数据部分,并且数据映射存储在协调器节点上的特殊组件-名称服务器中。节点之间的数据不重复。锁定信息也存储在每个节点上,但是系统具有全局死锁检测器。



HANA客户端在连接到群集时,将加载其拓扑,然后可以根据所需的数据直接访问任何节点。如果事务影响单个节点的数据,则可以由该节点在本地执行该事务,但是如果多个节点的数据发生更改,则发起者节点将与协调器节点联系,协调器节点打开并协调分布式事务,并使用优化的两阶段提交协议对其进行提交。



协调器节点是重复的,因此,如果协调器发生故障,备用节点将立即接管。但是,如果有数据的节点发生故障,那么访问其数据的唯一方法是重新启动该节点。通常,在HANA群集中会保留一个备用服务器,以便尽快重新启动丢失的节点。



All Articles