文章管理系统(SaaS数据库的设计)

在SaaS产品平台,本质上是多租户订阅使用的服务模式,因此在技术架构实现层面,需要对不同租户的数据库存储(甚至包括文件存放)进行隔离和划分。那具体怎么设计,既能满足前期快速MVP版本迭代,又能符合未来更多客户、更多海量数据增长而不是系统崩溃卡顿呢?

文章管理系统(SaaS数据库的设计)

对于SaaS数据库的设计,核心就是要区分好每个租户、每个团队、每个用户的数据。在数据库技术层面的体现就是在数据库、数据库表、数据库表字体上的设计和实现。

文章管理系统(SaaS数据库的设计)

二、SaaS数据库隔离有哪几种策略?

SaaS数据库隔离有三种,从粗到细,分别是:

1、【粗】物理存储隔离方式:按整个数据库进行隔离2、【中】技术存储隔离方式:通过表前缀区分隔离3、【细】业务存储隔离方式:通过表字段划分租户数据4、【混合】混合的隔离方式

下面分别介绍,再来对比,看哪种方式更合适。

1、【粗】物理存储隔离方式:按整个数据库进行隔离

简单、粗暴、直接的方式,就是给每个开通的租户都分别创建一个数据库,单独隔离。

好处是:对于技术实现相对简单,只要在用户访问时,进行数据库的绑定和切换就可以了。数据迁移、导入导出方便。

不足是:需要给每个新租户动态创建一个数据库,并且后续随着产品版本迭代要变更追加新的数据库表很复杂、很麻烦。

文章管理系统(SaaS数据库的设计)

3、【细】业务存储隔离方式:通过表字段划分租户数据

第3种就是在业务层面,通过表字段来进行区分。例如有一个app_key表示不同的企业、不同的团队、不同的客户。

好处是:数据库表结构可以只维护一份。

不足是:数据量大时会容易产生慢查询,后续客户需要迁移到私服环境,数据拆分和清理需要更多的处理工作。

文章管理系统(SaaS数据库的设计)

原则3:支持租户身份的灵活切换

不同的租户是有不同的数据存储位置,那么平台方在处理不同租户数据时,就要能快速进行切换。包括:代码层面的切换和鉴权、API接口和页面访问的横向鉴权、计划任务和MQ和异步通知的区分、脚本命令工具的手动指定等。

可以参考领域驱动设计的模型,从外到内,都要始终能区分租户的数据。

文章管理系统(SaaS数据库的设计)

原则4:尽早统一维护SaaS系统的数据库完整变更记录

SaaS平台,难免会同时存在多个不同的环境,除了自己使用的开发环境、测试环境、正式环境;站在商用系统的交付维度,也会有多态环境,譬如:演示环境、正式SaaS环境、不同客户的私有部署环境、定制开发的环境、渠道版。

既然有那么多不同的环境,又有多种不同的数据存储策略,那么两者一结合,那就是乘数倍级的复杂度!

曾经就有位SaaS老板和我们说,“哎!现在很痛苦!明明昨天在开发环境还是好好的,今天在正式环境给客户一演示汇报就打不开了!!”。

后来一问,发现既没有预发布环境,又没有完整的数据库变更记录。很多时候代码发布到正式环境了,要么就是表字段忘加了,要么就是表忘建了。

多么初级和错误啊!

原则5:尽早统一业务数据语义

不同的业务字段,不同的值,在行业有不同的称呼,在不同的客户内部也有不同的理解。需要尽量针对SaaS场景服务的行业和目标客户对象,明确好每个业务字段的数据语义。

在内部、在研发团队、在外部宣传和客户沟通过程中,统一通用语言。

四、总结

经验总结,就是:设计简单、调整很难。

在前期设计良好很简单,但如果一开始设计混乱,到SaaS产品发展中后期再来调整,就会成本很高、难度很大、而且很多技术人员都不喜欢维护这些烂摊子。客户也不会给内部的数据迁移、系统重构来埋单。最后痛苦的就是做SaaS产品的创业者老板。

本文来自作者:二手车教授,不代表小新网立场!

转载请注明:https://www.xiaoxinys.cn/597084.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。