我最近听说过我公司的一个项目使用的多租户架构术语。我在谷歌上看过它 但有些疑惑。以下是多租户的简要定义
多租户是一种架构,其中单个实例 软件应用服务多个客户。每个客户都是 叫租客
但是如果按照这个定义,每个Web应用程序都支持多租户架构,因为数百万终端用户使用它们。没什么特别的。所以对我来说这看起来很流行。所以它的设计主要是在数据库方面,而不是技术方面
从项目java和数据库设计来看,在多租户架构中,租户实际上是指内部拥有的组织 可以拥有数百万用户。
在数据库和Java设计方面意味着:
我们有一个额外的表格,即org_id
列由user
表引用的组织。现在,通常大多数表都有user_id
列
出于安全原因,只需操纵从UI发送的id,其他其他组织的数据就不会受到损害。
然后,Java查询使用会话中的用户ID来确保安全性。
所以我的理解是多租户主要是关于支持多个组织(它们有自己独立的用户群) 单一服务器和数据库,这是经济有效的方式,它可以设计最小的设计(额外的组织表和查询 从会话中传递userId
另一个选择可能是为每个组织设置多个实例,这意味着更多的成本。
我的理解是否正确?
答案 0 :(得分:-1)
实际上,您的Web应用程序示例具有误导性。在apache中,每个客户端请求的标准是在apache webserver的单独实例中处理。一旦实例处理完Web请求,它将处理下一个请求,但它只能一次处理一个。根据您的定义,我会怀疑默认情况下apache Web服务器是否是多租户。
无论如何,我已经开发了许多服务器应用程序,但我从未遇到过术语multi-tenancy
。人们总是用流行语来描述不同的东西,因此理解使用它的人认为它意味着什么更为重要。只要这个人不仅仅是在流行语中,你应该能够就此进行一次智能的对话。
答案 1 :(得分:-1)
您提供的定义错误,因为多个客户端未使用单个实例。但是,在云中安装了一个版本的软件,并且对于每个用户,一旦用户订阅,就会创建该软件的单个实例。
多租户是云计算的软件即服务(SaaS)原则。多租户允许每个不知道其他客户端存在的客户使用单个但分离的软件实例。多租户应用程序始终在云平台上运行,无法在本地安装,并且可通过在线连接(基于Web的基于应用程序)访问。
您可以参考Saleforce的软件定义服务,该服务领导SaaS市场:
多租户架构,其中所有用户和应用程序共享一个集中维护的公共基础架构和代码库。由于SaaS供应商客户端都在相同的基础架构和代码库中,因此供应商可以更快地进行创新,并节省以前用于维护过时代码的大量版本的宝贵开发时间。
如果你看一下定义,就会有一个共同的基础设施和代码库,而不是一个实例。
答案 2 :(得分:-1)
你的定义几乎是正确的。多租户主要是在单个应用程序部署中支持多个组织。但是,这可能意味着拥有多个应用程序服务器和数据库服务器。
此外,它是附加用户的组织,用于查询而不是用户ID本身。当用户出现在多个组织中时,需要来自请求的其他信息来确定哪个组织适用于请求的上下文。
各种架构可以支持多租户,但通常是持久性(db)层构成了最大的挑战。数据库分片(http://en.wikipedia.org/wiki/Shard_%28database_architecture%29)可用于在各种数据库服务器之间分割负载,同时作为单个模式公开给应用程序层。在这种情况下,组织ID可以用作分片键。但是,这要求应用程序层了解多租户功能。同样,这可以以不同的方式实现,其中一些方式对于大多数应用程序代码几乎是透明的。 Mysql Fabric和Hibernate可以一起使用来帮助您开发多租户应用程序:http://dev.mysql.com/doc/mysql-utilities/1.4/en/connector-j-fabric-hibernate.html