您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

多租户架构

时间:2021-04-12 12:35:14  来源:今日头条  作者:闻数起舞

软件设计师的库

内容

  • 介绍
  • 单租户vs多租户
  • 数据库和多租户
  • 真实示例
  • 优点
  • 缺点
  • 用例
  • 概要

1.简介

在多租户环境中,多个客户(租户)共享相同的应用程序,它们在相同的操作系统上,相同的硬件上以相同的数据存储机制运行。客户之间的区别是在应用程序设计期间实现的。客户不会共享或看到彼此的数据。与每个用户都有自己专用环境的专用系统相比,这样做的主要动机是降低每位用户的成本。

多租户架构

 

> In a multi-tenant Application, most of the software stacks — up until the application itself, — are shared by the different tenants.

软件即服务(SaaS)应用程序经常使用多租户。SaaS的本质归结为以下事实:供应商开发软件,将其放置在服务器上,维持其性能,安全性,客户可用性(通常为复数形式),支付服务器费用和其他费用。对于客户而言,这种方法更便宜,而对于卖方而言则是值得的(因为它解决了许可和盗版问题,而且最重要的是,可以为多个客户提供一项服务)。

2.单租户vs多租户

2.1单租户

该软件和支持基础结构的单个实例为单个客户提供服务。通过单一租赁,每个客户都有自己的独立数据库和软件实例。本质上,此选项不会发生共享。

2.2多租户

多租户意味着该软件及其支持基础结构的单个实例为多个客户提供服务。每个客户共享该软件应用程序,还共享一个数据库。每个租户的数据都是孤立的,其他租户看不到。

多租户架构

> Single-Tenant and Multi-Tenant architectures comparison

3.数据库和多租户

3.1一个通用数据库,一个通用模式

一切都存储在一个数据库和公用表中。要实现此选项,先决条件是引入一个附加的字段TenantID(或您喜欢的CustomerID)以分隔客户之间的信息。

好处:

  • 当我们将所有信息存储在一组表中时,更易于开发,更新和维护
  • 添加客户就像在客户表中创建新记录一样简单

缺点:

  • 没有灵活性,所有客户端都使用同一组表和列。出现了非典型客户会导致问题和打补丁。
  • 浪费人力和精力开发自己的权限分离系统:(
  • 备份和恢复问题。一个表不能简单地删除和创建,因为它包含其他客户端的数据。您必须查找所需的行并将其覆盖,这很麻烦。

解析度:

如果您有很多客户并且缺乏资金/服务器,并且所有硬盘驱动器不会同时消失,那么这是个不错的选择。

3.2一个通用的数据库,不同的模式

来自不同客户端的信息存储在不同的表中。模式是包含某些资源(例如表)的“命名空间”,可以在其上授予某些权限。

好处:

  • 由于有了这些架构,访问共享发生在DBMS级别,因此不需要我们进行其他开发(我们节省了工时)
  • 更少的数据库-更少的硬件资源,再次保存
  • 可扩展性不错-在添加客户端时,我们会基于标准架构创建一个新架构,配置访问权限,然后完成。尽管所有架构都基于标准架构,但由于保留了隔离性,因此它们可能会发生一些更改,因此可以编辑列,表等。

缺点:

  • 由于表在逻辑上而不是物理上分开,因此不同客户的数据存储在一起。
  • 备份和恢复存在问题。因为只有一个数据库,所以如果来自一个客户端的表已折叠,则数据库的简单回滚将把所有客户端的数据返回到过去,这是不可接受的。在这里,您将需要选择性地回滚以及合并新旧数据。该过程比仅回滚整个数据库要复杂一些。

解析度:

如果客户准备好生活在共享环境中,则选择均衡的方案。

3.3分开的数据库

代码在客户端之间共享(使用通用的UI和业务逻辑),数据在逻辑上(可能物理上)在客户端之间共享。

好处:

  • 简单的可扩展性(添加客户端足以创建和配置新数据库)
  • 轻松扩展-您可以在不同的服务器上分发不同客户端的数据库
  • 个性化-您可以为某些客户端进行个别设置(甚至将数据库放置在另一个DBMS上)
  • 简单备份-如果某个客户端在数据库回滚期间发生故障,则其他客户端不会受到任何影响;

缺点:

  • 昂贵。一台服务器支持的数据库数量有限,这意味着这种解决方案将需要更多的硬件(而不是将所有内容存储在一个数据库中的方法),更多的硬件-更多的管理员,服务器机房空间和电费
  • 再次昂贵。当一台服务器上有多个数据库,其总容量大于RAM大小时,数据将被转储到交换文件中,因此访问硬盘非常慢。出路是购买更多服务器

解析度:

对于主要目标是安全性且愿意付款的客户(例如银行),这是最佳解决方案。

4.实际例子

多租户架构

> Serverless single database multi-tenant architecture on google Cloud

 5.优势

  • 节省成本:共享环境成本,这些节省(来自供应商)通常转移到软件成本中。
  • 数据聚合:不是从可能具有不同数据库模式的多个数据源收集数据,而是将所有客户的所有数据存储在单个数据库模式中。因此,在客户之间运行查询,挖掘数据并寻找趋势要简单得多。
  • 简化版本管理:该软件包仅需要安装在单个服务器上。相同的软件版本对所有客户可用。
  • 供应商利用的维护和更新:客户无需支付昂贵的维护费用即可保持软件最新。供应商推出新功能和更新。

6.缺点

  • 开发的复杂性增加:由于额外的自定义(自定义品牌,工作流程中的差异,数据模型的扩展,访问控制),以及维护每个租户元数据的需求,因此多租户应用程序需要进行更大的开发工作。
  • 增加的新发行版风险:由于只有一个软件实例为多个租户服务,因此即使请求更新并且仅对一个租户有用,对该实例的更新也可能导致所有租户停机。此外,应用新版本导致的一些错误和问题可能会在其他租户对应用程序的个性化视图中体现。
  • 有限的自定义:虽然您确实增加了集成优势,但是对数据库的自定义更改通常不是一个选项,因为它在多个用户之间共享。
  • 降低的安全性:由于在同一数据库上允许多个用户(与您的组织不相关),因此这种更广泛的访问降低了对安全性的控制。示例如下:一个租户可以访问邻居的数据,数据被意外返回给错误的租户,或者一个租户在资源共享方面给另一个租户带来了负面影响。可以利用这些漏洞谋取个人利益。
  • 糟糕的性能:您的共同租户可能正在消耗共享资源并拖慢了速度。容量应该具有弹性并可以根据需要扩展,但并非总是如此。
  • 更新:如果您依赖与其他SaaS产品的集成并且更新了其系统,则可能会导致这些连接的应用程序出现问题。

7.用例

  • 软件即服务(SaaS)/应用即服务(AaaS)
  • 平台即服务(PaaS)
  • 基础架构即服务(IaaS)[可用于服务的硬件和软件]
  • 通常,多个客户使用相同的算法,数据,应用程序堆栈。核心功能可以相同或模块化,并且可以基于每个客户端进行自定义。

8.总结

  • 多租户=该软件及其支持基础结构的单个实例为多个客户提供服务。每个客户共享该软件应用程序,还共享一个数据库。每个租户的数据都是孤立的,其他租户看不到。
  • 使用一个数据库,一种通用模式可以节省金钱(使用更少的服务器),但代价是更大的安全性和备份风险以及更大的开发工作量。除非您知道分区是什么,否则;)使用一个数据库和多个模式作为成本与开发工作/安全性和备份风险之间的平衡平衡。对于主要目标是安全性并准备为此付费的客户,请使用单独的数据库。
  • 好处包括简化的数据聚合,发布,更新,维护管理;他们通常更具成本效益
  • 缺点包括复杂的开发,发行和更新风险,有限的自定义,降低的安全性和较差的性能。
  • 当多个客户使用相同的算法,数据和应用程序堆栈时,可用于SaaS,PaaS,IaaS应用程序。核心功能可以相同或模块化,并且可以基于每个客户端进行自定义。

 

(本文由闻数起舞翻译自Lokajit Tikayatray的文章《Multi-Tenant Architecture》,转载请注明出处,

原文链接:https://levelup.gitconnected.com/multi-tenant-architecture-8c1f597e069c)



Tags:架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  Tags: 架构  点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  Tags: 架构  点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22  Tags: 架构  点击:(10)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  Tags: 架构  点击:(20)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  Tags: 架构  点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  Tags: 架构  点击:(23)  评论:(0)  加入收藏
背景在日常工作中,我们通常需要存储一些日志,譬如用户请求的出入参、系统运行时打印的一些info、error之类的日志,从而对系统在运行时出现的问题有排查的依据。日志存储和检索...【详细内容】
2021-11-23  Tags: 架构  点击:(20)  评论:(0)  加入收藏
zookeeper动物管理员,是一个很形象的名字,是一个分布式协调服务。它可以用来做分布式配置管理,服务注册及发现,分布式锁。在CAP中,属于CP型。下图是zookeeper的架构图: 图中,绿色的...【详细内容】
2021-11-16  Tags: 架构  点击:(38)  评论:(0)  加入收藏
如何设计一个好的软件架构,如何提高软件的扩展性,移植性,复用性和可读性?很多做嵌入式开发的朋友经常会遇到这种情况:一个项目软件设计完成了,客户提出了一些新的功能需求。这时侯...【详细内容】
2021-11-08  Tags: 架构  点击:(35)  评论:(0)  加入收藏
架构是数据仓库建设的总体规划,从整体视角描述了解决方案的高层模型,描述了各个子系统的功能以及关系,描述了数据从源系统到决策系统的数据流程。业务需求回答了要做什么,架构就...【详细内容】
2021-11-03  Tags: 架构  点击:(35)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条