Windows Azure和多个存储账户

4
我有一个ASP.NET MVC 2 Azure的应用程序,我正在尝试将其从单租户切换为多租户。我一直在审查许多博客、帖子和Stack Overflow上的问题,但仍在努力理解对于这个特定的应用程序来说什么是正确的。

目前,该应用程序在SQL Azure数据库中存储了一些信息,以及在Azure存储账户中存储了一些其他信息。我考虑编写租户配置代码,只需为新租户创建一个新的数据库,以及一个新的Azure存储账户。这引出了以下问题:

我该如何在本地测试这种方法?据我所知,本地Azure存储仿真器只有1个存储账户。我不确定是否能够在本地创建其他账户。我该如何在本地进行测试?还是说可能吗?

2个回答

4
考虑多租户方案时,需要考虑许多方面,其中之一是数据架构。此外还有计费、性能、安全等方面的问题。
关于数据架构,首先我们来探讨 SQL 存储。以下是可供选择的选项:添加一个客户 ID(或其他标识符),您的代码将使用该标识符来过滤记录;为不同的客户使用不同的模式容器(每个客户在数据库中拥有自己的所有数据库对象的副本);线性分片(每个客户都有自己的数据库)和联邦(SQL Azure 的一项功能,根据性能和可扩展性需求提供渐进式分片)。所有这些选项都是有效的,但对性能、可扩展性、安全性、维护(例如备份)、成本以及数据库设计等方面有不同的影响。根据您提供的信息,我无法告诉您选择哪种模型;如果您已经有了代码库,某些模型比其他模型更容易实现。一般而言,线性分片是最简单的模型,并提供强大的客户隔离性,但也可能是最昂贵的模型。基于模式的分离不太难,但需要很好地掌握安全要求,并且可能会引入跨客户性能问题,因为此方法不是共享无内容(对于在同一数据库中的客户)。最后,联邦需要使用客户标识符,并具有一些限制;但是,这种技术可以让您更好地控制性能分布和长期可扩展性(因为与线性分片一样,联邦使用共享无内容架构)。
关于存储账户,为每个客户使用不同的存储账户绝对是正确的选择。如果您不使用单独的存储账户,则会面临主要问题,例如使用单个存储账户执行的最大每秒事务数等性能限制。但正如您所指出的那样,在本地进行测试可能会有问题;然而请考虑以下情况:本地模拟器不能完全与 Azure 存储账户相匹配(某些功能在模拟器中不受支持)。因此,我只会在初始开发和故障排除时使用本地模拟器。任何严格的测试,包括多租户测试,都应该使用真实的存储账户。这是您可以完全测试应用程序的唯一方法。

谢谢!这简洁地总结了我在处理这个项目时所学习和研究的所有选项。我注意到您是一位专门从事这个技术领域的顾问,您是否有兴趣安排一笔交易,让我支付您或您团队中的某个人来帮助我构建一个非常基本的多租户应用程序,以帮助我理解主要的多租户问题的所有不同组件,包括供应/认证/计量/扩展/计费?然后我可以将相同的理论应用于我的客户端应用程序!如果您感兴趣,请告诉我 :) - John
如果您有兴趣,请发送电子邮件至我的名字(约翰)johnarnold.ca。 - John
嗨John - 很高兴我能帮到你。关于多租户框架,我已经开发了一个!你可以在这里找到它:https://scale.bluesyntax.net。它仍处于Beta阶段,但它提供了一个良好的线性和模式分离分片模型。有关所提供的API和更多详细信息,请访问此处:https://scale.bluesyntax.net/About.aspx - 我将单独与您联系,以了解您是否对此感兴趣或者您是否正在寻找更定制化的东西。 - Herve Roggero

0

您应该考虑不创建单独的数据库,而是在单个SQL数据库中创建不同的对象命名空间。每个租户可以拥有自己的表集。

根据您如何使用存储,您可以为每个客户端创建单独的存储容器或消息队列。

在这些限制条件下,您应该能够使用存储仿真器和本地SQL实例进行本地测试。

如果您需要进一步的解释,请告诉我。


感谢您的评论。我已经考虑过在共享数据库中拥有客户数据的替代方案,但我们倾向于每个客户都有一个数据库的原因有几个,即为了保持数据在物理上的分离,以便于可扩展性和维护/备份。我们认识到这样做会有更大的成本。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接