2012-07-11 126 views
3

我有一个ASP.NET MVC 2 Azure应用程序,我试图从单租户切换到多租户。我一直在评论堆栈溢出的许多博客和帖子,以及这里的问题,但我仍然试图围绕这个特定应用程序的特定细节。Windows Azure和多个存储帐户

当前,应用程序将一些信息存储在SQL Azure数据库中,以及Azure存储帐户中的一些其他信息。我正在考虑编写租户配置代码,以便为新的租户创建新的数据库以及新的Azure存储帐户。这给我带来了以下问题:

我将如何在本地测试此方法?据我所知,本地Azure存储模拟器只有1个存储帐户。我不确定我是否能够在本地创建其他人。我将如何能够在本地进行测试?或者会有可能吗?

回答

3

有多个方面需要考虑与多租户,其中之一是数据架构。您还拥有账单,性能,安全等等。

关于数据架构,我们先来探讨SQL存储。您可以使用以下选项:添加您的代码用于过滤记录的CustomerID(或其他标识符),为不同的客户使用不同的模式容器(每个客户都拥有专用模式拥有的所有数据库对象的副本在数据库中),线性分片(每个客户都有自己的数据库)和联合(SQL Azure的特性,基于性能和可伸缩性需求提供渐进式分片)。所有这些选项都是有效的,但对性能,可伸缩性,安全性,维护(如备份),成本以及当然数据库设计有不同的影响。根据您提供的信息,我无法告诉您选择哪一个;如果您已经拥有代码库,某些模型比其他模型更容易实现。一般来说,线性分片是最简单的模型,它提供了强大的客户隔离,但也许是最昂贵的。基于模式的分离并不难,但需要很好地处理安全性需求,并且可能引入跨客户性能问题,因为这种方法不是无共享的(对于同一数据库中的客户)。最后,联合会要求使用客户识别器,并且有一些限制;然而,这项技术使您可以更好地控制性能分布和长期可扩展性(因为像线性分片一样,联合使用无共享体系结构)。

关于存储账户,每个客户使用不同的存储账户是最终的选择。如果您不使用单独的存储帐户,您将面临的主要问题是性能限制,例如可以使用单个存储帐户执行的每秒最大事务数。但是,正如你指出的那样,本地测试可能是一个问题。但请考虑:本地模拟器不提供与Azure存储帐户100%的奇偶校验(模拟器不支持某些功能)。所以我只会使用本地模拟器进行初始开发和故障排除。任何严重的测试,包括多租户测试,都应该使用真实存储帐户进行。这是您完全测试应用程序的唯一方法。

+0

谢谢!这简要总结了我在处理这个项目时所了解和研究的所有选项。我注意到你是一位专门研究这一确切技术领域的顾问,你是否有兴趣安排一笔交易,我会付给你或你团队的人来帮助我构建一个非常基本的骨干多租户应用程序,以帮助我理解所有供应/授权/计量/缩放/计费等主要多租户问题的不同组件?然后,我可以转向并将相同的理论应用到我的客户的应用程序!让我知道如果这是你的兴趣:) – John 2012-07-11 21:38:16

+0

如果你有兴趣,请给我发电子邮件在我的名字(john)在johnarnold.ca – John 2012-07-11 21:46:47

+0

嗨约翰 - 很高兴我能帮上忙。关于多租户框架,我已经开发了一个!你可以在这里找到它:https://scale.bluesyntax.net。它仍然处于Beta版,但它为线性和模式分离分片提供了一个很好的模型。有关提供的API的更多详细信息以及更多信息,请访问https://scale.bluesyntax.net/About.aspx - 我将分别与您联系,以了解您是否感兴趣或者如果您正在寻找更多定制的内容。 – 2012-07-12 01:45:46

0

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

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

鉴于这些限制,您应该能够使用存储模拟器和本地SQL实例在本地进行测试。

请让我知道,如果你需要进一步的解释。

+0

感谢您的评论。我已经考虑过让客户端数据在共享数据库中的替代方案,但是我们倾向于每个拥有分贝数据库的客户的原因有几个。即为了可扩展性和维护/备份而保持数据的物理分离。我们认识到这样做的成本较高。 – John 2012-07-11 21:36:29