Azure多租户应用程序的云数据库?

时间:2014-01-03 03:08:50

标签: asp.net azure architecture multi-tenant

我开始将一个旧的桌面单租户应用程序移植到云中,并希望听到您对基于云的多租户应用程序的数据库的建议是什么?

我的基本要求很简单:

  1. 对于每个租户,其数据与任何其他租户的数据是分开的。我可以轻松地备份,恢复,导出单个租户的数据,而不会影响其他租户。
  2. 我真的不想关心业务逻辑代码中的多租户。它应该看起来像安全层后面的单个租户应用程序,没有租户ID传递等。
  3. 使用LINQ等成熟技术轻松查询。
  4. 可用性和可扩展性,当然,易于设置副本,故障转移和扩展和缩小等。
  5. 我已经对多租户应用程序开发进行了一些调查。我注意到Azure和AWS的SQL数据库都非常昂贵(仅SQL数据库实例的成本接近原始应用程序的许可费),所以我绝对不能为租户使用单独的SQL数据库实例。

    现在我正在阅读本书Developing Multi-tenant Applications for the Cloud, 3rd Edition,它使用Azure存储服务来实现多租户。我还没有完成这本书,看来你仍然需要自己处理多租户,示例代码已经过时了。

    我已经看到很多SO问题将Azure表存储与MongoDB进行比较。 MongoDB对我来说是一个新手,不确定它是否可以轻松地用于满足我的要求?

    我也看过RavenDB,它确实支持多租户开箱即用。但我没有看到一些关于如何在Azure应用程序开发中使用它的好示例代码。

    希望能听到很棒的SO人的一些好建议。

2 个答案:

答案 0 :(得分:1)

我最好选择在MongoDB上使用RavenDB。即使是Raven也是游戏的新角色,它支持传统SQL支持的大多数功能。

同样,为了做出决定,您正在处理的数据量也是一个关键的决策指针。也是您期望的流量。

还要记住运营成本和开发工作。当您使用Raven或Mongo时,HA和DR方案可能会出现问题,因为您需要托管它们。但是,对于Azure存储,默认情况下,它通过维护3份信息来最大程度地保护您。

因此,我建议您仔细权衡,并根据您的业务需求,成本优化,开发和运营工作明智地选择。

答案 1 :(得分:0)

为每个租户设置一个应用程序实例是实现应用程序的一种非常昂贵的方式,但是我意识到如果一个应用程序是在考虑单个租户的情况下开发的,那么转换的成本可能很高。 / p>

首先,我们可以先了解为什么您有一个桌面应用程序连接到另一个位置的数据库。延迟确实会降低应用程序的速度。理想情况下,您需要本地安装的数据库并使其与云数据库同步,或者在您的应用程序中添加适当的缓存。

然而,DB仍然需要区分客户端。

为什么需要这个才能进入云数据库?它是用于备份目的,不是在客户端计算机上本地安装数据库,从许多机器或其他东西访问相同的数据?

除非您的应用程序非常大,否则我建议将多租户重写为一个SQL Azure数据库。在项目开始时选择的架构现在不符合您的要求。随着您的扩展,您将遇到更多问题。