当前位置: 首页 > news >正文

存算一体还是存算分离?谈谈数据库基础设施的架构选择

从一则用户案例说起

某金融用户问,数据库用服务器本地盘性能好还是外置存储好?直觉上,本地盘路径短性能应该更好。然而测试结果却出乎意料:同等中等并发压力,混合随机读写模型,服务器本地SSD盘合计4万 IOPS水平,时延竟然高达6ms,回退到机械磁盘时代的水平,而外置存储同样并发压力下30万IOPS,稳定时延在0.2ms。

I/O模型

TDSQL+本地SSD盘时延

TDSQL+外置全闪存存储时延

8KB顺序读

0.95

0.19

8KB随机读

6.1

0.33

8KB顺序写

1.8

0.32

8KB混合随机读写-读

6.4

0.2

8KB混合随机读写-写

5.7

0.25

447bb867a42dc8fc92cb8bb18e5f2bd0.png

可以看到,单靠先天物理路径上的优势或者硬件资源堆叠,并不能代表一定高效,更先进架构和算法才是决定性的竞争力。实际上,存算一体和存算分离在数据库发展史上多次反复,每一次变化都由技术进步推动而来。

第一次存算分离

初期的IT系统体量小,以存算一体为主

通用电气公司1961年开发的第一款数据库管理系统,叫做IDS(Integrated Data Store,集成数据存储),只能运行在通用电气的主机上,且只有一个文件存储在本地盘上,由本机的CPU、内存依据手工编码的指令来读写。总而言之,早期的数据库系统以存算一体的方式部署在本地盘上,有以下两点主要原因:

  • 当时的数据库属于高端应用,和各种大型机、中型机紧密绑定在一起。如当时经典的 IBM 大型机System/360,后来被熟知的数据库 DB2 最早就是运行在这个平台上,凭借在当时强大的算力和本地化存储能力,在全球各大金融机构和科研实验室占据领导地位。

  • 数据量小。以当时的银行信贷管理系统为例,这个系统的数据量在当时只有10GB左右,使用大型机的本地存储空间绰绰有余。

IT系统数据体量爆发式上涨,计算和存储开始走向分离

此后,随着互联网技术的兴起,数据库系统的数据量开始激增,传统的单机数据库服务器无法满足不断增长的大量数据的存储和访问,UNIX 系统也开始大行其道,而几乎所有的 UNIX 主机都具备了连接独立存储服务器的能力,在这一时期,面向块设备应用的存储区域网络(SAN)和面向网络文件系统的网络附加存储(NAS)方案开始占据主导,此时主要的架构方案选择由存算一体转向了存算分离架构,外置集中式共享存储设备开始流行。

94bd586fb2b5bc6fc507d5f70cdfa29c.png

商业数据库巨头 Oralce 从9i版本开始,推出了基于共享存储的RAC,RAC的各计算节点与共享存储分离,解决了数据库算力横向扩展问题和容错性问题,同时利用1000Mbps网络的普及,将缓存也以共享的概念构建了Cache Fusion,也就是被业界津津乐道的缓存融合技术,效率上的提升让 Oracle 的并发处理性能得到了质的提升。

19a145b44adaa22aae513a36a489963a.png

毫无疑问,在当时RAC的问世是革命性的,也一举奠定了 Oracle 在核心级数据库系统领域的霸主地位。在这次的存算分离当中, 最重要的支撑技术主要包括成熟的网络组网技术,以及成熟的存储网络技术,当然 Oracle 自己的杀手级技术缓存融合,也起到很大的作用。

海量数据催生的存算一体

时间来到21世纪的10、20年代,伴随着web2.0、3.0的飞速发展,越来越多的业务成为互联网业务,业务访问并发量的升级带来了数据量指数级激增。人们开始意识到,不仅仅需要获取业务生产所必须的数据,还需要获取海量数据加工之后的价值数据。于是各行业都开始在原业务基础上搭建自己的商业智能系统,来构建新型的核心业务系统,这时客户面临的最大挑战一是成本,二是吞吐量。

21705f9643c629382b7a51ad0324f719.png

因为传统小型机和高端存储阵列价格居高不下,想搭建一套自有的分析系统,在硬件和license上是一笔不小的投资,而且即便花巨资建好,数据库跑数据分析也可能很慢,找厂家定位后被告知:磁盘转速不够、网络带宽不够、CPU处理不够……总之,还得继续砸钱把硬件堆上去。

究其原因,主要是在基于传统集中式共享存储的存算分离架构下,IO有瓶颈:主机端只处理数据而不存数据,因此要去共享存储端取数据,这时从网络走一道加一层延迟,而存储端读HDD机械盘又加一层,层层加码造成了读写效率的大大降低。

Apache 基金会开发的 Hadoop 分布式基础架构利用多节点并发和本地化计算突破了IO的瓶颈,它一出生就是奔着存算一体设计的,通过将计算任务分发到存储数据所在的位置解决了在当时困扰已久的网络瓶颈问题。

bd0367a3377b3a5803a2c6cf8f3688b5.png

Hadoop 的特别之处在于存算一体化架构下的数据本地性:

  • 集群中每个实例(Instance)既负责存储数据(DataNode),也负责处理计算任务(Executor)。

  • 调度时会把计算任务尽最大可能发到要处理数据所在的实例上。

Hadoop 的第一代技术框架,用分布式解决了并发数和带宽的问题,用本地化计算解决了网络瓶颈问题,同时其包括HDFS分布式存储在内的多个 Hadoop 核心组件可以被广泛部署在低价的硬件设备之上,提升了用户的使用性价比。

云计算时代带来新一代的存算分离

随着云计算的快速发展,按需付费的概念开始深入人心,即使对于本地化部署的核心系统资源也要求能做到按需供给,那么存算一体的紧耦合架构在这时就无法满足用户需求了。而数据库技术也在往资源服务化的方向发展,把基于独立计算和共享存储的松耦合架构向前推进了一大步。

Google 在2014年的发布会上公布的开源项目 Kubernetes,使得云计算弹性扩展的优势得到充分的发挥,它是一种基于容器技术的云原生应用部署和管理的架构体系,Kubernetes 部署的应用往往被拆分成多个不同的子模块,封装在一个个容器中,被称之为“微服务”,同时各应用模块又按照是否存在持久化数据为标准,区分为有状态和无状态。当应用需要对外提供服务时,可以先利用存储接口组件连接起外置存储,构建出一个有状态的持久化数据库资源池,在此之上再根据上层业务的服务需要动态的加载各种无状态的微服务,其过程就好比集装箱在装卸货箱一样:每个货箱都是标准化的规则单位体积,可以根据车头的动力不同而选择装卸不同数量的货箱,保证每一趟车都可以拉够力所能及的箱子,同时货箱在不同的车头之间还能很方便的调换。Kubernetes 的问世,使得云基础设施中存算解耦的实现具备了技术基础。

数据库也在云原生理念潮流的推动下,演进出了能适应多变和不确定业务需求的Serverless数据库方案。传统的云数据库只是将数据库部署在云基础设施上而未对数据库做改进优化,局限于其存算一体的架构,存和算的资源比率被限制在一个范围内,其弹性范围、资源利用率都受到较大的限制。另一方面,由于节点间的Share-Nothing,新增节点必定触发跨节点的数据全量复制,性能至少下降20%。阿里云推出的 PolarDB 是典型的Serverless数据库,它能根据业务实际情况自动调整数据库的资源规模,下图是 PolarDB 技术架构:54a44b3eebf11d43b79acb9c9693d5af.png 

f5aec03603962674b7425ad92d3b0327.png

它首先将计算和存储资源进行解耦分离,存算分离的架构是Serverless能力的基础。分离后的数据统一存储在资源池中,故 PolarDB 用户在每个计算节点上都能看到所有数据,拥有着单机数据库体验感的同时,资源得到了很好的利用:存储空间支持以Serverless的方式按需自动伸缩,而计算节点不管扩展到多少个,数据也始终只有一份。

而 AWS 推出的云数据库 Aurora 则在存算分离的基础上将分布式的优势发挥得更加彻底,它将存储端由集中式资源池改为分布式集群卷,使得数据的可靠性和容错性有了更进一步的保障。下面再来简单看一看 Aurora 技术架构:

af3a459ffa3d969114044c2307e77b9e.png

Aurora 的架构有以下几个突出的特点:

  1. 将存储层作为一个跨数据中心分布式服务体系,相对于计算层而独立构建,可以灵活自由的按需扩展;

  2. 计算和存储端操作分离,互不影响。计算端将包含redo log在内的数据处理逻辑全部下推到存储端来异步执行;

  3. 计算层和存储层都使用的现有的ECS实例,并没有特殊的底层设施。也就是说,Aurora 是基于 AWS 现有的服务打造出来的,是符合云计算服务化标准的。

存算分离架构提供了充分利用云计算红利的基础,不同应用场景、不同压力下的用户业务可以随时根据需求,灵活的增加或减少对应的服务资源。同时因为存储资源也与计算资源解耦,所以也可以按需进行横向扩展,大大提高了资源利用率。

存算分离是多元数据库时代基础设施架构的最优解

可以看到,在新的技术水平下,IT栈分层解耦,专业的事通过专业的解决方案实现,存算分离架构重新成为技术演进趋势上的选择。AWS Aurora、华为云  GaussDB、阿里云 PolarDB 等都不约而同采用了共享存储的方式,通过“存算分离”架构,去提升数据库的整体能力。 

存算分离架构应用于数据库基础设施场景中时,可以带来以下价值:

  • 可靠性提升:外置的共享存储可靠性结合数据库集群本身的故障切换能力,解决了一体化方案可靠性只能依赖上层集群实现的短板。

  • 能力复用:使用共享专业分布式存储成熟的快照克隆、数据校验、亚健康检测等能力,快速提升数据库整体解决方案能力。

  • 架构开放:基于开放生态的存储底座,可快速支撑起多种不同类型数据库的运行,有利于数据库应用的平滑落地。

  • 快速迭代:软硬解耦的SDS软件定义存储架构,易于通过软件版本的更新迭代,实现存储能力的不断提升,与各种不同技术流派数据库的发展路线很好的匹配,同步演进。

云和恩墨 zData X 数据库一体机和 zStorage 高性能分布式存储软件:为数据库撑起“核心”之名

云和恩墨 zData X 数据库一体机,基于自研高性能分布式存储软件 zStorage,采用存算分离架构,是融合高性能计算、分布式全闪存存储、RoCE网络、和数据库管理服务的数据库一体化运行平台。

zData X 支持多种类型的商业、开源和国产数据库,包括 Oracle、MySQL、PostgreSQL、MogDB、达梦、人大金仓、openGauss 等。zData X 可按需配置,满足不同规模数据库的性能、可靠性和扩展性要求,提升数据库管理效率。适用于核心数据库性能加速和多元异构数据库存储资源池化部署等场景。

zData X 架构上的两个特点:

  • 存算分离,计算和存储均可以按需弹性扩展。

d20a7b2337da91fc797000dc3b4606ba.png

  • 存储端采用高性能分布式存储软件 zStorage 取代了传统架构中的集中式存储。zStorage 兼具分布式存储的高扩展性、软件定义云化能力与集中式存储的低时延、丰富的数据保护特性,为数据库提供云化的高性能、高可靠性、高扩展性数据底座。zData X 无论相对于存算一体化,还是相对基于传统集中式存储的存算分离架构,都有明显的优势。

f086819114df766e2eae83cd7597701e.png

3ed1fbe4edf9a23e7c5a9f91ec86dac7.gif

数据驱动,成就未来,云和恩墨,不负所托!


云和恩墨创立于2011年,以“数据驱动,成就未来”为使命,是智能的数据技术提供商。我们致力于将数据技术带给每个行业、每个组织、每个人,构建数据驱动的智能未来。

云和恩墨在数据承载(分布式存储、数据持续保护)、管理(数据库基础软件、数据库云管平台、数据技术服务)、加工(应用开发质量管控、数据模型管控、数字化转型咨询)和应用(数据服务化管理平台、数据智能分析处理、隐私计算)等领域为各个组织提供可信赖的产品、服务和解决方案,围绕用户需求,持续为客户创造价值,激发数据潜能,为成就未来敏捷高效的数字世界而不懈努力。

090d7f569d0756cee6cb381f68df268f.gif

相关文章:

存算一体还是存算分离?谈谈数据库基础设施的架构选择

从一则用户案例说起 某金融用户问,数据库用服务器本地盘性能好还是外置存储好?直觉上,本地盘路径短性能应该更好。然而测试结果却出乎意料:同等中等并发压力,混合随机读写模型,服务器本地SSD盘合计4万 IOPS…...

go模版引擎的使用~~

go模板语句 以下是一些go语言模板引擎的一些简单知识和使用 基础语法 重要!!!: 模板在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成动态网页&#xff0…...

我们为什么要进行敏捷开发培训

敏捷开发是一种以人为核心、迭代、循序渐进的软件开发方法。它强调团队合作、客户需求和适应变化。进行敏捷开发培训其实有多种原因,我整理了一些,可以作为参考: 理解敏捷原则和实践: 敏捷开发不仅是一种方法论,更是一…...

【算法萌新闯力扣】:合并两个有序链表

力扣题目:合并两个有序链表 开篇 今天是备战蓝桥杯的第24天及算法村开营第2天。根据算法村的讲义,来刷链表的相关题目。今天要分享的是合并两个有序链表。 题目链接: 21.合并两个有序链表 题目描述 代码思路 通过创建一个新链表,然后遍历…...

BEV+Transformer架构加速“上车”,智能驾驶市场变革开启

BEVTransformer成为了高阶智能驾驶领域最为火热的技术趋势。 近日,在2023年广州车展期间,不少车企及智能驾驶厂商都发布了BEVTransformer方案。其中,极越01已经实现了“BEVTransformer”的“纯视觉”方案的量产,成为国内唯一量产…...

Java中的jvm——面试题+答案(JVM的一些高级概念、调优技巧、垃圾回收算法等)——第13期

当涉及到Java虚拟机(JVM)时,面试官可能涉及更深入的问题,涵盖性能调优、垃圾回收算法、类加载机制等方面。 什么是类加载机制?请解释类加载的过程。 答案: 类加载是将类的.class文件加载到内存中的过程&…...

Android修行手册-ViewPager定制页面切换以及实现原理剖析

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…...

Mycat实现读写分离

Mycat实现读写分离 Mycat支持MySQL主从复制状态绑定的读写分离机制。这里实现的也是基于MySQL主从复制的读写分离。 MySQL主从复制配置 首先要配置MySQL的主从复制,这里配置的是一主一次从。可以参考下面的文章。 https://blog.csdn.net/wsb_2526/article/detail…...

Ceph----CephFS文件系统的使用:详细实践过程实战版

CephFS 介绍 是一个基于 ceph 集群 且兼容 POSIX 标准的文件系统。 创建 cephfs 文件系统时 需要在 ceph 集群中添加 mds 服务,该服务 负责处理 POSIX 文件系统中的 metadata 部分, 实际的数据部分交由 ceph 集群中的 OSD 处理。 cephfs 支持以内核模块…...

python tkinter 使用(七)

python tkinter 使用(七) 本篇文章主要讲下tkinter 中的message 控件. Message控件可以用于在窗口中显示一段文本消息. 以下是个简单的例子: #!/usr/bin/python3 # -*- coding: UTF-8 -*- """Author: zhTime 2023/11/24 上午11:38 .Email:Describe: "…...

17. Python 数据库操作之MySQL和SQLite实例

目录 1. 简介2. 使用PyMySQL2. 使用SQLite 1. 简介 数据库种类繁多,每种数据库的对外接口实现各不相同,为了方便对数据库进行统一的操作,大部分编程语言都提供了标准化的数据库接口,用户不需要了解每种数据的接口实现细节&#x…...

Kafka-TopicPartition

Kafka主题与分区 主题与分区 topic & partition,是Kafka两个核心的概念,也是Kafka的基本组织单元。 主题作为消息的归类,可以再细分为一个或多个分区,分区也可以看作对消息的二次归类。 分区的划分为kafka提供了可伸缩性、水…...

英特尔工作站:助力专业用户实现高效创作

原创 | 文 BFT机器人 英特尔工作站是由全球知名的英特尔公司设计和开发的一款计算平台。英特尔在工作站处理器领域将其产品分为性能型和移动型两类,它的诞生旨在满足专业用户在科学、工程、设计等领域对高性能计算的需求。英特尔工作站配备了最新的英特尔处理器、大…...

软件工程期末复习(选择+填空+判断)

文章目录 软件工程期末复习一、 选择题 软件工程期末复习 一、 选择题 1.“软件危机”的表现不包括:(c) A、软件产品不能按期交付 B、用户对“已完成的”软件产品时常不满意 C、程序员越来越供不应求 D、软件项目难以管理,维护困…...

群晖NAS基础设置

群晖NAS基础设置 最近一直在玩群晖NAS系统,有一些基础的配置跟大家分享一下 开启ssh登录 1.开启方法 控制面板—>终端和SNMP—>终端机 2.使用ssh软件登录 这里我用SecureCRT登录 进入ssh 3.进入root用户 starstar-nas:~$ sudo su -l root Password: ro…...

2023亚太杯数学建模A题B题C题选题建议,思路分析,模型代码

目录 ABC题思路模型代码:获取见文末名片,第一时间更新 视频连接讲解如上 A题思路:采果机器人的图像识别技术思路模型代码 B题思路:玻璃温室中的微气候法规 C题思路:我国新能源电动汽车的发展趋势 ABC题思路模型代…...

OpenGL的学习之路 -5

1.视景体 正交投影 人眼看世界,有一个可见范围。范围内可见,范围外不可见。视景体就是这么一个概念。 (上图仅学习记录用) 在OGL中,有两种投影方式,对应两种视景体。第一种,正交投影&#xf…...

【linux】服务器CPU占用50%,top/htop/ps却看不到异常进程?使用unhide可以查看!

问题描述 htop发现前32个核全被占满了,但是却找不到对应进程号 查杀 治标:杀死隐藏进程 1、unhide 安装unhide apt-get install unhideunhide使用 unhide proc果然发现了隐藏进程 kill -9 kill -9 [pid]这么多pid号,我这边杀了其中…...

JSP EL表达式获取list/Map集合与java Bean对象

上文 JSP EL表达式基本使用 中 我们对EL表达式做了一个基本的了解 也做了基础的字符串数据使用 那么 我们可以来看一下我们的集合 首先 list 这个比较简单 我们直接这样写代码 <% page import"java.util.ArrayList" %> <% page import"java.util.Lis…...

汇编程序:查找数组中最大最小值

实验内容 1. 从数据段DS中包含9个字节的数组数据VALUE中分别找出最大值&#xff08;存到max中&#xff09;、最小值&#xff08;存到min中&#xff09;。 2. 能够单步执行程序&#xff0c;认真观察、判断每条指令执行的结果是否正确&#xff0c;对错误结果&#xff0c;能够做出…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...