很多站长朋友们都不太清楚php多租户架构,今天小编就来给大家整理php多租户架构,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 thinkphp 支持多租户吗 2、 什么是多租户模式? 3、 多租户技术的特色 4、 多租户和多应用怎么对应 thinkphp 支持多租户吗不支持
在云领域我们常常会听到一个词:多租户。这个词在不同的语境中有着不同的含义。本文将介绍云平台中的多租户的概念以及实现多租户支持的思路。
什么是租户
刚开始接触这个概念时,你肯定感觉“租户”这个词怪怪的。但假设我们换个词,我相信你立即就有感觉了。这个词就是“客户”(这里的客户指的就是商业上面的客户)。
一个租户就是一个客户,比方我们开发的服务是给 XXX 企业使用的,那该企业就是我们的一个客户/租户;假设这个服务是面向互联网的,那么使用该服务的每一个互联网用户都是一个客户/租户。
为什么须要多租户支持
开发人员辛辛苦苦开发出一个服务。提供给了个人/企业使用,这样就完事了么?当然不应该仅仅是这样。我们开发出一个服务。最好是可以同一时候提供给多个个人/企业使用。并且这些客户最好是共享同一套服务执行时(Runtime),这样可以大大减少服务的运维成本:
服务执行时假设分开,则运维的成本与客户数成正比(比方更新部署大量客户的场景)
节省资源(将服务所需资源利用最大化:运维团队统一、硬件使用)
另外,这样也能够减少服务的开发成本:
我们仅仅须要考虑怎样实现单用户的服务逻辑:业务逻辑相应其全部客户都是同样的,不管什么客户来使用,程序提供的服务都是一样的。进一步说,在业务层面我们开发这个服务时理论上不须要考虑多客户支持,我们仅仅用关注该服务的业务逻辑怎样实现
多客户的管理功能能够进行统一:开发人员应该不用考虑客户管理功能,这部分应该是由云平台统一提供的
多租户场景举例
如果我们要开发的服务是一个博客平台,这个服务是面向互联网用户的,每一个互联网用户都是我们的客户(一个用户就是一个租户)。
在不支持多租户的环境中,为了隔离每一个用户的数据,至少我们在设计数据库表时会考虑大多数表都存在一个 user_id 字段。用于 CRUD 数据时使用该字段进行用户隔离。
比方如今的业务是“公布文章”。须要将文章数据保存在 article 表中,在实现时实际上我们关注了两件事情:
CRUD:这是业务逻辑实现的一部分
用户隔离:须要增加 user_id。做业务关联
1 是“纯”业务逻辑部分的实现。这是必须实现的;2 则是为了多用户博客平台而须要考虑的,这并非博客平台本身的业务逻辑。这里假设能得到平台的多租户支持,就不用考虑第 2 点了。这样能够将注意力集中于第 1 点业务逻辑实现上,这是很典型的一个多租户场景。
多租户支持
我们能够这样理解多租户支持:
从服务提供的角度看。我们开发的一个服务执行时能够同一时候提供给多个客户使用。而且客户之间的数据/状态是保持隔离的
从服务使用的角度看,我和你能够作为不同的客户同一时候使用同一个执行的服务,此时我们使用该服务完毕的业务是相互不影响的,就好像我们在使用自己独享的服务一样
那么这个服务就是支持多“客户”的,即该服务支持多租户。这里的“服务”能够是应用,能够是 SaaS 平台,也能够是 PaaS 平台。只是按眼下我们熟悉的云平台看,应用的多租户支持应该是最常规的。这是由于应用面向的是用户,这个群体是非常庞大的。
多租户支持从实现的角度看。“是一种软件架构技术”,之所以强调它是属于架构层面是由于要实现它必须在做技术架构时就要将其考虑在内。
一种租户模型
本文一开始我们提到使用“客户”来置换“租户”来理解租户的含义。再从“商业”这个方面来看的话,我们不难发现租户事实上就是其云环境中的商业模式实现的一部分。商业模式是多样的。这意味着租户的划分也是多样的。这里我们描写叙述当中一种可能的租户栈:
应用程序是提供给用户使用的,对于应用来说,用户就是它的租户(这一点业界比较统一)
SaaS 提供的服务是给应用开发商使用的,对于 SaaS 来说,应用开发商就是它的租户
PaaS 提供的服务是给应用系统使用的,对于 PaaS 来说。相关应用的组合就是它的租户
SaaS 和 PaaS 面向的是开发商、系统等非端用户角色。这一部分通常是由云平台开发人员决定的(捆绑商业模式)。特别是私有/企业云平台一般不会考虑形如“在 PaaS 平台上支持执行多个 SaaS 平台”这种场景。所以以下我们很多其它的是环绕“应用对多租户支持”进行讨论。
应用多租户
应用多租户的使用场景前面已经介绍过了。如今如果我们是一个云平台开发人员,为了满足支持应用支持多租户的需求,在云平台中我们须要提供以下几个支持:
租户管理:CRUD,统计
租户隔离/共享的服务:队列、缓存、数据库等
租户隔离的统计:日志、配额
这些支持能够分为两类:
租户的管理:不会直接面向应用的端用户。面向的是应用的运维。平台应该提供详细实现
租户数据/状态的隔离:从请求开始就应该能够区分这个请求是来自于哪个租户,请求处理时在调用链路上也须要带上租户上下文。数据的存取是依照租户隔离的。调用平台提供的服务时也是租户隔离的
第 1 点比较easy实现。这是一个业务模型方面的问题,能够依据业务域来抽象租户模型,比方企业应用通常是依照“组织机构”来区分租户的;
第 2 点是一个纯技术的需求。须要在平台技术实现上支持按“租户”的执行时隔离,我们强调的是隔离,由于在实现时我们要达到的目标就是隔离,仅仅只是这里是按租户(租户仅仅是一个商业概念,技术层面我们最好能够将其进行抽象。尽量减小商业模式多样化对技术架构的冲击)。我们能够将租户映射到一个抽象概念上,这个抽象概念能够实现我们的隔离需求。
什么是多租户模式?低代码平台多租户模式可为集团下属各个机构开通企业域提供多租户服务,每个租户之间可以设定上下级关系,同时企业域可创建多级管理员,允许次级管理员独立维护子公司或子部门用户情况,对集团型企业大大缓解组织用户管理工作量压力。
多租户技术的特色多租户技术有下列特色:
由于多租户技术可以让多个租户共用一个应用程序或运算环境,且租户大多不会使用太多运算资源的情况下,对供应商来说多租户技术可以有效的降低环境建置的成本。包含硬件本身的成本,操作系统与相关软件的授权成本都可以因为多租户技术,而由多个租户一起分担。
通过不同的数据管理手段,多租户技术的数据可以用不同的方式进行数据隔离,在供应商的架构设计下,数据的隔离方式也会不同,而良好的数据隔离法可以降低供应商的维护成本(包含设备与人力),而供应商可以在合理的授权范围内取用这些数据分析,以作为改善服务的依据。
多租户架构下所有用户都共用相同的软件环境,因此在软件改版时可以只发布一次,就能在所有租户的环境上生效。
具多租户架构的应用软件虽可客制,但客制难度较高,通常需要平台层的支持与工具的支持,才可降低客制化的复杂度。
多租户和多应用怎么对应定义 软件多租户是一个软件架构,软件只有一个实例运行在服务器上,并服务于多个租户。一个租户包含一组用户,他们拥有指定权限,共同访问一个软件示例。一个多租户架构,应用程序未每个租户提供一个专属于他们的数据、配置、用户管理、租户特有的功能和属性。多租户通常用来创建Saas应用。 ABP多租户类库 基本定义与核心逻辑存放在Volo.ABP.MultiTenancy 内部。 针对ASP.NET Core MVC的集成则是由Volo.ABP.AspNetCore.MultiTenancy 项目实现的,针对多租户的 解析 都在这个项目内部。 租户数据的存储和管理都由Volo.ABP.TenantManagement 模块提供。
关于php多租户架构的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php多租户架构 多租户开源框架 java的详细内容...