- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
云平台多租户设计
在云领域我们经常会听到一个词:多租户。这个词在不同的语境中有着不同的含义,本文将介绍云平台中的多租户的概念以及实现多租户支持的思路。什么是租户刚开始接触这个概念时,你肯定感觉“租户”这个词怪怪的,但如果我们换个词,我相信你马上就有感觉了,这个词就是“客户”(这里的客户指的就是商业上面的客户)。一个租户就是一个客户,比如我们开发的服务是给 XXX 企业使用的,那该企业就是我们的一个客户/租户;如果这个服务是面向互联网的,那么使用该服务的每个互联网用户都是一个客户/租户。为什么需要多租户支持开发者辛辛苦苦开发出一个服务,提供给了个人/企业使用,这样就完事了么?当然不应该只是这样,我们开发出一个服务,最好是能够同时提供给多个个人/企业使用,而且这些客户最好是共享同一套服务运行时(Runtime),这样可以大大降低服务的运维成本:服务运行时如果分开,则运维的成本与客户数成正比(比如更新部署大量客户的场景)节省资源(将服务所需资源利用最大化:运维团队统一、硬件使用)另外,这样也可以降低服务的开发成本:我们只需要考虑如何实现单用户的服务逻辑:业务逻辑对应其所有客户都是相同的,无论什么客户来使用,程序提供的服务都是一样的。进一步说,在业务层面我们开发这个服务时理论上不需要考虑多客户支持,我们只用关注该服务的业务逻辑如何实现多客户的管理功能可以进行统一:开发者应该不用考虑客户管理功能,这部分应该是由云平台统一提供的多租户场景举例假设我们要开发的服务是一个博客平台,这个服务是面向互联网用户的,每个互联网用户都是我们的客户(一个用户就是一个租户)。在不支持多租户的环境中,为了隔离每个用户的数据,至少我们在设计数据库表时会考虑大多数表都存在一个 user_id 字段,用于?CRUD?数据时使用该字段进行用户隔离。比如现在的业务是“发布文章”,需要将文章数据保存在 article 表中,在实现时实际上我们关注了两件事情:CRUD:这是业务逻辑实现的一部分用户隔离:需要加入 user_id,做业务关联1 是“纯”业务逻辑部分的实现,这是必须实现的;2 则是为了多用户博客平台而需要考虑的,这并不是博客平台本身的业务逻辑。这里如果能得到平台的多租户支持,就不用考虑第 2 点了,这样可以将注意力集中于第 1 点业务逻辑实现上,这是非常典型的一个多租户场景。多租户支持我们可以这样理解多租户支持:从服务提供的角度看,我们开发的一个服务运行时可以同时提供给多个客户使用,并且客户之间的数据/状态是保持隔离的从服务使用的角度看,我和你可以作为不同的客户同时使用同一个运行的服务,此时我们使用该服务完成的业务是相互不影响的,就好像我们在使用自己独享的服务一样那么这个服务就是支持多“客户”的,即该服务支持多租户。这里的“服务”可以是应用,可以是 SaaS 平台,也可以是 PaaS 平台。不过按目前我们熟悉的云平台看,应用的多租户支持应该是最常规的,这是因为应用面向的是用户,这个群体是很庞大的。多租户支持从实现的角度看,“/wiki/%E5%A4%9A%E7%A7%9F%E6%88%B7是一种软件架构技术”,之所以强调它是属于架构层面是因为要实现它必须在做技术架构时就要将其考虑在内。一种租户模型本文一开始我们提到使用“客户”来置换“租户”来理解租户的含义,再从“商业”这个方面来看的话,我们不难发现租户其实就是其云环境中的商业模式实现的一部分。商业模式是多样的,这意味着租户的划分也是多样的,这里我们描述其中一种可能的租户栈:应用程序是提供给用户使用的,对于应用来说,用户就是它的租户(这一点业界比较统一)SaaS 提供的服务是给应用开发商使用的,对于 SaaS 来说,应用开发商就是它的租户PaaS 提供的服务是给应用系统使用的,对于 PaaS 来说,相关应用的组合就是它的租户SaaS 和 PaaS 面向的是开发商、系统等非端用户角色,这一部分一般是由云平台开发者决定的(捆绑商业模式),特别是私有/企业云平台一般不会考虑形如“在 PaaS 平台上支持运行多个 SaaS 平台”这样的场景。所以下面我们更多的是围绕“应用对多租户支持”进行讨论。应用多租户应用多租户的使用场景前面已经介绍过了,现在假设我们是一个云平台开发者,为了满足支持应用支持多租户的需求,在云平台中我们需要提供下面几个支持:租户管理:CRUD,统计租户隔离/共享的服务:队列、缓存、数据库等租户隔离的统计:日志、配额这些支持可以分为两类:租户的管理:不会直接面向应用的端用户,面向的是应用的运维,平台应该提供具体实现租户数据/状态的隔离:从请求开始就应该可以区分这个请求是来自于哪个租户,请求处理时在调用链路上也需要带上租户上下文,数据的存取是按照租户隔离的,调用平台提供的服务时也是租户隔离的第 1 点比较容易实现,这是一个
文档评论(0)