在部署 SAP HANA 时,有效利用硬件资源是实现更好的性能和可扩展性同时降低 TCO 的关键。随着云时代的到来,SAP HANA 数据库对于多租户(multitenancy)支持显得尤其重要。本文就简要地梳理一下SAP HANA 数据库支持多租户(multitenancy)情况。
SAP HANA 多租户(multitenancy)架构的演化
2014年,SAP HANA 1.0 的 SPS09 版本发布成为人们的焦点。此版本的主要功能之一是对多租户支持,这一点很受欢迎。
在 SPS09 之前,SAP HANA 在一个 SAP HANA 系统中支持多个模式,在单个 SAP HANA 虚拟化硬件上支持多个 SAP HANA 系统。通过 SPS09,SAP HANA 在一个 SAP HANA 系统中增加了对多个租户数据库的支持,以供生产使用。我们将此功能称为“多租户数据库容器/Multitenant Database Containers(MDC)”。
具有多租户数据库容器(MDC)功能的 SAP HANA 系统可以包含多个租户数据库。同一系统中的所有租户数据库共享相同的系统资源(内存和 CPU 内核)。但是,每个租户数据库都与其自己的数据库用户、目录、存储库、持久性(数据文件和日志文件)和数据库服务完全隔离,因此,例如,您可以同时运行 SAP Business Suite 和 SAP Business Warehouse (BW) SAP HANA 系统。
使用多租户数据库容器,您可以为每个租户数据库分配系统资源限制(内存和 CPU 内核),以便一个租户数据库上的更高工作负载不会影响其他租户数据库。您还可以根据每个租户数据库不断变化的需求,随时更改分配的资源。例如,如果 SAP Business Suite 和 SAP BW 在一个 SAP HANA 系统上运行,您可以在月末需要更多来自 SAP BW 系统的报告时增加 SAP BW 的资源。您还可以灵活地一次备份和恢复所有租户数据库或一次备份和恢复单个租户数据库。这意味着,通过在一个 SAP HANA 系统中运行多个租户数据库并将它们作为一个进行管理,
多租户数据库容器功能的另一个主要好处是它简化了安全、多租户基于云的应用程序的开发和部署。虽然可以在没有多租户数据库的情况下构建云应用程序,但使用多租户数据库有几个优点。当您不使用多租户数据库时,您通常会选择这三种常见方法之一。
- 使用客户 ID 存储应用程序数据(在所有表中添加“客户”列)并使用客户 ID 选择/更新数据(备注:这里客户ID可以语义理解成租户ID)。
结果:由于所有客户共享相同的表,因此需要复杂的数据库授权来实现安全性。一位客户的查询可能会使用过多的数据库资源,并对其他客户的性能产生负面影响。
2)为每个客户创建一个模式(Schema)
结果:比第一种方法更好的数据安全性,但仍然需要复杂的数据库授权,因为所有数据库用户都可以访问系统中的模式。一个客户的查询仍然会使用过多的数据库资源并对其他客户的性能产生负面影响。
3)为每个客户创建一个数据库的虚拟实例
结果:安全。虚拟化会导致额外的开销,可能会对性能产生负面影响。
如果您改为在数据库中使用多租户并为每个客户创建一个租户数据库,那么您可以像在虚拟化场景中一样存档高度的安全性。由于多租户数据库容器功能内置于 SAP HANA 架构中,因此没有虚拟化层开销,从而赋予多租户数据库容器性能和可扩展性优势。
话虽如此,遵循软件定义数据中心方法的公司可能对虚拟化特别感兴趣。虚拟化提供了一些好处,例如将生产实例从一个硬件系统移动到另一个硬件系统以及额外的 HA/DR 功能。此外,虚拟化提供了在单个硬件安装上运行多个不同版本的 SAP HANA 系统的能力。您可以在虚拟化 SAP HANA 系统中使用多租户数据库容器功能。
SAP HANA 多租户数据库容器的高级架构:
具有多租户数据库容器特性的 SAP HANA 系统包括一个系统数据库和任意数量的租户数据库,如下图所示。
您可以使用系统数据库一次性为所有租户数据库创建、删除、启动、停止租户数据库并执行数据库管理活动(备份/恢复、系统复制)。
在横向扩展场景中,租户数据库可以跨越多个 SAP HANA 节点,如下图所示。
这意味着租户数据库的大小不受单个 SAP HANA 节点大小的限制。虽然在任何给定时间只有一个系统数据库处于活动状态,但提供了最大的冗余。换句话说,只要有一个 SAP HANA 节点可以运行,系统数据库就可以运行。