探索云原生数据库技术:构建高效可靠的云原生应用

数据库是应用开发中非常重要的组成部分,可以进行数据的存储和管理。随着企业业务向数字化、在线化和智能化的演进过程中,面对指数级递增的海量存储需求和挑战以及业务带来的更多的热点事件、突发流量的挑战,传统的数据库已经很难满足和响应快速变化和持续增长所带来的业务诉求。伴随云原生理技术的不断普及,在数据库这个维度上也带来了巨大的变化。那就是云原生数据库技术的出现和被普及。

云原生数据库是一种通过云平台进行构建、部署并交付给用户的云服务,它专门为云环境设计的数据库,它可以自动扩展和缩减资源,提供高可用性和数据安全性,同时支持多种数据模型和编程语言。相对于传统数据库,它最大的不同就是以云原生的形式进行交付,它具备传统数据库所不具备的直接访问性和运行时的可伸缩性,属于 DBaaS 平台(DataBase as a Service)。

1、云原生关系型数据库

关系型数据库在当前软件研发领域一致都是最主流的数据库类型,而云原生关系型数据库在其架构上有着非常大的优势,具体体现在:

资源池化、大容量、高性价比

传统关系型数据库需要自行适配硬件,如果要扩展,需要购买设备。而云原生数据库从一开始就充分享受了云平台的各种技术优势,资源共享池化,可以存储海量的数据,同时提升了资源的利用率,让小公司也可以享受到像 BAT 这些大公司才能使用的先进硬件及部署环境。所使用的资源可以按需付费,只需要对使用的部分买单即可,降低了成本。

提供极致弹性

云原生数据库可以实现计算和存储分离,CPU、内存和存储这些都可以独立弹性,支持独立扩展,变配速度快,可以满足不断变化的多种业务需求,实现完全 Serverless 化。

强大的容灾能力和可靠性

云原生数据库充分利用强大的云基础设施,提供跨节点容灾支持。

云原生数据库充分利用新技术新硬件,比如,利用 RDMA(Remote Direct Memory Access,远程直接数据读取)技术实现分布式共享存储,通过数据的多副本技术提升容灾能力。

云原生数据库充分提升跨区域的复制能力,提升高可用能力,保证用户业务的可用性。

完全托管

云原生数据库完全托管给云平台,用户无须负责硬件的购买和部署、软件错误的修复、实例参数的配置、监控的开发、数据的备份和管理等工作。

智能化和自动化的管控平台

云原生数据库将机器学习、人工智能技术与数据库内核相结合,使得数据库更加智能化和自动化,实现自感知、自决策、自恢复和自优化。

2、云原生数据库技术分析

云原生数据库一致持续进行着技术演进。在硬件资源方面,CPU/内存/存储的独立资源化对资源间的互联提出了很高的要求,各个节点之间,包括存储节点、计算节点甚至内存池节点的互联,都需要高性能 RDMA 网络甚至其他新总线的支持。在软件方面,因为资源的池化并不能在操作系统层面实现完全透明,数据库需要对功能模块进行拆分和重构,以实现不同的组件通过高速网络在不同的物理机的互连和运行,从而实现性能的最大化。

OLTP 数据库作为一个整体,需要在资源分离的情况下,对外保证 ACID(原子性、一致性、隔离性和持久性)和外部一致性,因此需要高效的分布式缓存、分布式锁和分布式事务机制来保证读写的快速弹性和整体的高性能。另外,在保证正确性的前提下,需要减少节点之间数据日志的通信量。

基于阿里的 PolarDB 对云原生数据库的核心技术进行分析如下:

计算存储分离技术

云原生时代要求数据库具备海量的计算能力和数据存储能力。在这样的场景下,传统数据库的计算和存储耦合架构的缺点逐渐暴露,

  • 资源浪费:计算能力、存储能力达到瓶颈,虽然这两种情况往往不会同时发生,但单纯增加机器必然导致资源浪费
  • 扩展麻烦:在计算和存储耦合的模式下,如果单纯增加设备,总会或多或少衍生出数据迁移和系统重新配置的问题,扩展能力弹性不足

计算和存储耦合架构在云原生时代暴露出了缺乏弹性的严重问题。而在云原生数据库中已经实现了存储资源的独立扩展。基于分布式存储的云原生数据库 PolarDB 就已经实现了存储资源的池化及独立扩展。

计算和存储分离架构为云原生数据库带来了计算和存储上的实时水平扩展能力,实现了计算能力上的极致弹性。由于单个数据库实例的计算能力有限,传统做法往往是通过搭建多个数据库副本分担压力,从而提供数据库扩展能力。然而这种做法需要存储多份全量数据,日志数据频繁同步造成了过高的网络开销成本。同时,在传统数据库集群上,增加副本需要同步所有增量数据,这又带来了同步延迟上涨问题。所以,PolarDB 采用了共享存储集群的数据架构,实现多个计算节点可以挂载同一份存储。计算节点可以单独扩展,支持一写多读集群的部署,且提供读扩展能力,支持在分钟级扩展到15个读节点。

PolarDB 的系统架构图如下:

(图片来自于网络)

计算内存分离技术

计算和存储分离的云原生架构虽然实现了计算和存储资源的独立弹性,但计算节点仍然包含 CPU 和内存,无法实现这两者的秒级弹性扩容收缩。与此同时,在很多业务场景下,这两者的业务需求很不一样,所以云原生数据库也在尝试计算和内存的分离技术。

具体实现的核心点一般包括:

  • 缓冲区通过单独进程进行管理,允许页面缓存独立于数据库。在出现数据库故障时,页面缓存将保留在内存中,确保数据库重启时不用重新加载数据,而是直接使用最新状态预热缓冲池
  • 保留数据库实例崩溃前的数据内存状态
  • 数据库崩溃重启时不必再执行“故障恢复”的过程(即回放日志以保障数据的一致性)

除了独立缓存技术,PolarDB 在 CPU 和内存分离方面有一些它独特的创新技术:

  • 数据库实例的 CPU 和内存资源可以部署在不同的物理机上,并通过 RDMA 高速互联。因此,CPU 和内存资源占比不再固定,而是可以根据业务负载动态变化。所有 CPU 和内存资源都可以在集群资源池的维度进行分配,利用业务的错峰和水位,有效提升资源的利用率,降低整体成本
  • 引入了独立的分布式共享内存池。在此架构下,同一个数据库实例的内存可以由位于不同内存节点上的多块内存组成。因此,缓冲区的大小不再受物理机限制
  • 在 CPU 和内存分离后,PolarDB 的计算进程不再包含大量内存,而是只有少量高速缓存。这使得计算进程变成了无状态的节点,从而实现了快速的跨物理机弹性

高可用及数据的一致性

高可用率和灾难恢复能力是数据库的重要考量因素。云原生数据库通过多副本技术确保数据的可靠性。

PolarDB 通过 PolarFS 分布式文件系统实现了数据多副本及一致性。PolarFS 是国内首款面向 DB 应用设计的、采用了全用户空间 I/O 栈的低延迟高性能分布式存储系统。PolarFS 对 Raft 协议进行了优化,实现了 Parallel-Raft 算法,大幅提高了数据同步保证一致性的能力,以分布式集群的方式提供了优异的存储容量与存储性能的扩展能力。在一个主集群三个副本的基础上,PolarDB 还包含了一个跨机房的备节点,以提供多机房容灾能力。

(图片来自于网络)

PolarDB 在存储层(PolarStore)提供了三个副本的同时,还通过自研的 x-Paxos 库提供了跨节点、跨机房的数据同步,以此提供跨 AZ 级别的容灾、RPO=0 的解决方案。这个方案利用 PolarDB 自主物理复制能力,提供更可靠、更低延迟的复制。相比 RDS 和 MySQL 的逻辑日志复制,PolarDB 在节点切换时,受大事务、DDL 的影响更小,且可以保证 RTO 小于一分钟。PolarDB 三个节点分别用于部署 Leader、Follower 和 Log 节点。其中,Log 节点只记录日志,不参与选主,不存储数据,部署成本相比现在的架构多了 Active Redo Log,但成本增加很少。

(图片来自于网络)

数据及日志的复制技术

PolarDB 为代表的云原生数据是基于 MySQL 发展而来的,MySQL 数据库多采用逻辑日志和并行回放技术以提升备节点的性能。然而,逻辑日志只能在事务提交时产生,备节点也只能在主节点完成提交后才能在本地状态机中回放出主节点的状态。一旦遇到较大的事务,这种主备之间的延迟将会非常明显。另一方面,虽然 MySQL 具备并行回放能力,但由于回放的并行粒度较大,因此常受限于实际的使用场景。如在单表更新频繁的场景中,实际上备节点只能做到串行回放。同时,采用共享存储架构,虽然多个节点是读取同一份存储数据,但各个计算节点的 in-memory 数据仍需要保持一致,这个“物理”的数据一致性是逻辑复制无法做到的。所以,要想从根本上解决该问题,势必需要将逻辑日志复制演进为物理日志复制。物理日志即在数据库更新时产生的写前日志,这种日志一般针对数据库页面修改而产生,每个页面的修改对应于一条或者多条日志项。如果复制物理日志并在备节点上回放,那么数据库就具备了复制内容少、备节点上可执行更细粒度的并行回放(可以页面为粒度进行并行回放)等优势。

PolarDB 从架构设计开始就纳入了物理复制的思路。在代码实现中,PolarDB 在内核层面实现了大量优化,从而可以更好地适配 PolarFS 和 PolarStore。比如,在 Redo Log 中加入一些元数据,以减少日志解析时的 CPU 开销。这个简单优化减少了 60% 的日志解析成本。另外,PolarDB 也重用了一些数据结构,以减少内存分配器的开销。

(图片来自于网络)

跨地域高可用技术

随着数字经济时代的到来,越来越多的商业行为逐渐数字化,这就对互联网基础设施提出了越来越高的要求。数据库作为最基础的服务设施,需要达到数据零丢失、服务零间断等标准才能在最极端的环境下满足业务最苛刻的需求。为满足双零需求,在设计上,数据库架构多采用异地多活的部署模式:将数据库系统跨越一定的物理距离部署在多个地域,要求多个地域内的数据保持一致,并在某个地域发生故障时可以切换到另外一个可用域,且该切换要做到数据不丢失、应用无感知。同城三中心、跨城五副本等架构正逐渐成为业务标配。在这些需求下,云数据库不但要做到地域内的多节点和多副本,更要支持跨区域的多点复制、迁移和服务功能。

为了解决跨地域高可用的强需求,全球跨地域部署的强一致高可用解决方案不断涌现。 PolarDB 推出了全球数据库(PolarDB Global Database Network,PolarDB-GDN)解决方案,目前已覆盖全球 10 余个地域。PolarDB-GDN 主要解决了跨地域的数据读写问题和高网络延迟下的数据同步问题。全球数据库内的主集群与只读集群间采用了高速并行物理复制的技术,所有集群间的数据都保持同步,且在全球范围内的延迟控制在2秒之内,这大大降低了非中心区域应用访问的读取延迟。

Serverless 及多租户技术

云原生数据库的一个特点是能够提供按需分配的资源。随着资源的完全池化,整个数据中心(甚至多个数据中心)相当于现在的一台物理机,上面只有一个多租户的云原生数据库,每个用户都可以不受限制地扩展其读写能力:一个用户可以瞬间使用大量 CPU 或内存资源支撑起业务高峰。因为所有资源的完全池化,CPU、内存、存储使用率均可达到较高水平,所有资源都按量计费,相同的服务器资源可以支撑更多的用户业务,从而提升产品的竞争力。

HTAP

传统的企业数据库系统根据其主要功能和性能不同,可分为 OLTP(OnLine Transaction Processing,联机事物处理)系统和 OLAP(OnLine Analytic Processing,联机分析处理)系统。在传统数据库架构中,OLTP 数据库和 OLAP 数据库是完全分离的。随着新业务需求的不断衍生,OLTP 数据库往往还需要具备执行一些分析类 SQL 查询的能力。对分析需求不高的业务,企业可以节约极大的数据库成本。兼具 OLTP 和 OLAP 能力的 HTAP(Hybrid Transaction/Analytical Processing,混合事务/分析处理)系统已成为数据库发展的重要趋势。目前,越来越多主流的 OLTP 数据库加强了其执行复杂 SQL 的能力。可以预见,OLTP 数据库将持续在执行框架、数据格式、副本形态、软硬件设计等方面加强执行复杂分析 SQL 的能力,成为兼具 OLTP 和 OLAP 能力的 HTAP 数据库。

3、云原生多模数据库

随着业务的不断多样化,应用对于数据的多类型处理能力提出了新的要求,而传统多套系统组合解决方案又具有架构复杂、维护成本高、起步门槛高等痛点,使得企业对于数据库系统提供多模能力的诉求越发凸显。

为了适应不断演进的业务需求,云原生 NoSQL 数据库必须具备多模的能力,成为云原生多模数据库:实现一种数据库服务多种数据模型的能力,并内置数据模型的转化与统一的访问语言。

主流 NoSQL 多模数据库的实现方式通常是先将数据模型抽象为 KV 数据,再由 KV 数据通过存储引擎存储于硬件介质之上。以 KV 数据抽象为基础实现多模能力,工程复杂度低,但对于时序或者图这类具备显著数据特征的数据模型来说,却不能最大程度地发挥其能力优势。

4、数据库安全

数据安全是企业的生命线,而数据库又是对最核心数据进行计算和存储的部分,所以数据库在企业中通常处于最核心的位置。从机房、网络、服务器、数据交换设备、操作系统、应用程序到数据库自身,数据库所处的环境异常复杂,安全隐患非常多。在传统线下环境中,要想完整建设如此多环节的安全体系,从成本、可运维性、稳定性角度而言,所面临的挑战非常大。同时,安全能力的迭代和运营也需要持续进行,稍有不慎就会导致数据泄露和数据破坏的问题发生。

随着云原生数据库的普及,数据库安全机制云原生化的需求日益强烈。相比传统云下数据中心,云原生安全体系具有开箱即用、可弹性伸缩、自动进化与修复的能力。从安全漏洞、数据破坏等角度出发,云原生保护能力比传统线下基于边界的安全形态更有优势。云原生数据库在敏感数据加密能力上提供了全链路端到端的加密手段,以针对服务面和控制面的内外部人员操作进行全面的访问授权、审计和监测,对审计日志提供基于区块链技术的防篡改能力,使云原生数据库更加安全与可信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/735891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年终总结——跌跌撞撞不断修正

目录 一、回顾1.一月,鼓足信心的开始2.二月,焦躁不安3.三月,路还是要一步一步的走4.四月,平平淡淡的前行5.五月,轰轰烈烈的前行6.六月,看事情更底层透彻了7.七月,设计模式升华月8.八月&#xff…

04hive数仓内外部表复杂数据类型与分区分桶

hive内部表和外部表 默认为内部表,外部表的关键字 :external内部表:对应的文件夹就在默认路径下 /user/hive/warehouse/库名.db/外部表:数据文件在哪里都行,无须移动数据 # students.txt 1,Lucy,girl,23 2,Tom,boy,2…

Kafka的分区机制

Kafka的分区机制是其核心功能之一,旨在提高可扩展性和并行处理能力。下面概述了Kafka分区的基本概念和工作原理: Kafka分区基本概念 分区(Partition):Kafka中的主题(Topic)可以细分为多个分区…

政安晨:【深度学习处理实践】(五)—— 初识RNN-循环神经网络

RNN(循环神经网络)是一种在深度学习中常用的神经网络结构,用于处理序列数据。与传统的前馈神经网络不同,RNN通过引入循环连接在网络中保留了历史信息。 RNN中的每个神经元都有一个隐藏状态,它会根据当前输入和前一个时…

Java EE之wait和notify

一.多线程的执行顺序 由于多个线程执行是抢占式执行,就会导致顺序不同,同时就会导致出现问题,就比如俩个线程同时对同一个变量进行修改,我们难以预知执行顺序。 但在实际开发中,我们希望代码按一定的逻辑顺序执行&am…

计算机视觉——P2PNet基于点估计的人群计数原理与C++模型推理

简介 人群计数是计算机视觉领域的一个核心任务,旨在估算静止图像或视频帧中的行人数量。在过去几十年中,研究人员在这个领域投入了大量的精力,并在提高现有主流基准数据集性能方面取得了显著进展。然而,训练卷积神经网络需要大规…

matlab阶段学习笔记小节2

syms定义符号变量 求极限 第二题 第三题 limit(y,n,inf);求的的函数y关于自变量n在无穷处(inf)的极限 exp(2)即指数为2,底为e,也就是e^2 求导数 第一题 log(x)默认是以e为底的指数函数,也就是ln(x). 使用diff(f)对函数进行求…

算法-双指针、BFS与图论-1113. 红与黑

题目 思路 本题相当于问BFS中的当前点所在的区域连通块有多少个 Flood Fill算法 (可参考以下链接:洪水覆盖算法(Flood Fill):颜色填充-CSDN博客)本题用DFS实现Flood Fill算法DFS是否需要恢复现场:(重要&am…

新IDEA电脑环境设置

1.设置UTF-8 2.Maven 3.JRE选对

【漏洞复现】华三用户自助服务产品dynamiccontent.properties.xhtml接口处存在RCE漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

VUE+HBuilder的uniapp技术路线开发应用使用总结

使用总结 本来想做一个记录日常数据的应用,主要在Android端使用,后来发现在uniapp中使用sqllite数据库不是像原生中那样简单(所以当前准备去进行另一个路线,就是给我使用的电脑都安装一个portalble的服务端,用来记录数据&#xf…

java中使用rabbitmq

文章目录 前言一、引入和配置1.引入2.配置 二、使用1.队列2.发布/订阅2.1 fanout(广播)2.2 direct(Routing/路由)2.3 Topics(主题)2.4 Headers 总结 前言 mq常用于业务解耦、流量削峰和异步通信,rabbitmq是使用范围较广,比较稳定的一款开源产品,接下来我们使用springboot的sta…

角蜥优化算法 (Horned Lizard Optimization Algorithm ,HLOA)求解无人机路径优化

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。 二、算法介…

数据结构:图及相关算法讲解

图 1.图的基本概念2. 图的存储结构2.1邻接矩阵2.2邻接表2.3两种实现的比较 3.图的遍历3.1 图的广度优先遍历3.2 图的深度优先遍历 4.最小生成树4.1 Kruskal算法4.2 Prim算法4.3 两个算法比较 5.最短路径5.1两个抽象存储5.2单源最短路径--Dijkstra算法5.3单源最短路径--Bellman-…

Dataset 读取数据

Dataset 读取数据 from torch.utils.data import Dataset from PIL import Image import osclass Mydata(Dataset):def __init__(self,root_dir,label_dir):self.root_dir root_dir #根目录 dataset/trainself.label_dir label_dir #标签的后面链接目录 ants_ima…

windows系统玩游戏找不到d3dx9_43.dll缺失,无法启动此程序的解决方法

今日,我们要深入讨论d3dx9_43.dll文件的重要性及其缺失问题。最近,我也遇到了这个文件丢失的困扰,因此想借此机会与大家分享如何解决d3dx9_43.dll缺失的问题。 一.电脑d3dx9_43.dll丢失会提示什么? 关于电脑提示d3dx9_43.dll丢失…

神经网络实战前言

应用广泛 从人脸识别到网约车,在生活中无处不在 未来可期 无人驾驶技术便利出行医疗健康改善民生 产业革命 第四次工业革命——人工智能 机器学习概念 机器学习不等价与人工智能20世纪50年代,人工智能是说机器模仿人类行为的能力 符号人工智能 …

【环境配置】Linux MySQL8 忘记密码解决措施

本片博客介绍 Linux 操作系统 Ubuntu 下,MySQL8 忘记密码怎么重新设置,笔者亲测有效,分享给大家。 查看 MySQL 版本 $ mysql --version停止 MySQL 服务器,并查看状态是否变更为 Server shutdown complete # 等价命令sudo syste…

Django简易用户登入系统示例

Django简易用户登入系统示例 1)添加url和函数的对应关系(urls.py) urlpatterns [ path(login/, views.login), #login:url路径,views.login:对应的函数 ]2)添加视图函数(views.py) def login(req):if…

IDEA + Git + GitHub(保姆级教学)

文章目录 IDEA Git GitHub1.IDEA克隆远程仓库到本地仓库1.创建一个GitHub远程仓库test12.IDEA克隆仓库到本地1.复制远程仓库地址2.创建一个版本控制项目3.克隆到本地仓库4.克隆成功 2.IDEA将本地项目push到远程仓库1.在这个项目下新建一个java模块1.新建模块2.填写模块名3.在…