云平台构建与管理
上QQ阅读APP看书,第一时间看更新

2.3.2 多租户技术

多租户(Multi-Tenancy)又称多重租赁,是一种软件架构技术,它是探讨与实现如何在多用户环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。云计算是个热点问题,在共用的数据中心内如何以单一系统架构与服务提供多数客户机端相同甚至可复制化的服务,并且仍然可以保障客户的数据隔离,让多租户技术成为云计算技术下的显学。在云计算、虚拟化技术的成熟与应用性的扩张之下,多租户技术可以驾驭虚拟化平台,更强化在用户应用程序与数据之间的隔离,让多租户技术能更好地发挥它的特色。

在多租户技术中,租户是指使用系统或电子计算机运算资源的客户,但在多租户技术中,租户包含在系统中可识别为指定用户的一切数据,如账户与统计信息、用户在系统中建置的各式数据,以及用户本身的自定义应用程序环境等,都属于租户的范围。而租户所使用的则是基于供应商所开发或建置的应用系统或运算资源等,供应商所设计的应用系统会容纳数个以上的用户在同一个环境下使用,为了让多个用户的环境能力在同一个应用程序与运算环境中使用,则应用程序与运算环境必须要特别设计,除了使系统平台允许同时让多份相同的应用程序运行外,保护租户数据的隐私与安全也是多租户技术的关键之一。

1.多租户技术不同方式的切割

多租户技术的实现重点,在于不同租户间应用程序环境的隔离以及数据的隔离,以维持不同租户间应用程序不会相互干扰,同时数据的保密性也够强。多租户技术可以通过多种不同的方式来切割用户的应用程序环境或数据。

(1)数据面(Data Approach)

供应商可以利用切割数据库(Database)、切割存储区(Storage)、切割结构描述(Schema)或是表格(Table)来隔离租户的数据,必要时需要进行对称或非对称加密以保护敏感数据,但不同的隔离做法有不同的实现复杂度与风险。

(2)程序面(Application Approach)

供应商可以利用应用程序挂载(hosting)环境,于进程(process)上切割不同租户的应用程序运行环境,在无法跨越进程通信的情况下的情况下,保护各租户的应用程序运行环境,但供应商的运算环境要够强。

(3)系统面(System Approach)

供应商可以利用虚拟化技术,将实体运算单元切割成不同的虚拟机,各租户可以使用其中一至数台的虚拟机作为应用程序与数据的保存环境,但对供应商的运算能力要求更高。

2.多租户技术的特点

①由于多租户技术可以让多个租户共用一个应用程序或运算环境,且租户大多不会使用太多运算资源的情况下,对供应商来说多租户技术可以有效降低环境建置的成本。包含硬件本身的成本,操作系统与相关软件的授权成本都可以因为多租户技术而由多个租户一起分担。

②通过不同的数据管理手段,多租户技术的数据可以用不同的方式进行数据隔离,在供应商的架构设计下,数据的隔离方式也会不同,而良好的数据隔离法可以降低供应商的维护成本(包含设备与人力),而供应商可以在合理的授权范围内取用这些数据分析,以作为改善服务的依据。

③多租户架构下所有用户都共用相同的软件环境,因此在软件改版时只发布一次,就能在所有租户的环境上生效。

④具多租户架构的应用软件虽可自定义,但自定义难度较高,通常需要平台层的支持与工具的支持,才可降低自定义的复杂度。

3.多租户技术模型

在现有的实现中,常见的多租户技术模型主要有3种,其区别主要在于采用不同的数据库模式(Database Schema)。

(1)私有表

私有表是最简单的扩展模式,就是为每个租户的自定义数据创建一个新表。其优点是简单:缺点是涉及高成本的DDL操作,并且它的整合度不高。

(2)扩展表

总体而言,扩展表类似于私有表,但是一个扩展表会被多个租户共享,所以无论是共享表还是基本表都会有租户栏位。但比私有表有更高的整合度和更少的DDL操作,在架构上比私有表更复杂。

(3)通用表

通用表用来存放所有自定义信息,里面有租户栏位和许多统一的数据栏位(如500个)。这种统一的数据栏位会使用非常灵活的格式转储各种类型的数据,如VARCHAR。由于在每一行中的数据栏位都会以一个key/value形式存放所有自定义数据,导致通用表的行都会很宽,而且会出现很多空值,所以通用表这种方式又称Sparse Column。其优点是极高的整合度并避免了DDL操作,但在处理数据方面难度加大。

云计算对网络安全提出了更严格的要求。从云计算租户的角度来看,网络、设备、应用、数据都不在自己的控制之下,甚至都不知道具体的物理位置,如何保障数据安全和业务连续性显然就成了最大的挑战。

从云提供商的角度来看,传统模式下的网络安全需求并没有什么变化,无论从信息安全的保密性、完整性、可用性,还是根据网络层次划分的从物理层到应用层安全,仍然是需要解决的问题。传统模式下的网络安全解决方案中,最重要的一点就是建立网络边界,区分信任域和非信任域,然后在网络边界进行访问控制和安全防御。而云计算资源池与Internet之间仍然是有边界的,在资源池内部由于管理的需要,也会有不同域的划分,从而形成内部边界。这些策略对应用的改造取决于其代码安全成熟度和业务场景,由于普通Web应用大多运行于内网,开发者并没有把它放入公网的安全意识,大多数应用都需要修改。

4.多租户技术的应用

考虑到租户规模以及业务数据会不断增加,需要面对性能和扩展性的问题,由于企业业务和多租户的特点,还可以从以下方面加强:

(1)数据库租户分区优化

需要采用支持分区的数据库版本,如MySQL从5.1才开始支持。共享数据库由于采用分区技术,也几乎相当于“独享”。

(2)关系数据库和NoSQL结合

NoSQL数据库处理海量数据有天然优势,可以考虑把一些非关键、非事务的数据放入NoSQL。

(3)使用租户感知的缓存

缓存的使用可以大大减少磁盘的读写,采用租户感知的缓存系统可以大大提高缓存的命中率,并增强了数据安全。

(4)无状态的系统设计

无状态系统设计是大规模运营的关键,即不依赖于本机的会话(Session)以及本地文件系统等。

另外,对于多租户的应用,不同租户的需求几乎都是有差异的,每个租户要求自定义自己的应用也很自然。如果这个多租户应用是静态编译的二进制文件,那么满足这些多租户的要求及其他个性化的挑战是几乎不可能的。除了一些功能单一的应用(如邮件服务),多租户的应用,应该在其功能、界面等方面,满足不同租户的合理要求。

普通Web应用大多数是静态编译的二进制文件,如果满足租户的个性化需求,必须修改应用程序。即使在程序中很小心地采用多态技术,但是随着租户的增加,子类的爆炸也会使其程序很难维护,另外原有程序的多态改造的成本也非常高。

解决租户个性化的根本途径是采用元数据驱动的方式改造程序架构。云计算PaaS应用平台可以作为改造的基础。可以根据不同租户定义的元数据生成相对应的应用程序,而不是采用经过编译的二进制的可执行文件。普通Web应用转化多租户应用,可以根据应用的不同有选择地采用不同的策略。如果转化进度紧迫,或者功能单一,可以不修改其程序架构。如果需要长期运行、功能复杂、租户有个性化要求,那么修改程序架构为元数据驱动是更好的选择。

综上所述,目前来说多租户技术是应用最广的云计算中间件层的服务技术,感兴趣的读者可自行了解相关知识。