技能解读数据库如何实现“多租户”?

打印 上一主题 下一主题

主题 777|帖子 777|积分 2331

本文分享自华为云社区《【GaussTech速递】技能解读之GaussDB多租技能》,作者:GaussDB数据库。
数据库多租技能介绍

随着云计算时代的到来,多租户的概念也渐渐广为人知。“多租户”使得租户之间可以共享物理资源,可以大概帮助用户节约硬件成本和运维成本,进步资源使用效率。同时,在实现的过程中,思量到共享带来的安全、隔离等问题以及后续业务面临的扩展需求,“多租户”在隔离性和扩展性方面也进行了相应的计划实现。
那么,在数据库领域是如何实现“多租户”呢?
业界有虚拟机多租、容器多租、数据库内核多租等多种技能可以实现多租户。
虚拟机多租和容器多租,顾名思义就是在一台物理服务器上部署多个虚拟机或者容器,然后在虚拟机或者容器内进行数据库服务的部署。这类技能方案在安全性和隔离性方面具有天然的上风。
数据库内核多租,是由数据库内核提供的多租户特性。相比于虚拟机多租和容器多租,内核多租没有虚拟化管理层、OS(Operating System,简称利用体系)层、数据库公共层的额外开销,而且底噪小,在资源整合、资源的弹性伸缩等方面具备天然上风。数据库内核多租通过将数据库内核语义与成熟的资源隔离技能栈相整合,实现更高的Scale-Down(缩容)能力,极大地提拔了数据库在计算资源方面的使用率。
GaussDB支持被部署在虚拟机或者容器内,给客户提供整体虚拟机/容器多租的解决方案,同时也提供了数据库内核多租特性,满意客户差别业务场景的需求。


  • 在客户资金充裕,且对资源的隔离性、可靠性等要求更高的场景下,可以选择虚拟器/容器多租方案;
  • 在客户投入有限,需要更鼎力大举度使用现有资源的场景下,可以选择GaussDB数据库内核提供的多租方案。
本文将对GaussDB数据库内核集中式场景下提供的多租技能进行重点介绍。
GaussDB多租架构

GaussDB多租是指在一个数据库实例中分别出多个逻辑处理单元,我们称这个逻辑单元为PDB(pluggable database),每个PDB具备物理数据库的绝大多数能力,同时相互隔离。
在数据库初始化时,会生成一个template pdb作PDB创建的模板。
集群内可以创建多个资源计划,每个资源计划下挂载多个plan directive,每个plan directive对应一个PDB,PDB通过plan directive配置自己的资源规格,包罗CPU、内存、IO等。


图1 GaussDB多租架构

一个PDB归属于一个独立的业务或公司。独立的业务或公司可以连接到自己的PDB运行数据库业务。
GaussDB多租技能特点

1.隔离性

多租户架构的目的是为了让多用户或者多业务使用同一套数据库集群,PDB数据的隔离性是实现该架构的基础。
假设同一个公司的两个业务共享同一个数据库实例,业务A的相干数据可以被业务B检察,这是完全不可接受的举动。
GaussDB数据库的PDB之间数据完全隔离,实现租户数据完全独立、互不干扰,保障租户数据的安全隐私:
(1)每个PDB除了有自己的表、索引等对象数据,也有自己的用户、脚色、表空间以及定时使命等对象。
(2)除了数据库对象,PDB的其它属性也完全隔离。比如:每个PDB有独立的兼容模式、线程组、GUC配置参数等。


图2 PDB之间数据完全隔离

PDB之间数据互相隔离,但用户业务开发并不需要感知是使用了一个PDB照旧一个物理实例,对用户业务开发来说,使用PDB和使用物理实例的利用没有区别。
2.PDB粒度的资源管理

PDB资源的分配与变更由GaussDB内核接管,并不依赖任何外部组件。每个PDB可以设置自己的资源规格,包罗CPU、内存以及IO。
GaussDB内核通过资源计划管理全部PDB的资源,每个资源计划包罗了多个资源计划指令,每个资源计划指令设置了一个PDB的资源规格。
上层可以调用资源计划高级包接口,完成资源的分配与变更。体系中可以有多个资源计划,可以通过资源计划的切换,做到一键切换全部PDB资源规格的能力。


图3 PDB资源的变更和切换

每个PDB的资源使用由GaussDB内核中的资源管理模块管理。相较于将资源分配交由外部组件(虚拟机,容器等)管理,GaussDB通过实现数据库内核的自主资源分配,在包管租户资源按照配额公平使用的前提下,也可得到以下上风:
(1)进步资源使用率:租户间的后台工作整合,通过合理的调度算法,最大限度地使用体系空闲资源。
(2)内核感知资源分配,根据资源分配环境,动态调解CPU占比,内存巨细以及线程池、连接池等资源,终极得到更优的整体表现。
(3)在物理机资源富足的环境下,PDB的资源变更通过SQL语句即可完成,实现资源秒级变更,业务无感知。
相比而言,现在云上虚拟机的规格变更耗费时间较长,需要先变更备机,然后主备倒换,然后进行其他变更利用,端到端时间约为:(虚拟机关机 + IaaS资源调度+新虚拟机开机+数据库拉起)X 数据库节点个数。
(4)内核中全部PDB公用一套体系资源,有效的淘汰了内核底噪的资源占用。
3.实例发放

GaussDB内核多租技能的实例发放效率领先于其他的多租技能。
以虚拟机多租为例,虚拟机实例的发放需要先申请肯定规格的虚拟机,然后再部署GaussDB集群,需要消耗10-30分钟或者更多的时间。
而GaussDB内核多租技能,内核中管理了PDB的创建/打开/关闭/删除。在物理机上部署GaussDB的基础上,使用几个SQL语句即可完成这些利用,秒级时间内即可实现实例的发放。
4.GaussDB多租规格配置

GaussDB多租支持的PDB规格配置见下表:
可以看到,GaussDB支持1U(1个CPU)级别的PDB规格,而当前虚拟机多租和容器多租一样平常只能提供8U级别的商用规格。这是由于:


  • 数据库中通常存在许多后台使命以及运维使命,需要维护整个集群的正常运行。
以GaussDB为例,存在auto vacuum、慢/全量SQL网络等后台使命。


  • 数据库管控层的实例指标监控也需要连接到数据库网络信息。
例如TPS,QPS等。
这些使命都需要消耗CPU,故虚拟机/容器实例做到更小规格(例如2U)基本不太大概。而内核多租是在GaussDB历程中分别了多个逻辑实例,全部逻辑实例共享同一份后台使命,管控的指标监控连接一次就可以网络到全部PDB的数据,大大淘汰了数据库底噪,因此内核多租可以很好的支持1U逻辑实例的发放。
别的,GaussDB后续会继续优化PDB规格。比如,后续计划支持1U4G的PDB规格,以满意更多客户场景的需求。
5.支持PDB关闭

对于不需要一直运行的数据库业务,GaussDB支持关闭该业务的PDB并开释资源。关闭PDB非常简朴,内核中只需要实行语句:ALTER PLUGGABLE DATABASE [pdbname] CLOSE语句即可。
PDB关闭即意味着业务无法连接到这个逻辑实例,用户可以开释PDB的CPU、内存、IO资源,对不使用的资源不计费,实现节约成本。
6.WDR报告中PDB相干增强

GaussDB在WDR(Workload Diagnosis Report 负载诊断报告)工具中适配了多租特性,可在WDR报告中检察PDB信息,以及PDB级别的SQL Statistics等性能数据视图。
(1)WDR报告中的PDB信息章节


(2)WDR报告SQL统计信息章节
如下图所示,细化的统计信息中添加了“DB Name列”,PDB归属信息会表现在该列。


(3)SQL Detail和Object Stats等章节中也添加了PDB信息,在此不一一枚举。
添加了PDB信息的WDR报告,可方便DBA了解指定时间段内PDB级别的体系资源使用环境以及数据库运行环境,进行相应的运维处理。
总结

GaussDB内核提供的多租技能特性,在安全隔离的前提下,具备更高的资源使用效率,更快的实例发放效率和资源变更效率。同时将租户相干的信息集成到WDR报告中,可以提拔了客户运维的便利性。因此,客户可根据自身企业的组织布局,匹配相应的多租户配置,更高效地使用现有资源,为企业节约成本。


HDC 2024,6月21日-23日,东莞松山湖,期待与您相见!

更多详情请关注官网:
中文:华为开发者大会2024_HDC 2024
英文:华为开发者大会2024_HDC 2024
点击关注,第一时间了解华为云新鲜技能~


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表