有多个方面需要考虑与多租户,其中之一是数据架构。您还拥有账单,性能,安全等等。
关于数据架构,我们先来探讨SQL存储。您可以使用以下选项:添加您的代码用于过滤记录的CustomerID(或其他标识符),为不同的客户使用不同的模式容器(每个客户都拥有专用模式拥有的所有数据库对象的副本在数据库中),线性分片(每个客户都有自己的数据库)和联合(SQL Azure的特性,基于性能和可伸缩性需求提供渐进式分片)。所有这些选项都是有效的,但对性能,可伸缩性,安全性,维护(如备份),成本以及当然数据库设计有不同的影响。根据您提供的信息,我无法告诉您选择哪一个;如果您已经拥有代码库,某些模型比其他模型更容易实现。一般来说,线性分片是最简单的模型,它提供了强大的客户隔离,但也许是最昂贵的。基于模式的分离并不难,但需要很好地处理安全性需求,并且可能引入跨客户性能问题,因为这种方法不是无共享的(对于同一数据库中的客户)。最后,联合会要求使用客户识别器,并且有一些限制;然而,这项技术使您可以更好地控制性能分布和长期可扩展性(因为像线性分片一样,联合使用无共享体系结构)。
关于存储账户,每个客户使用不同的存储账户是最终的选择。如果您不使用单独的存储帐户,您将面临的主要问题是性能限制,例如可以使用单个存储帐户执行的每秒最大事务数。但是,正如你指出的那样,本地测试可能是一个问题。但请考虑:本地模拟器不提供与Azure存储帐户100%的奇偶校验(模拟器不支持某些功能)。所以我只会使用本地模拟器进行初始开发和故障排除。任何严重的测试,包括多租户测试,都应该使用真实存储帐户进行。这是您完全测试应用程序的唯一方法。
谢谢!这简要总结了我在处理这个项目时所了解和研究的所有选项。我注意到你是一位专门研究这一确切技术领域的顾问,你是否有兴趣安排一笔交易,我会付给你或你团队的人来帮助我构建一个非常基本的骨干多租户应用程序,以帮助我理解所有供应/授权/计量/缩放/计费等主要多租户问题的不同组件?然后,我可以转向并将相同的理论应用到我的客户的应用程序!让我知道如果这是你的兴趣:) – John 2012-07-11 21:38:16
如果你有兴趣,请给我发电子邮件在我的名字(john)在johnarnold.ca – John 2012-07-11 21:46:47
嗨约翰 - 很高兴我能帮上忙。关于多租户框架,我已经开发了一个!你可以在这里找到它:https://scale.bluesyntax.net。它仍然处于Beta版,但它为线性和模式分离分片提供了一个很好的模型。有关提供的API的更多详细信息以及更多信息,请访问https://scale.bluesyntax.net/About.aspx - 我将分别与您联系,以了解您是否感兴趣或者如果您正在寻找更多定制的内容。 – 2012-07-12 01:45:46