Django


1851 浏览 6 years, 1 month

4.2 db

版权声明: 转载请注明出处 http://www.codingsoho.com/

SQLite

SQLite Expert Personal

Oracle

saas

多数据库联动 & 多租户构架的数据库解决方案

我公司的同一统管理系统有很多客户使用,如何实现多个客户的数据统一迁移到一台服务器上管理?-CSDN论坛
http://bbs.csdn.net/topics/392142099

我公司做为客户企业做进销存管理系统开发的,这个系统的部署分数据库和软件两个部分。之前没有公网服务器的时候,同一套系统要为每个客户在他们自己的服务器上安装数据库和软件。现在有了阿里云等这样的云服务器了,我们就想可以把多个客户的数据库都部署到同一个阿里云服务器上来提供统一管理,这样也能为每个用户节省服务器采购和维护的成本。不过这样一来,就存在是 为每个客户都建一个数据库呢还是只建一个数据库来存放所有客户的数据的问题。

说来思想有些落伍了,很早的时候oracel12c就已经提供了这样的解决方案,业界有个专有名词叫多租户构架的数据库解决方案,可以实现多用户的数据进行统一维护、进行多用户数据联合汇总分析、各用户数据隔离、各用户数据可以独立备份。直到现在我还是没有搞清楚到底应该怎么架构这样的一个复杂的系统,它的实现肯定不单是数据库的问题,也应该需要依赖软件开发来实现。

现在云计算、面向服务等各种思想都发展进化的很好,比如像阿里云的云数据库是怎么实现的呢?他应该不会是为每个租户独立建一个数据库来的吧?

可能淘宝或京东这样的大型商城系统也和这个多租户系统有类似吧。他是怎么实现的不同用户数据隔离而能又能互访的呢?

典型的saas化的多租户数据隔离疑问,目前的实现模式大概有三种:

1、独立数据库(一个租户一个数据库实例)

2、共享数据库、独立 Schema(多个租户一个数据库实例,每个租户有自己的database或table)

3、共享数据库、共享 Schema、共享数据表(共享数据库实例、共享database、共享table,租户数据通过表中增加租户id区分)

每种,有各自个特性和适用场景,具体用什么模式,得看具体的业务。

1->2->3 隔离性、成本依次降低,复杂度、共享性依次提高。

传统企业软件saas化,最简单的方式就是第1种,软件无需任何修改。与原来的部署一直,每个租户部署一套给他即可。

至于第2、3种,都需要改代码。

第2种嘛,每个租户的应用链接不同的database,因为数据库实例共享,如果数据库实例出现问题,该实例的所有租户都会受到影响。

第3种,数据改为用租户id区分后,业务逻辑不改是不可能实现的。而且采用第3种模式,就会让应用层面也只能是共享,多个租户访问同一应用,受影响时大家一起受影响。

那第三种是不是毫无是处呢?不是,第三种带来的效果是,维护简单成本低,数据库备份容易,有bug修改时统一修复。缺点是针对单个租户的数据恢复会变得困难和复杂。单实例或者单库的时候,谁有问题恢复谁就可以了。大家共表后,恢复的时候就得小心谨慎。淘宝和京东嘛,只有有的业务看起来是多租户,说多用户更合理。 典型的多租户是像阿里云这类系统,软件saas、pass,针对不同的用户提供不同的服务时,涉及的才是多租户。

至于你的问题,还得具体分析。如果采用多租户架构,你的每个租户多大并发?每个租户数据量多大?租户的数据安全性隔离要求多高?租户要求自己的系统稳定性多高?
如果用共享策略,能满足用户的要求吗?如果不用共享策略,成本和维护的复杂度,自己公司能够承受吗?

因为,多租户不仅仅只涉及数据库层面的隔离,还有上层的应用要隔离吗?缓存要隔离吗?MQ要隔离吗?文件系统要隔离吗?等等各种隔离和各种怎么隔离?

实现最简单的模式就是实例隔离,每个租户有自己的实例,老死不相往来。

方案也不是只有一种可以混合着用,看具体情况。

现在用Docker容器化技术,让应用实例秒起能简单实现。也让实例隔离这种方案,大大简化。Docker真是个好东西啊……

saas、pass中涉及到的东西太多了,你问的问题看起来不多,每个扯开了看,都要怕很多文才能知道大概。

SaaS多租户模式数据存储方案-openstack学习-about云开发
http://www.aboutyun.com/thread-14633-1-1.html

云平台之多租户 - 丁亮的个人博客
http://88250.b3log.org/cloud-app-platform-multitenancy

SaaS模式应用之多租户系统开发(单数据库多Schema设计) - 童小鱼 - 博客园
https://www.cnblogs.com/Txy-Net/p/SingleDbMultipleSchema01.html

将您的 web 应用程序转化为多租户 SaaS 解决方案
https://www.ibm.com/developerworks/cn/cloud/library/cl-multitenantsaas/

SaaS多租户数据隔离的三种方案 - CSDN博客
http://blog.csdn.net/yown/article/details/51288549

Schema(数据库中的Schema)_百度百科
https://baike.baidu.com/item/Schema/15286221?fr=aladdin

Django 多数据库联用 - Django 教程 - 自强学堂
https://code.ziqiangxuetang.com/django/django-multi-database.html

django 多数据库配置 - CSDN博客
http://blog.csdn.net/songfreeman/article/details/70229839

django配置连接多个数据库,自定义表名称 - 爱做梦的鱼 - 博客园
https://www.cnblogs.com/dreamer-fish/p/5469141.html

在django里使用多个数据库 - CSDN博客
http://blog.csdn.net/feng88724/article/details/7177957

将您的 web 应用程序转化为多租户 SaaS 解决方案
https://www.ibm.com/developerworks/cn/cloud/library/cl-multitenantsaas/index.html

django-tenants
https://pypi.python.org/pypi/django-tenants

Django 与数据库交互,你需要知道的 9 个点 https://zhuanlan.zhihu.com/p/33475891?utm_source=wechat_session&utm_medium=social

django saas - 百度 https://stackoverflow.com/questions/21771345/multi-tenant-saas-in-django

Issue

Syncdb 1406 data too long for column ‘name’

Verbose name can be too long