掌桥专利:专业的专利平台
掌桥专利
首页

用于数据库系统的本地多租户

文献发布时间:2024-04-18 19:58:53


用于数据库系统的本地多租户

对相关申请的交叉引用

本申请要求于2022年6月16日提交的美国临时专利申请号第63/352,779和63/352,811的优先权,其全部内容通过引用并入本文用于所有目的。

背景技术

多租户是一种便于在不同的用户组之间共享计算资源的软件架构模式。例如,单个多租户应用(例如,软件即服务(SaaS)应用)可以在单个软件实例内为多个终端用户组(即,客户)提供服务。这样的软件实例使用比向每个客户供应一个软件实例所需的计算资源占用小得多的计算资源脚本。因此,多租户可以提供大量的成本效益。

多租户架构中的每个客户的数据通常被映射到底层数据层中的对应租户。该映射允许数据层内的数据的逻辑分离,并且促进多租户应用对其的访问。在一些多租户架构中,每个租户的数据由在相同计算系统(例如,机架服务器)内执行的不同数据库实例管理。这些架构提供了租户数据的优异分离,但是在一些场景中,每个租户需要完整的数据库实例可能是成本低效的。例如,最小的数据库实例可能消耗32GB的存储器,这可能表示比小租户应该需要的计算资源显著更多的计算资源。

其他多租户数据架构使用单个数据库实例来管理多个租户的数据。由于这种架构中的数据不是物理上分离的,因此多租户应用负责以租户感知的方式跟踪和管理数据。例如,数据库系统可以针对所有租户使用单个实例的一种模式,其中每个租户的数据经由区分列进行分区。多租户应用使用区分列的值来识别属于特定租户的数据。另一方面,数据库不知道多个租户的存在,并且以如同由单租户应用访问一样的方式操作。

数据库系统有利地提供存储在其中的数据的加密、备份/恢复、克隆和移动。所需要的是,在租户级别上提供这种数据库实例级别特征的数据库系统。

附图说明

图1是根据一些实施例的提供本机多租户的数据库系统的框图。

图2是根据一些实施例的提供本机多租户的数据库系统的框图。

图3是根据一些实施例的提供本机多租户的基于云的数据库架构的框图。

图4是根据一些实施例的提供本机多租户的数据库系统的框图。

图5是根据一些实施例的在云数据库实例中创建租户的过程的流程图。

图6是根据一些实施例的提供本机多租户和租户级加密的数据库系统的框图。

图7是根据一些实施例的基于云的系统的框图。

具体实施方式

提供以下描述以使所属领域的技术人员能够制作和使用所描述的实施例。然而,各种修改对于本领域技术人员将是显而易见的。

根据一些实施例,本机多租户数据库系统包括数据库级租户对象(例如,数据库目录对象),其促进在应用层上实现多租户架构。租户对象是已经被分配给租户的数据以及元数据工件(artifact)的逻辑集合。租户可以被暴露为第一类数据库对象(即,具有独立于任何其他数据库实体的身份)。

分配给租户对象(即,特定租户)的特定实例化的数据库工件可以包括但不限于一个或多个模式、表和分区的数据,以及定义租户的表、虚拟表、高速缓存、远程源、用于管理租户的数据库对象的资源使用的工作负载类和数据库用户上的视图的元数据。有利地,租户的生命周期可以与其分配的数据库工件的生命周期解耦。然而,在一些实施例中,从数据库实例中丢弃租户导致丢弃被指派给其的工件,只要那些工件未被指派给数据库实例的另一租户即可。

本地多租户数据库系统可以包括一个或多个数据库实例、所有租户的数据以及用于处理数据的引擎。单个系统还包括用于所有租户的数据的单个持久性。通过允许多个独立的租户,或更确切地说客户,被托管在单个实例上并共享计算资源,将新租户部署到数据库实例与接近零的边际成本相关联。后者以不同租户之间的较低隔离为代价。此外,实施例通过具有比供应单独的数据库实例所需的粒度更细的粒度来实现按使用付费模型。

在租户需要比上述逻辑隔离更强的数据隔离的情况下,租户可以被部署为数据库实例的唯一租户。由于这种布置不会完全分担多租户的成本效益,因此向单独租户收取的价格可能高于其他方式。

根据一些实施例的数据库系统支持对租户级数据库操作的请求,否则该租户级数据库操作将需要由应用实现。这些操作可以包括租户创建、租户丢弃、租户移动、从备份恢复租户、租户克隆、租户调整大小和租户资源限制。在一些实施例中,共享服务暴露由多租户应用调用的API(例如,经由REST),以使用例如相关联的租户ID从数据库系统请求这些租户级操作。可以扩展当前的数据库系统DDL以支持将数据库工件分配给租户。

租户级克隆操作对于装载新客户可能是有用的,以便向新客户提供模板数据。克隆操作是租户创建的一种形式。

一些实施例提供时间点数据的租户级恢复。这种恢复不恢复所有客户的数据(即,整个数据库实例的数据),而是恢复特定租户的数据。例如,如果一个租户的数据被破坏,则仅需要恢复被破坏租户的数据。

根据一些实施例,一个用户可以仅定义分配给租户的工件,并且另一用户仅被允许执行克隆/移动操作。否则,恶意管理员能够创建租户,向租户分配对象,并将租户的内容克隆到由恶意管理员完全控制的另一个系统。另外,恶意管理员可以丢弃租户并删除分配给该租户的所有对象。

实施例可以提供租户级加密以加密分配给租户的表的数据。该功能利用单独的租户特定密钥对每个租户的持久化数据(即,静止数据)进行加密,尽管该数据在数据库实例内没有与其他租户的数据物理隔离。因此,实施例可以使得数据库实例能够访问客户特定密钥存储库。

可以使用数据库实例特定密钥在持久层中加密共享数据和元数据(例如,数据库目录、用户、共享容器)。相比之下,现有系统提供使用单个数据库实例特定密钥对整个持久层进行加密。

租户的位置,即,租户及其工件驻留在其中的数据库实例,是租户的属性之一,并且由多租户应用确定。当租户在数据大小和资源消耗上增长或收缩时,应用还可以确定将租户从一个数据库实例移动到不同的数据库实例。该移动操作在基于云的实现中提供弹性,并且优选地在线执行以避免停机时间。在租户移动操作期间,应当保留租户特定安全属性,诸如加密。

可以在租户级别定义数据库资源消耗配额。这些配额可以解决“噪声邻居”问题。取决于技术基础设施测量和控制这种使用的能力,租户会话变量可以定义针对存储器、线程、网络I/O、磁盘I/O、磁盘大小等的租户特定使用限制。

图1是根据一些实施例的系统100的框图。可以使用已知或变得已知的计算硬件和/或处理器可执行程序代码的任何合适的组合来实现系统100和本文描绘的所有其他架构的所示元件。这样的组合可以包括一个或多个可编程处理器(微处理器、中央处理单元、微处理器核、执行线程)、一个或多个非暂时性电子存储介质和处理器可执行程序代码。在一些实施例中,系统100的两个或更多个元件由单个计算设备实现,和/或系统100的两个或更多个元件位于同一位置。系统100的一个或多个元件可以被实现为使用基于云的资源的云服务(例如,软件即服务、平台即服务),和/或根据需求、需要、价格和/或任何其他度量弹性地分配计算资源的其他系统。

根据一些实施例,数据库实例110提供本机多租户。数据库实例110可以在硬件和软件的任何合适的组合上提供,包括一个或多个计算机服务器或虚拟机。在一些实施例中,数据库实例110包括在软件容器内执行的容器化应用。如本领域中已知的,这样的容器可以由集群(例如,Kubernetes集群)的一个或多个节点实现。

数据库实例110包括用于处理存储在易失性(例如,随机存取)存储器112中的数据和元数据的数据引擎111。存储器112包括分配给数据库实例110的所有租户的数据118和元数据119。系统100的每个租户将被描述为对应于客户,其中客户可以是公司、部门、工作组或任何其他用户组。租户可以对应于给定客户的特定云资源/服务订阅。在这方面,客户可以与多于一个订阅相关联,因此可以与多于一个租户相关联。

特别地,存储器112包括租户“A”的租户实例114和租户“B”的租户实例116。每个租户实例114和116是在元数据119中定义的租户对象的实例。租户实例114和116可以存储在数据118内,但是为了便于理解而被描绘为与其分开。

如上所述,每个租户实例114和116是数据库工件的集合。分配给每个租户实例114和116的工件被存储在数据118和元数据119之间。因此,使用虚线来描绘被指派给租户实例114的工件A 115和被指派给租户实例116的工件B 117,以表示对数据118和元数据119的数据库工件的引用。分配给租户实例的数据库工件可以包括例如一个或多个模式、表和分区。数据库工件还可以包括定义关于租户的表、虚拟表、高速缓存、远程源、用于管理租户的数据库对象的资源使用的工作负载类和数据库用户的视图的元数据。

数据库实例110还包括用于持久化所有分配的租户(以及单独描绘的实例114和116)的数据118和元数据119的持久性113。持久性113可以使用已知或变得已知的任何持久性数据存储系统来实现,包括但不限于分布式数据存储系统。持久性113可以持久化事务日志和本领域已知的其他数据库工件。

数据库实例110由此提供包括数据库实例的所有租户的数据和元数据的单个数据服务器、用于处理数据的引擎以及用于数据和元数据的单个持久性。在这样的单个数据库实例上托管多个独立租户促进了以接近零的边际成本共享计算资源。

多租户应用120可以包括SaaS应用,但是实施例不限于此。多租户应用120可以被提供在一个或多个计算机服务器或虚拟机上,并且可以包括在软件容器内执行的容器化应用。多租户应用120基于分别从客户130和140的用户135和145接收的输入向数据库实例110发出查询(例如,SQL、MDX)。

将假设客户A 130对应于数据库实例110的租户A 114,并且客户B 140对应于数据库实例110的租户B 116。在从客户A 130的用户135接收到输入时,多租户应用120可以向数据库实例110发送指示与租户A 114的关联的查询。类似地,在从客户B 140的用户145接收到输入时,多租户应用120可以向数据库实例110发送查询以及该查询与租户B 116相关联的指示。在从多租户应用120接收到查询时,数据库实例110使用数据引擎111和分配给与查询相关联的租户的工件来处理查询。

因此,多租户应用120能够确定与从其接收输入的用户相对应的租户。例如,每个用户可以使用租户特定订阅登录到多租户应用120。因此,多租户应用120将用户与用户已经登录的订阅的租户相关联。在另一示例中,用户与多租户应用120之间的通信可以包括租户识别令牌。

多租户应用120还知道哪些租户被放置在哪些数据库实例上。在这方面,多租户应用120可以请求供应数据库实例并在供应的数据库实例上创建租户。在从与给定租户相关联的用户接收到输入时,多租户应用120能够确定包括给定租户的数据库实例,并且因此应该将对应的查询引导到该数据库实例。

多租户应用120可以基于由客户关键用户接收的输入来请求供应数据库实例和在供应的数据库实例上创建租户。根据一些实施例,多租户应用120调用供应服务(图1中未示出)以供应新的数据库实例。多租户应用120还可以调用租户生命周期管理服务(图1中未示出)的REST API以在数据库实例上创建租户,从数据库实例中删除租户,将租户移动到数据库实例,从数据库备份中恢复租户,将租户克隆到数据库实例(即,创建为模板),调整数据库实例上的租户的大小,在数据库实例上定义租户资源限制等。

图2示出系统200,其中除了数据库实例110之外,多租户应用120还请求供应数据库实例210。数据库实例210包括其自己的数据引擎211、存储器212和持久性213。

多租户应用120还请求在数据库实例210上创建租户C。租户C对应于客户C 230。因此,存储器212包括被分配给工件C 215的租户C的租户对象实例214。工件C 215包括存储在存储器212的数据216和元数据217中的数据和元数据。因此,在从客户C 230的用户235接收到输入时,多租户应用120将任何结果查询引导到数据库实例210,因为多租户应用120知道数据库实例210包括与客户C 230相对应的租户C 214。

根据一些实施例,每个租户由在其自己的数据库实例内唯一的名称标识。因此,租户C 214可以被命名为租户A,因为数据库实例110和210独立地操作。多租户应用可以提供多个数据库实例,并通过租户移动操作向其租户提供弹性。在这种情况下,应用应当确保租户到目标数据库实例的移动不会在目标数据库实例上引入租户名称冲突。

图3示出其中多租户应用310与实例农场320相关联的系统300。农场320包括若干数据库实例,包括实例321和325。农场320可以包括在其上多租户应用310可以供应数据库实例并在数据库实例上创建租户的执行环境。

多租户应用310知道在农场320内供应的数据库实例以及每个数据库实例上的租户。农场320的每个数据库实例知道其租户以及其存储的用户、模式和其他元数据。然而,农场320的给定数据库实例不知道农场320的其他数据库实例的租户、模式等。

多租户应用310可以为农场320的每个数据库实例指定存储器大小和持久性大小,并且根据需要增大或缩小这些大小。多租户应用310还可以在农场320的数据库实例上创建租户,指定其初始大小,并且根据需要增大或缩小租户大小。如上所述,多租户应用310还可以将租户从数据库实例中删除或将租户移动到数据库实例。

系统300的每个数据库实例可以由集群(例如,Kubernetes集群)执行。每个集群可以允许多租户应用310供应扩展节点以向其数据库实例提供附加的计算资源。此外,多租户应用310可以是节点感知的,允许租户在同一数据库实例的节点或不同数据库实例的节点之间移动。

图4是根据一些实施例的提供本机多租户的系统400的框图。数据库实例450包括与如上所述的工件453和455相关联的租户对象实例452和454。为清楚起见,图4中省略了数据库实例450的数据引擎和持久性。

数据库实例450的每个租户实例对应于客户410中的相应一个。客户A 411包括关键用户412和商业用户413,并且客户N 417包括关键用户418和商业用户419。图5包括如图4所示并且根据一些实施例的用于供应数据库实例并在其中创建租户实例的过程500的流程图。

过程500和本文提及的所有其他过程可以体现在程序代码中,该程序代码可由一个或多个处理单元(例如,处理器、处理器核、处理器线程)执行并且从非暂时性计算机可读介质(诸如硬盘驱动器、易失性或非易失性随机存取存储器、DVD-ROM、闪存驱动器和磁带)中的一个或多个读取,然后以压缩、未编译和/或加密格式存储。在一些实施例中,可以使用硬连线电路来代替用于实现根据一些实施例的过程的程序代码,或者与用于实现根据一些实施例的过程的程序代码组合。因此,实施例不限于硬件和软件的任何特定组合。

在S510处,租户将驻留在其中的数据库实例被最初供应。参考图4的示例,关键用户412可以访问多租户应用420以请求供应数据库实例。该请求被转发到服务管理器430和云服务代理440。然后,在S520处,云服务代理440将数据库实例450供应为基于云的资源。

在S520处,在数据库实例中创建租户对象实例。继续以上示例,关键用户412可以访问多租户应用420以请求在数据库实例450上创建租户。该请求被转发到服务管理器430、服务代理460和租户管理服务470。然后,租户管理服务470指示数据库实例450基于在元数据457中定义的租户对象来创建租户A实例452。租户A实例452可以由数据库实例450和多租户应用420已知的租户ID来标识。

接下来,在S530处,数据库工件被分配给在S520处创建的租户实例。例如,多租户应用420请求租户管理服务470指示数据库实例450将租户A实例452与工件A453相关联。关键用户412可能先前已经操作了多租户应用420和服务代理460以在数据库实例450的数据456和元数据457内定义工件A 453。尽管由服务代理460创建,但是所有数据库工件由多租户应用420管理。

一些实施例可以使用部署基础设施来定义要分配给租户实例的数据库工件。部署基础设施可以提供用于使用容器来定义数据库对象(例如,作为设计时工件)的声明性方法。例如,服务代理460可以创建对应于数据库模式和附加元数据(例如,用户、角色、然后可以被分配给租户实例的特权)的容器。这样的容器可以通过模式级访问特权彼此隔离。应用420可以通过使用所分配的每模式技术数据库用户来访问容器的数据库模式中的任何数据库对象。

流程在S540处循环,直到接收到在数据库实例中创建另一租户的命令。例如,客户N 417的关键用户418可以访问多租户应用420以请求在数据库实例450上创建租户。该请求被转发到服务管理器430、服务代理460以及租户管理服务470,租户管理服务470在S520处指示数据库实例450创建租户N实例454。在S530处,多租户应用420还指示租户管理服务470将先前定义的工件N 455分配给租户N实例454。

在供应数据库实例450并创建租户452和454之后,多租户应用420可以例如从客户A 411的业务用户413接收输入。作为响应,应用420经由租户管理服务470将任何得到的查询引导到数据库实例450,并识别租户A 452。数据库实例450基于租户实例A 452的工件A453来响应查询。在多租户应用420从客户N 417的商业用户419接收输入的情况下,任何结果得到的查询被引导到数据库实例450并且基于租户实例N 454的工件N 455被响应。

图6是根据一些实施例的提供本机多租户和租户级加密的系统600的框图。与系统400的元件类似地编号(即,6xx对4xx)的系统600的元件可以类似地实现和操作。

系统600示出从图4中省略的数据库实例650的持久性660。持久性660可以使用任何合适的一个或多个存储系统来实现。持久性660存储实例650的每个租户的数据662、664、实例650的未被分配给特定租户的数据666、以及实例650的元数据668。有利地,并且与现有系统相比,持久化数据662和664使用特定于其对应租户(即,客户)的加密密钥(即,数据加密密钥(DEK)A和DEKN)来加密。此外,使用数据库实例特定的加密密钥(即DEKDB)来加密持久化的未分配数据666和元数据668。

根据一些实施例,DEK DB是作为数据库实例650的创建的一部分而生成的公钥-私钥对。数据库实例650在存储在持久性660中之前使用DEK DB的公钥来加密数据665和数据668。数据库实例650根据需要使用DEK DB的私钥来解密数据665和数据668。在一些实施例中,DEK DB的私钥以加密形式被存储在安全存储持久性675中。

例如,数据库实例提供方690的关键用户695向密钥管理系统680提供密钥加密密钥(KEK)DB以存储在密钥保管库685中。KEK DB用于在将DEK DB的私钥存储在安全存储持久性675中之前对DEK DB的私钥进行加密。KEK DB还可以包括私钥-公钥对,其中密钥保管库685存储KEK DB的私钥,而对应的公钥用于在将DEK DB的私钥存储在安全存储持久性675中之前对DEK DB的私钥进行加密。

因此,当数据库实例650希望解密数据665或数据668时,数据库实例650从安全存储670请求DEK DB的私钥。作为响应,安全存储670请求密钥管理系统680使用KEK DB的私钥来解密所存储的DEK DB的加密私钥。然后,数据库系统650使用解密DEK DB的私钥来解密数据665或数据668的期望数据。

类似地,DEK A可以包括在租户A 652的创建期间生成的公钥-私钥对。数据库实例650在存储在持久性660中之前使用DEK A的公钥来加密数据662。数据库实例650根据需要使用DEK A的私钥来解密数据662。在一些实施例中,DEK A的私钥以加密形式被存储在安全存储持久性675中。

客户A 611的密钥用户612将KEK A提供给密钥管理系统680以存储在密钥保管库685中。KEK A用于在将DEK A的私钥存储在安全存储持久性675中之前对DEK A的私钥进行加密。KEK A可以包括私钥-公钥对,其中密钥保管库685存储KEK A的私钥,而对应的公钥用于在将DEKA的私钥存储在安全存储持久性675中之前加密DEK A的私钥。

当数据库实例650希望解密数据662时,数据库实例650从安全存储670请求DEK A的私钥。作为响应,安全存储器670请求密钥管理系统680使用KEK A的私钥来解密所存储的DEK A的加密私钥。该请求可以被发布到密钥管理系统680的特定于客户A 611的账户。数据库实例650然后使用DEK A的解密的私钥来解密数据662的期望数据。因此,如果客户A从密钥保管库685撤销KEK A,则数据库提供者690不能解密存储的私钥DEK A,并且因此不能解密数据662。前述过程可以在每个新创建的租户N的情况下发生。

架构600可以提供本文未描述的其他加密。举例来说,可使用TLS/SSL在传输中加密从客户端传输到数据库实例650和从数据库实例650传输的数据。此外,可以使用已知技术(例如,使用客户端控制的密钥)来加密非持久存储器651中的各个表列。

图7示出根据一些实施例的基于云的数据库部署700。用户设备710可以包括可由关键用户或业务用户操作以访问基于云的多租户应用的任何合适的计算系统。用户设备710可以存储和执行web浏览器的程序代码,以访问与这种多租户应用的登录页面相关联的统一资源定位符(URL)。如本领域中已知的,web浏览器可以下载和执行多租户应用的客户端侧组件的程序代码。

根据一些实施例,应用服务器节点720、722和724可以托管多租户应用。数据库节点730、732和734可以托管多租户应用可访问并提供如本文所述的本机多租户的一个或多个数据库实例。部署700的每个节点可以包括单独的物理机或虚拟机。这样的虚拟机可以由提供自助服务和即时供应、自动扩展、安全性、合规性和身份管理特征的云提供商分配。

前述图表示用于描述根据一些实施例的过程的逻辑架构,并且实际实现可以包括以其他方式布置的更多或不同的组件。其他拓扑结构可以与其他实施例结合使用。此外,本文描述的每个组件或设备可以由经由任何数量的其他公共和/或专用网络进行通信的任何数量的设备来实现。两个或更多个这样的计算设备可以彼此远离地定位,并且可以经由任何已知的(一个或多个)网络和/或专用连接的方式彼此通信。每个组件或设备可以包括适合于提供本文描述的功能以及任何其他功能的任何数量的硬件和/或软件元件。例如,任何计算设备可以包括可编程处理器以执行程序代码,使得计算设备如本文所述进行操作。

本文讨论的所有系统和过程可以体现在存储在一个或多个非暂时性计算机可读介质上的程序代码中。这样的介质可以包括例如DVD-ROM、闪存驱动器、磁带和固态随机存取存储器(RAM)或只读存储器(ROM)存储单元。因此,实施例不限于硬件和软件的任何特定组合。

本文描述为彼此通信的元件能够直接或间接地通过用于传送数据的任何数量的不同系统进行通信,包括但不限于共享存储器通信、局域网、广域网、电话网络、蜂窝网络、光纤网络、卫星网络、红外网络、射频网络以及可用于在设备之间传输信息的任何其他类型的网络。此外,系统之间的通信可以通过已知或变得已知的任何一种或多种传输协议进行,例如异步传输模式(ATM)、互联网协议(IP)、超文本传输协议(HTTP)和无线应用协议(WAP)。

本文描述的实施例仅用于说明的目的。本领域技术人员将认识到,可以通过对上述实施例的修改和改变来实践其他实施例。

相关技术
  • 在多租户保护存储部署中防止数据泄露企图的基于本地数据IP的网络安全的系统和方法
  • 用于多租户保护存储环境中的不同租户的物理数据分组隔离的系统和方法
  • 多租户数据库系统中的安全数据共享
  • 连续溶液聚合方法
技术分类

06120116508382