阅读笔记:Multi-tenant SaaS database tenancy patterns

https://docs.microsoft.com/en-us/azure/sql-database/saas-tenancy-app-design-patterns
之前一直认为所谓的cloud版本的数据库和线下原版的数据库应该没啥区别(除了提供一些基于cloud 的API调用),但是看了这篇文章之后觉得,cloud版本的数据库还是大有不同的,更加的复杂,但是所有的考虑都是来源一个--成本。

多租户的概念,一开始搞不明白,以为就是数据库中不同的帐号,每一个帐号拥有不同权限来执行不同的智能罢了,但是实际上在cloud这个范畴里面,租户可不是普通的数据库里面的帐号,而是代表的使用云数据库的用户。比如说小王买了一个cloud数据库服务,小张也买了一个,那么小王和小张就是两个租户。这个在普通版的数据库使用中很少出现的情况 ,一般就是一个客户使用一套数据库部署而已。

正因为在cloud版本的数据库中拥有多租户的概念,所以在为你的应用购买cloud数据库的时候需要更加仔细一下,了解一下对于多租户模式,云厂商是否提供了多种使用模式,避免以后发现不合适,还要进行切换,这种切换一般都是要收费的。

下面就介绍一下集中多租户的cloud数据库使用模式:

  1. 单租户模式:一个租户独享一个数据库实例
  2. 多租户模式:多个租户共享一个数据库实例,但是每一个租户使用自己的schema。
  3. 混合租户模式:多个租户不但共享一个数据库实例,而且还要共享一个schema
    上面三种,成本由高到低,隔离由高到低。

怎么对上面三种模式进行选择呢,下面有几个参考:
一般不管是哪种模式,应用的使用方式上面一般都是没有影响的。只是在其他的,比如性能,管理,监控方面会有比较大的影响,相信这些东西应该在你的数据解决方案里面也会有着比较重要的位置吧(好多开发者都会忽略掉这个方面,而只是关注业务共嗯那个,这样后面会吃大亏的)

  1. 扩展性
    o 你会有多少个租户(有的业务可能会把每一个自己的用户都对应一套数据,以此进行数据上面的隔离,比如wordpress之类的博客系统,每个用户在自己的库里面各自玩,不影响别人的数据)
    o 是否需要每一个租户都独自用一套存储
    o 存储上面是否由混合使用的需求
    o 负载

  2. 租户隔离:数据隔离和性能(一个租户的使用会影响到另一个租户的性能)

  3. 租户成本

  4. 开发复杂度:
    o 是否需要对schema等概念进行代码修改
    o 是否需要在查询里面做一些特殊的改动以适应多租户环境

  5. 运维复杂度
    o 监控和性能的管理
    o schema的管理
    o 租户数据的重新部署
    o 灾难复原

A. 单租户单实例模式
这种模式就是,对每一个租户,都独立运行一套数据库系统,肯定多个租户之间不会有什么相互影响的,这个跟我们一般的数据库使用方式一样的。这种模式不管什么监控,性能,管理等方面也是跟现在的一般的数据库实践都是一致的,但是问题就是成本太高,想想一个租户就要使用独占一组进程,一套自己的共享内存,如果大部分时候这个业务不是那么繁忙,那么云厂商肯定会动他的主意的,除非租户说我就是人性,然后给足够的钱,这当然没有问题。

B. 多租户单实例
这种模式是,多个租户启动一个数据库实例,但是给每一个租户分配一个schema,以此实现数据的隔离。这种方式显而易见,启动一个实例,那么就意味着共享一组进程资源了,共享一套共享buffer了 ,虽然存储方面不见得会省。性能方面虽然进程方面是共享的,但是还是可以根据租户区分出来的,让租户独立使用一些进程计算资源,但是共享buffer就完了,所有的租户肯定要一起争抢了,另外数据库中的什么WAL日志,数据落盘,MVCC的一些记录优化任务都要共享了,性能方面肯定是不如单租户单实例模式了。但是有一点还算可以欣慰的是,数据库还是提供了schema层面的监控数据的,比如transaction的执行时间等等都是schema区分,意味着你的监控工具还是可以像单实例模式下一样使用的。
这种模式需要一个实例能够支持非常多的schema,这个估计原版的代码是不能够很好支持的,至少需要改一下,但是估计也不难,一般这种模式都要支持个100,000个schema吧。另外还有其他的一些资源也会暴增,比如索引,都需要单独的优化一下。

C. 多租户单数据库
这种模式是,一个实例中,每一个schema可以支持多个租户,同时还可以有多个这种schema同时存在,想想知道,实现的时候肯定是在schema里面添加的租户标识字段了,这种模式肯定要牺牲掉隔离性了,一个schema本来是一套存储文件,现在这些文件中混杂了多个租户的数据,反正从文件层面是区分不出来租户了,同样,什么性能监控也不用想了,因为数据库对transaction的状态的粒度都是schema级别的。
这种模式的存在就是成本,低廉的成本,所有租户的计算都控制在了一组资源里面,而且在进程利用率方面,实际上没法区分租户的,基本上都是共享。
用户选择这种模式,一个是看重的低成本,第二,因为这种模式能够实现非常多的租户(是用schema中一个字段来标识租户数 ,肯定比实例中的支持的最大数据库数要多很多)。

考虑sharding的情况
上面每一种模式会有一些响应的sharding的情况,大多就是根据租户标识进行sharding,实际上也没少好说的 ,顶多就是一个租户的数据最好shard到一个存储节点上面的一些优化方法。sharding是一个双刃剑,做shard肯定就需要维护一些mapping,这就要看业务具体的情况了,业务设计者多操心吧。

最后是一种多种模式融合的场景:
一个业务,比如wordpress博客之类的 ,或者在线ERP之类的等等,首先提供一个免费注册体验的业务,即用户注册之后,免费获得一个临时使用机会,这个时候就可以给这个用户在第三种模式中分配一个租户,让他随便去用好了,但是不提供性能保证。如果这个用户购买了一般性的服务,那么就给他转移到第二种模式下去,如果这个用户购买了最高级别的业务,那干脆把这个租户放到第一种模式独享资源好了。想想这种设计还真的是很不错的,如果自己搭建本地的数据库服务的话还真的很难实现这种场景。感谢云数据库。

Over

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,919评论 2 89
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,292评论 0 9
  • 本文发布在个人博客,因为Github Pages在百度不会被收录,所以为了能帮助到更多的人,特意发到简书上,大家可...
    兰缘小妖阅读 13,991评论 5 26
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,728评论 0 30
  • 001 学会感恩,这是做人的最基本原则,看了那么多书,总归有那么一本会唤醒你。 002 人的一辈子很短,不要给自己...
    杨作辉阅读 192评论 0 0