问题标签 [multi-tenant]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
43586 浏览

mongodb - MongoDB 中多租户数据库的推荐方法是什么?

我正在考虑使用 MongoDB 创建一个多租户应用程序。我没有任何关于我会有多少租户的猜测,但我希望能够扩展到数千个。

我可以想到三个策略:

  1. 同一集合中的所有租户,使用特定于租户的字段以确保安全
  2. 单个共享数据库中的每个租户 1 个集合
  3. 每个租户 1 个数据库

我脑海中的声音建议我选择选项 2。

想法和影响,有人吗?

0 投票
2 回答
1965 浏览

asp.net-mvc - 在 ASP.NET MVC 中使用 StructureMap 注入多租户存储库

我正在多租户 ASP.NET MVC 应用程序中实现 StructureMap,以注入基于接口检索数据的租户存储库的实例。ITenantContextTenant问题的是从RouteData基本控制器的 OnActionExecuting.

如何告诉 StructureMap 构建TenantContext(tenantID);从我的RouteData或某些基本控制器属性派生的tenantID 的位置?

基本控制器

给定以下路线:

Tenant我的基本控制器根据 {tenant} URL 参数检索并存储正确的。使用,可以构造Tenant带有 的存储库,以仅检索与该租户相关的数据。ITenantContext

基于其他 DI 问题,可能AbstractFactory是一个解决方案吗?

0 投票
2 回答
1450 浏览

java - 多租户 Web 应用程序的性能监控工具

我们需要监控我们的 java web 应用程序的性能。我们正在寻找可以帮助我们完成这项任务的通行费。主要困难在于我们是具有多租户服务器架构的 SaaS 提供商,数百个客户在同一硬件上运行。到目前为止,我们尝试了 DynaTrace 和 Coradinat 等商业产品,但不幸的是,它们到目前为止还没有完成工作。我们需要的是一份简单的报告,它可以告诉我们在指定时间段内每个客户站点是否存在性能问题。主要是每个客户的响应时间,但我们还需要基于 URL 的更多细节。

请让我知道是否有人有任何设置此类监控的经验。

谢谢!

0 投票
3 回答
14975 浏览

ruby-on-rails - 使用 PostgreSQL 的模式和 Rails 创建多租户应用程序

我已经想通的东西

我正在学习如何在 Rails 中创建一个多租户应用程序,该应用程序根据用于查看应用程序的域或子域来提供来自不同模式的数据。

我已经回答了一些问题:

  1. 如何让 subdomain-fu 也与域一起使用?有人问了同样的问题,导致您访问此博客
  2. 什么数据库,它的结构如何?这是Guy Naor 的精彩演讲,以及关于 PostgreSQL 和 schemas的好问题。
  3. 我已经知道我的模式都将具有相同的结构。他们持有的数据会有所不同。那么,如何为所有模式运行迁移?这是一个答案

这三点涵盖了我需要知道的很多一般知识。但是,在接下来的步骤中,我似乎有很多实现方式。我希望有更好,更简单的方法。

最后,我的问题

当新用户注册时,我可以轻松创建架构。但是,加载其他模式已经拥有的结构的最佳和最简单的方法是什么?这里有一些问题/场景可能会给你一个更好的主意。

  1. 我是否应该将它传递给一个shell 脚本,将公共模式转储到一个临时模式中,然后将其导入我的主数据库(很像 Guy Naor 在他的视频中所说的)?这是我从 freenode 上有用的 #postgres 获得的快速摘要/脚本。虽然这可能会奏效,但我将不得不在 Rails 之外做很多事情,这让我有点不舒服......这也让我想到了下一个问题。
  2. 有没有办法直接从 Ruby on Rails 做到这一点?就像创建一个 PostgreSQL 模式一样,然后只需将 Rails 数据库模式(schema.rb - 我知道,这很混乱)加载到该 PostgreSQL 模式中。
  3. 是否有已经拥有这些东西的 gem/插件?像“create_pg_schema_and_load_rails_schema(the_new_schema_name)”这样的方法。如果没有,我可能会努力制作一个,但我怀疑它对所有移动部件的测试效果如何(特别是如果我最终使用 shell 脚本来创建和管理新的 PostgreSQL 模式)。

谢谢,我希望不会太长!

0 投票
1 回答
1015 浏览

sql-server - 通过 sql server 连接传递租户 ID

我正在使用 Microsoft SQL Server 构建具有共享表结构的多租户应用程序。

我想知道是否可以通过 sql server 连接传递tenantID 参数。我不想为每个租户创建单独的用户帐户。

目前我看到两种方式:通过 ApplicationName 或 WorkstationID

最好的问候, 阿列克谢·扎哈罗夫

0 投票
1 回答
2242 浏览

asp.net - 多租户成员资格提供程序 ASP.NET MVC

我正在使用 ASP.NET MVC 构建一个多租户应用程序,并且在验证用户时遇到问题。

情况

我有:

- 一个带有 User(ID, Name, FirstName, Email) 的表,这个表是为了让一个在两个租户中注册的用户不需要再次登录。

- 一张带有 Tenantuser(ID, TenantID, UserID (FK to table User), UserName, Loginname, Password, Active) 的表 该表包含一个租户的登录密码。

例子:

  • UserX 在 TenantA 和 TenantB 中注册
  • UserX 使用 TenantA 的登录名和密码登录租户 A
  • 系统在 TenantUser 表中验证或登录名和密码是否正确
  • 系统验证 UserX 哪个 userID 对应于表 User 中的 Id
  • UserX 转到 TenantB 并自动登录

我的问题:

如何创建自定义提供程序以便我可以检查租户中的登录名和密码?例如:

我如何告诉我的提供商用户是哪个租户?

我怎样才能改变这种情况:

或者还有什么方法可以解决这个问题?

0 投票
1 回答
614 浏览

unit-testing - 使用单例在多租户应用程序中传递凭据是否存在代码异味?

我目前正在开发一个采用共享数据库/共享模式方法的多租户应用程序。IOW,我们通过在所有表上定义TenantID列来强制租户数据隔离。按照惯例,所有 SQL 读取/写入都必须包含Where TenantID = '?' 条款。不是一个理想的解决方案,但事后看来是 20/20。

无论如何,由于我们应用程序中的几乎每个页面/工作流程都必须显示特定于租户的数据,因此我在项目开始时做出了(糟糕的)决定,即使用单例来封装当前用户凭据(即 TenantID 和 UserID)。我当时的想法是,我不想为我的数据层中的每个方法签名添加一个 TenantID 参数。

这是基本伪代码的样子:

如您所见,这里有几种代码异味。这是一个单例,所以它已经不是单元测试友好的。最重要的是,您在 CurrentUser 和 HttpContext 对象之间有一个非常紧密的耦合。通过扩展,这也意味着我在我的数据层中引用了 System.Web(不寒而栗)。

由于上述原因,我想通过摆脱这个单例来偿还这个 sprint 的一些技术债务。我对更好的实施可能有一些想法,但是如果有人有任何可以分享的指导或经验教训,我将非常感激。

0 投票
5 回答
4985 浏览

entity-framework - 实体框架和多租户数据库设计

我正在研究 SaaS 概念的多租户数据库架构设计。它将是 ASP.NET MVC -> EF,但这并不重要。

您可以在下面看到一个示例数据库模式(租户是公司)。CompanyId 在整个架构中复制,主键已放置在自然键和租户 ID 上。

当我将表添加到实体模型文件 (Model1.edmx) 中时,将此模式插入实体框架会出现以下错误:

  • 关系“FK_Order_Customer”使用外键集“{CustomerId, CompanyId}”,这些外键集部分包含在“Order”表的主键“{OrderId, CompanyId}”集中。外键集必须完全包含在主键集中,或者完全不包含在要映射到模型的主键集中。
  • 关系“FK_OrderLine_Customer”使用部分包含在表“OrderLine”的主键“{OrderLineId, CompanyId}”集中的外键集“{CustomerId, CompanyId}”。外键集必须完全包含在主键集中,或者完全不包含在要映射到模型的主键集中。
  • 关系“FK_OrderLine_Order”使用外键集“{OrderId, CompanyId}”,这些外键集部分包含在表“OrderLine”的主键集“{OrderLineId, CompanyId}”中。外键集必须完全包含在主键集中,或者完全不包含在要映射到模型的主键集中。
  • 关系“FK_Order_Customer”使用外键集“{CustomerId, CompanyId}”,这些外键集部分包含在“Order”表的主键“{OrderId, CompanyId}”集中。外键集必须完全包含在主键集中,或者完全不包含在要映射到模型的主键集中。
  • 关系“FK_OrderLine_Customer”使用部分包含在表“OrderLine”的主键“{OrderLineId, CompanyId}”集中的外键集“{CustomerId, CompanyId}”。外键集必须完全包含在主键集中,或者完全不包含在要映射到模型的主键集中。
  • 关系“FK_OrderLine_Order”使用外键集“{OrderId, CompanyId}”,这些外键集部分包含在表“OrderLine”的主键集“{OrderLineId, CompanyId}”中。外键集必须完全包含在主键集中,或者完全不包含在要映射到模型的主键集中。
  • 关系“FK_OrderLine_Product”使用外键集“{ProductId, CompanyId}”,这些外键集部分包含在表“OrderLine”的主键集“{OrderLineId, CompanyId}”中。外键集必须完全包含在主键集中,或者完全不包含在要映射到模型的主键集中。

问题分为两部分:

  1. 我的数据库设计不正确吗?我应该避免使用这些复合主键吗?我质疑我对基本模式设计(疲惫的大脑综合症)的理智。请随时提出“理想化”模式。
  2. 或者,如果数据库设计正确,那么 EF 是否无法匹配键,因为它将这些外键视为潜在的错误配置的 1:1 关系(不正确)?在这种情况下,这是一个 EF 错误吗?我该如何解决?

多租户数据库架构

0 投票
2 回答
2144 浏览

sql-server - 如何在多租户应用程序中更新所有租户的所有架构?

我正在开发一个多租户应用程序。我选择了“共享数据库/单独模式”方法。

我的想法是有一个默认架构(dbo),并在部署此架构时,对租户的架构(、、、tenantAtenantB进行更新tenantC;换句话说,制作同步模式。

如何将租户的架构与默认架构同步?

我正在使用 SQL Server 2008。

0 投票
2 回答
1911 浏览

java - Java 中多租户电子商务应用程序的 CMS 选择

我需要帮助来选择适合具有一些复杂独特功能的电子商务应用程序的 CMS 产品。我正在考虑使用现有的 CMS,因为我没有预算来构建自己的版本:

  • 复制编辑器
  • 页面布局工具
  • 站点地图编辑器(可选)

在意识到 CMS 可能会推动这种选择之前,我曾考虑将 Spring.MVC 和 JBoss Seam 作为框架替代方案,并将 JSP/JSTL 和 Facelets/JSF 作为视图技术。

由于一开始有六个客户,我非常热衷于多租户架构,并将品牌应用于每个租户页面。

我看到了两种架构选择:

  • 直接基于 Web 框架构建定制的多租户站点,并通过 JCR “引入”内容。
  • 部署多租户 CMS 并以某种方式添加独特的功能。

“独特的功能”是一个交互式设计器,可以准确地构建您想要的产品。构建后,产品将添加到您的购物车中,然后需要考虑正常的付款和帐户设置功能。仍然处于多租户情况。

我很高兴内容编辑功能位于一个单独的 Web 应用程序中,这足以让我代表六个客户进行操作,但理想情况下他们也可以访问。根本没有必要给这个品牌打上烙印。

有什么建议么?