saas平台数据模型设计方案
一,设计模型需要考虑那些因素
1.1可扩展性
要考虑租户的数量,每个租户存储的级别,整体存储,工作符合能力
1.2 组合的隔离性
数据的隔离和性能 多个租户的的负载能力增加是否影响其他租户
1.3 租户成本
数据库存储量影响成本
1.4 开发复杂度
数据结构的的变化和查询语句的变化,以及服务的适配性问题
1.5 运维复杂度
性能监控,数据结构schema的管理,租户数据异常管理,灾备问题考虑
1.6 可定制化业务成都
租户的讨论集中在数据层。但考虑一下应用层。应用程序层被视为一个整体实体。如果将应用程序划分为许多小型组件,您的租户模型选择可能会发生变化。对于租户和存储技术或使用的平台,您可以对其他组件进行不同的处理。
二,常见的架构模式
2.1 独立服务和独立数据库
这个模式中,应用层和数据层都是隔离的
应用程序的每人实例都是独立实例。
租户拥有自己独立的数据库,每人应用程序实例只需要一个数据库。对租户的管理独立于系统之外,对于每一个租户,整个应用程序需要重复安装一次。供应商都可以为租户管理软件。每个应用程序实例都配置为连接到其相应的数据库
优点:
为不同的租户提供独立的应用实例和数据库,有助于简化数据模型和业务模型的扩展设计,满足不同租户的独特需求,如果出现故障,恢复系统或数据均比较简单,系统间也不会相互影响。
缺点:
数据库层面,每个租户数据库都作为独立数据库进行部署。该模型提供了最大的数据库隔离。但隔离需要为每个数据库分配足够的资源来处理其高峰负载。这里重要的是,弹性池不能用于部署在不同资源组或不同订阅中的数据库。这种限制使得这种独立的单租户应用程模型成为从整体数据库成本角度来看最昂贵的解决方案,应用层面,每人租户若存在个性化定制,则需要对项目进行横向扩展,扩展时务必需要保证与主干版本的兼容性问题。运维层面,应用和数据库的安装数量会随租户的数量线性递增,随之带来维护成本和购置成本的增加
模型图像
2.2 一套服务和独立数据库
这个模型中,应用层和数据层都是隔离的。
应用程序的每个实例都是独立实例。
租户拥有自己独立的数据库,每个应用程序实例只需要一个数据库。对租户的管理独立于系统之外,对于每一人租户,整人应用程席需要重复安装一次。供应商都可以为相户管理软件。每个应用程序实例都配置为连接到其相应的数据库。
优点:
为不同的租户提供独立的应用实例和数据库,有助于简化数据模型和业务模型的扩展设计,满足不同租户的独特需求如果出现故障,恢复系统或数据均比较简单,系统间也不会相互影响。
缺点:
数据库层面,每个租户教据库都作为独立数据库进行部署。该模型提供了最大的数据库隔离。但隔离需要为每人数据分配足够的资源来外理其高峰负载。这里重要的是,弹性池不能用千部署在不同资源组或不同订阅中的数据库。这种限制使得这种独立的单租户应用程模型成为从整体数据库成本角度来看最昂贵的解决方案,应用层面,每人租户若存在个性化定制,则需要对项目进行横向扩展,扩展时务必需要保证与主千版本的兼容性问题。运维层面,应用和数据库的安装数量会随租户的数量线性递增,随之带来维护成本和购置成本的增加
模型图像
2.2 一套服务和一套数据库
这个模型和模式2的区别是共享数据表。也就是说共同使用一个数据库一个表使用字段进行数据隔离。如表中增加TenantID多租户的数据字段。这是共享程度最高、隔离级别最低的模式。
简单来讲,即每插入一条数据时都需要有一个客户的标识。这样才能在同一张表中区分出不同客户的数据,这也是我们系统目前用到的(tenant id)。
优点:
方案的维护和购置成本低,允许每个数据库支持的租户数量最多.
缺点:
隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量,数据备份和恢复最困难,需要逐表逐条备份和还
image.png