IT软件服务商所提供的传统企业软件系统大多基于Multi-Instance(多实例)架构,即对于每个客户组织,都有一个单独的软件系统实例 为其服务;而搭建于云计算平台的软件系统则普遍采用了Multi-Tenancy(多租户)架构,即单个软件系统实例服务于多个客户组织。在Multi- Instance架构下,因为每一个客户拥有本身的软件实例,因此不存在数据隔离问题,可是在Multi-Tenancy架构下,因为全部客户数据将被共同 保存在惟一一个软件系统实例内,所以须要开发额外的数据隔离机制来保证各个客户之间的数据不可见性并提供相应的灾备方案。 数据库
随着云计算技术的成熟,Multi-Tenancy再也不是新鲜的概念,目前已经有几种成熟的架构来帮助系统实现数据隔 离:SharedSchemaMulti-Tenancy(下文简称为共享表架构)、SeparatedDatabase(下文简称为分离数据库架构)以 及SharedDatabaseSeparatedSchema(下文简称为分离表架构)。 安全
•共享表架构:即全部的软件系统客户共享使用相同的数据库实例和相同的数据库表,但能够经过相似于图3中的TenantID字段来区分数据的从属。 架构
由于共享表架构最大化地利用了单个数据库实例的存储能力,因此这种架构的硬件成本很是低廉,但对程序开发者来讲,却增长了额外的复杂度。因为多个客 户的数据共存于相同的数据库表内,所以须要额外的业务逻辑来隔离各个客户的数据。此外,这种架构实现灾难备份的成本也很是高,不但须要专门编写代码实现数 据备份,并且在恢复数据时,须要对数据库表进行大量的删除和插入操做,一旦数据库表包含大量其余客户的数据,势必对系统性能和其余客户的体验带来巨大影 响。 分布式
•分离数据库架构:即每一个软件系统客户单独拥有本身的数据库实例,如图4所示。 性能
相比于共享表架构,因为每一个客户拥有单独的数据库实例,这种架构能够很是高效便捷地实现数据安全性和灾难备份,可是随之而来的缺点即是其硬件成本很是高昂。 云计算
•分离表架构:即软件系统客户共享相同的数据实例,可是每一个客户单独拥有本身的由一系列数据库表组成的Schema。 spa
分离表架构是一种折中的Multi-Tenancy方案,在这种架构下,实现数据分离和灾难备份相对共享表架构更加容易一些,另外一方面,它的硬件成本也较分离数据库架构低。 设计
不管是分离数据库仍是分离表,抑或是共享表,每种架构都有它的优势和不足,在设计云端系统时,系统架构师须要进行全面的分析和考量,综合各方面的因 素以选择合适的Multi-Tenancy架构。通常来讲,系统服务的客户数量越多,则越适合使用共享表的架构;对数据隔离性和安全性要求越高,则越适合 使用分离数据库的架构。在超大型的云系统中,通常都会采用复合型的Multi-Tenancy架构,以平衡系统成本和性能,这其中 Salesforce.com即是一个典型的案例。Salesforce.com最初搭建于共享表架构,可是随着新客户的不断签入,单纯的共享表架构已经 很难知足日益增加的性能要求,Salesforce逐步开始在不一样的物理区域搭建分布式系统。在全局上,Salesforce.com以相似于分离数据库 的架构运行,在单个区域内,系统则仍然按照共享表架构运行。 开发