云平台之多租户的实践—理论篇


云平台之多租户的实践—理论篇文章插图
本文作者:何建辉(公众号:org_yijiaoqian)
前言在云领域我们经常会听到一个词:多租户 。 这个词在不同的语境中有着不同的含义 , 接下来将从理论到实践对以往的项目进行一次总结 , 同时实战一个Demo 。 本篇先从理论介绍云平台中的多租户的概念以及实现多租户支持的思路 。
多租户是什么多租户技术(Multi-TenancyTechnology)又称多重租赁技术:是一种软件架构技术 , 是实现如何在多用户环境下 (此处的多用户一般是面向企业用户)共用相同的系统或程序组件 , 并且可确保各用户间数据的隔离性 。 简单讲: 在一台服务器上运行单个应用实例 , 它为多个租户(客户)提供服务 。 从定义中我们可以理解:多租户是一种架 构 , 目的是为了让多用户环境下使用同一套程序 , 且保证用户间数据隔离 。 那么重点就很浅显易懂了 , 多租户的重 点就是同一套程序下实现多用户数据的隔离
需求分析传统软件模式 , 指将软件产品进行买卖 , 是一种单纯的买卖关系 , 客户通过买断的方式获取软件的使用权 , 软件的 源码属于客户所有 , 因此传统软件是部署到企业内部 , 不同的企业各自部署一套自己的软件系统 。
Saas模式 , 指服务提供商提供的一种软件服务 , 应用统一部署到服务提供商的服务器上 , 客户可以根据自己的实际 需求按需付费 。 用户购买基于WEB的软件 , 而不是将软件安装在自己的电脑上 , 用户也无需对软件进行定期的维护与管理
云平台之多租户的实践—理论篇文章插图
在SaaS平台里需要使用共用的数据中心以单一系统架构与服务提供多数客户端相同甚至可定制化的服务 , 并且仍可 以保障客户的数据正常使用 。 由此带来了新的挑战 , 就是如何对应用数据进行设计 , 以支持多租户 , 而这种设计的 思路 , 是要在数据的共享、安全隔离和性能间取得平衡 。
多租户的数据库方案分析目前基于多租户的数据库设计方案通常有如下三种:

  • 独立数据库
  • 独立 Schema 共享数据库
  • 共享数据库且共享数据表
独立数据库针对独立数据库的这种方式 , 首先需要业务层能够支持多数据源的配置 , 并且为每个租户创建或初始化一个数据库 。 应用程序和数据库都是独立的实例 , 因此它不会与任何其他独立实例交互 。 只为一个租户提供服务 , 拥有独立的服务、独立的数据库以及独立的请求处理 。
云平台之多租户的实践—理论篇文章插图
独立数据库:每个租户一个数据库 。
  • 优点:为不同的租户提供独立的数据库 , 有助于简化数据模型的扩展设计 , 满足不同租户的独特需求;如果 出现故障 , 恢复数据比较简单;
  • 缺点: 增多了数据库的安装数量 , 随之带来维护成本和购置成本的增加 。
这种方案与传统的一个客户、一套数据、一套部署类似 , 差别只在于软件统一部署在运营商那里 。 由此可见此方案用户数据隔离级别高 , 安全性好 , 但是成本较高 。
共享数据库、独立 Schema共享数据库、独立Schema模式 , 是将多个或所有租户的数据放在一个数据库服务中 , 但是为每一个租户建立一个独立的schema 。 租户间数据彼此逻辑不可见 , 上层应用程序的实现和独立数据库一样简单 。 (补充:mysql数据中的schema比较特殊 , 并不是数据库的下一级 , 而是等同于数据库 。 )
优点:对于安全性要求较高的租户 , 是一种选择 。 提供了一定程度的逻辑数据隔离 , 但并不是完全隔离;每个数据库可支持更多的租户数量 。
缺点:如果出现故障 , 数据恢复比较困难 , 因为恢复数据库将牵涉到其他租户的数据;如果需要跨租户统计数据 , 存在一定困难 。 这种方案是方案一的变种 。 只需要安装一份数据库服务 , 通过不同的Schema对不同租户的数据进行隔离 。 由于数据库服务是共享的 , 所以成本相对低廉 。