租户,这个名字真是奇怪,特别是用在数据库领域。不知第一个将租户(Tenant)引入数据库领域的人是谁?Google了一番,可惜没找到答案。

简言之,在数据库领域,租户表示一个数据库的“用户”,他“租用”了数据库的部分资源。之所以使用租户,而不是用“用户”来表示,应该是为了避免混淆,用户概念在计算机领域已经被用烂。

下一个概念:多租户。在云计算时代,有一个大幅度节省计算成本的机会,那就是将无数分开的服务器、分开的计算资源集中到一起(云上),让原来的用户都到云上来共享使用这些计算资源、存储资源,资源得到共享,就能降低成本。用户到云上来之后,就换了个名字---租户。租户希望既享受低成本,有希望享受资源的隔离---别人怎么用我不管,但别让我受到别人的干扰。为了达到这个目的,各种解决多租户共享资源的技术就应运而生。


多租户(Multi Tenancy/Tenant)是一种软件架构,其定义是:

在一台服务器上运行单个应用实例,它为多个租户提供服务。
在SaaS实施过程中,有一个显著的考量点,就是如何对应用数据进行设计,以支持多租户,而这种设计的思路,是要在数据的共享、安全隔离和性能间取得平衡。
传统的应用,仅仅服务于单个租户,数据库多部署在企业内部网络环境,对于数据拥有者来说,这些数据是自己“私有”的,它符合自己所定义的全部安全标准。而在云计算时代,随着应用本身被放到云端,导致数据层也经常被公开化,但租户对数据安全性的要求,并不因之下降。同时,多租户应用在租户数量增多的情况下,会比单租户应用面临更多的性能压力。本文即对这个主题进行探讨:多租户在数据层的框架如何在共享、安全与性能间进行取舍,同时了解一下市面上一些常见的数据厂商怎样实现这部分内容。

常见的三种模式
在 MSDN 的这篇文章 Multi-Tenant Data Architecture 中,系统的总结了数据层的三种多租户架构:

  • 独立数据库
  • 共享数据库、独立 Schema
  • 共享数据库、共享 Schema、共享数据表
独立数据库是一个租户独享一个数据库实例,它提供了最强的分离度,租户的数据彼此物理不可见,备份与恢复都很灵活;

共享数据库、独立 Schema 将每个租户关联到同一个数据库的不同 Schema,租户间数据彼此逻辑不可见,上层应用程序的实现和独立数据库一样简单,但备份恢复稍显复杂;

 最后一种模式则是租户数据在数据表级别实现共享,它提供了最低的成本,但引入了额外的编程复杂性(程序的数据访问需要用 tenantId 来区分不同租户),备份与恢复也更复杂。


参考文献:

http://msdn.microsoft.com/en-us/library/aa479086.aspx

http://www.ibm.com/developerworks/cn/java/j-lo-dataMultitenant/


“ 共享数据库、共享 Schema、共享数据表 ”模式下如何实现多租户?

最简单的思路:给每个资源都带上一个租户id。


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐