首页 > 其他分享 >openGauss MOT纵向扩容架构

openGauss MOT纵向扩容架构

时间:2024-04-29 14:11:50浏览次数:24  
标签:事务性 MOT 引擎 FDW 架构 openGauss 核数

MOT纵向扩容架构

纵向扩容即为同一台机器添加额外的核以增加算力。纵向扩容是传统上为单对控制器和多核的机器增加算力的常见形式。纵向扩容架构受限于控制器的可扩展性。

技术要求

MOT旨在实现以下目标:

  • 线性扩容:MOT提供事务性存储引擎,利用单个NUMA架构服务器的所有核,以提供近线性的扩容性能。这意味着MOT的目标是在机器的核数和性能提升倍数之间实现直接的、近线性的关系。

说明:

MOT的近线性扩容效果明显优于所有现有方案,并且尽可能接近于获得最佳效果,因现有方案皆受限于硬件(如电线)的物理限制和局限性。

  • 无最大核数限制:MOT对最大核数不做任何限制。这意味着MOT可从单核扩展到高达1000秒的多核,并且新增的核退化速度最小,即便是在跨NUMA槽位边界的情况下。
  • 极高的事务性吞吐量:MOT提供了一个事务性存储引擎,与市场上任何其他OLTP供应商相比,它能够实现极高的事务性吞吐量。
  • 极低的事务性时延:与市场上任何其他OLTP供应商相比,MOT提供事务性存储引擎,可以达到极低的事务时延。
  • 无缝集成和利用openGauss产品:MOT事务引擎与openGauss产品标准无缝集成。通过这种方式,MOT最大限度地重用了位于其事务性存储引擎顶部的openGauss层功能。

设计原则

为了实现上述要求(特别是在多核的环境中),我们存储引擎的体系结构实施了以下技术和策略:

  • 数据和索引只存在于内存中。
  • 数据和索引不用物理分区来布局(因为对于某些类型的应用程序,这些分区的性能可能会降低)。
  • 事务并发控制基于乐观并发控制(OCC),没有集中的争用点。有关OCC的详细信息,请参见MOT并发控制机制
  • 使用平行重做日志(最后单位为核)来有效避免中央锁定点。
  • 使用免锁索引。有关免锁索引的详细信息,请参见MOT索引
  • 使用NUMA感知内存分配,避免跨槽位访问,特别是会话生命周期对象。有关NUMA感知的更多信息,请参见NUMA-aware分配和亲和性
  • 使用带有预缓存对象池的自定义MOT内存管理分配器,避免昂贵的运行时间分配和额外的争用点。这种专用的MOT内存分配器按需预先访问操作系统中较大的内存块,然后按需将内存分配给MOT,使内存分配更加高效。

使用外部数据封装(FDW)进行集成

MOT遵循并利用了openGauss的标准扩展机制——外部数据封装(FDW),如下图所示。

在PostgreSQL外部数据封装特性的支持下,作为其他数据源的代理的MOT数据库可以创建外表,如MySQL、Redis、X3等。当对外表执行查询时,FDW将查询外部数据源并返回结果,就像查询内表一样。

openGauss依赖PostgreSQL外部数据封装和索引支持,因此SQL完全覆盖,包括存储过程、用户定义函数、系统函数调用。

图 1 MOT架构

上图中绿色表示MOT引擎,蓝色表示现有的openGauss组件。由此可见,FDW在MOT引擎和openGauss组件之间进行中介。

与MOT相关的FDW定制

通过FDW集成MOT可以重用最上层的openGauss功能,从而显著缩短MOT的上市时间,同时不影响SQL的覆盖范围。

但是,openGauss中原有的FDW机制并不是为存储引擎扩展而设计的,因此缺少以下基本功能:

  • 查询规划阶段待计算的外表的索引感知
  • 完整的DDL接口
  • 完整的事务生命周期接口
  • 检查点接口
  • 重做日志接口
  • 恢复接口
  • 真空接口

为了支持所有缺失的功能,SQL层和FDW接口层已扩展,从而为插入MOT事务存储引擎提供必要的基础设施。

结果:线性扩容

以下是上述MOT设计原则和实现的结果:

MOT在符合ACID工作负载的事务吞吐量方面优于所有现有的工业级OLTP数据库。

openGauss和MOT在以下多核系统上进行了测试,性能可扩展性良好。在x86架构Intel和ARM/鲲鹏架构的多核服务器上进行了测试。详细的性能评估请参见MOT性能基准

以2020年6月的TPC-C基准测试了一台泰山2480服务器上的openGauss MOT数据库(4路ARM/鲲鹏服务器,吞吐量:480万tpmC)。下图显示了MOT数据库的近线性性质,即MOT数据库通过增加核数显著提高性能。

图 2 ARM上的TPC-C(256核)

下面是另一个测试示例,一台基于x86的服务器上也显示了CPU使用率。

图 3 tpmC 对比CPU使用率

图表显示,MOT性能提高与核数增加有显著的相关性。随着核数的增加,MOT对CPU的消耗也越来越大。其他行业解决方案不能提高MOT性能,有时性能甚至略有下降,影响客户的CAPEX和OPEX支出以及运营效率。这是数据库行业的公认问题。

详情查看:https://opengauss.org

详情查看:https://docs-opengauss.osinfra.cn

标签:事务性,MOT,引擎,FDW,架构,openGauss,核数
From: https://www.cnblogs.com/renxyz/p/18165555

相关文章

  • openGauss mysql_fdw
    mysql_fdwmysql_fdw是一款开源插件。openGauss基于开源的mysql_fdwRelease2.5.3版本进行开发适配。编译和使用mysql_fdw需要环境上包含MariaDB的开发包,所以openGauss默认不编译mysql_fdw,下面依次介绍如何编译和使用mysql_fdw。编译mysql_fdw编译mysql_fdw需要安装MariaDB的......
  • openGauss NUMA-aware分配和亲和性
    NUMA-aware分配和亲和性非统一内存访问(NUMA)是一种计算机内存设计,用于多重处理,其中内存访问时间取决于内存相对于处理器的位置。处理器可以利用NUMA的优势,优先访问本地内存(速度更快),而不是访问非本地内存(这意味着它不会访问另一个处理器的本地内存或处理器之间共享的内存)。MOT内存......
  • openGauss 创建和管理分区表
    创建和管理分区表背景信息openGauss数据库支持的分区表为范围分区表、间隔分区表、列表分区表、哈希分区表。范围分区表:将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期,例如将销售数据按照月份进......
  • mORMot 1.18 第08章 Delphi中的服务器端JavaScript
    mORMot1.18第8章Delphi中的服务器端JavaScript在mORMot框架中,对JavaScript脚本的支持被称为MonkeyOnRails(版权归PavelMashlyakovsky所有,邮箱:[email protected]),它借助了Mozilla基金会的SpiderMonkey类。mORMot允许程序员编写功能强大的应用程序,但如果客户希望自定义应用......
  • 大厂50万节点监控系统架构设计&Prometheus底层源码级剖析
    大厂50万节点监控系统架构设计&Prometheus底层源码级剖析 设计和实现一个大规模监控系统需要深入考虑架构设计、可伸缩性、性能优化等方面。下面是一个关于大规模监控系统架构设计的简要指南,以及有关Prometheus底层源码的剖析:大规模监控系统架构设计:1.架构设计原......
  • mORMot 1.18 第07章 简单的读写操作
    mORMot1.18第七章简单的读写操作本章描述了典型的数据读写操作。首先,我们将注意力集中在数据上,而不是函数。读取操作返回一个TID,它是一个32位或64位整数(取决于你的内存模型),反映了表的信息。TID在表中的每一行都是唯一的。ORM的新手可能会感到惊讶,但通常你不需要创建SQL查询......
  • 企业架构管控的探索与实践
    当前,传统的组织结构和信息系统已经难以满足企业的发展需求,众多企业面临着数字化转型战略落地难、信息孤岛、系统集成度低和互操作性低等问题,导致业务流程不畅、资源浪费和效率低下。为此,企业需要一种能够全面描述和分析现状,并能对企业做出合理诊断和规划的方法。企业架构正是方法......
  • openGauss MOT本地内存和全局内存
    MOT本地内存和全局内存SILO管理本地内存和全局内存,如所示。全局内存是所有核共享的长期内存,主要用于存储所有的表数据和索引。本地内存是短期内存,主要由会话使用,用于处理事务及将数据更改存储到事务内存中,直到提交阶段。当事务需要更改时,SILO将该事务的所有数据从全局内存复......
  • openGauss MOT并发控制机制
    MOT并发控制机制通过大量研究,我们找到了最佳的并发控制机制,结论为:基于SILO[的OCC算法是MOT中最符合ACID特性的OCC算法。SILO为满足MOT的挑战性需求提供了最好的基础。说明:MOT完全符合原子性、一致性、隔离性、持久性(ACID)特性,如MOT简介所述。下面介绍MOT的并发控制机制。......
  • openGauss MOT查询原生编译_JIT
    MOT查询原生编译(JIT)MOT使您可以在执行之前以原生格式(使用PREPARE语句)准备并分析预编译的完整查询。这种本机格式以后可以更有效地执行(使用EXECUTE命令)。这种类型的执行效率要高得多,因为在执行期间,本机格式绕过了多个数据库处理层。这种分工避免了重复的解析分析操作。LiteExecu......