然而,当然有一些公司担心他们的数据可能会被泄露,因此我们正在评估其他解决方案。
这很不幸,因为客户有时会误解只有物理隔离才能提供足够的安全性。
有一篇有趣的MSDN文章,标题为
多租户数据架构,你可能想要查看。这是作者如何解决对共享方法的误解的方式:
“一个常见的误解认为只有物理隔离才能提供适当水平的安全性。事实上,使用共享方法存储的数据也可以提供强大的数据安全性,但需要使用更复杂的设计模式。”
至于技术和业务考虑因素,该文章对某种方法何时比另一种方法更合适进行了简要分析:
你期望服务的租户数量、性质和需求会以不同的方式影响你的数据架构决策。以下一些问题可能会让你倾向于更独立的方法,而其他问题可能会让你倾向于更共享的方法。
- 你期望针对多少潜在租户?你可能无法准确估计潜在使用情况,但可以考虑数量级:你是为数百个租户构建应用程序吗?成千上万?数万?更多?你期望的租户基数越大,越有可能需要考虑更共享的方法。
- 你期望每个租户的数据占用多少存储空间?如果你期望一些或所有租户存储大量数据,则采用单独的数据库方法可能是最好的选择。(实际上,数据存储要求可能会迫使你采用单独的数据库模型。如果是这样,从一开始就采用这种方式设计应用程序会比后来转向单独的数据库方法容易得多。)
- 你期望每个租户支持多少并发用户?用户数量越多,更独立的方法就越适合满足最终用户的需求。
- 你期望提供任何按租户增值服务,例如按租户备份和恢复功能吗?这些服务通过更独立的方法更容易提供。
更新: 关于预期租户数量的最新信息。
对于大多数(如果不是全部)情况,预期租户数量(10k)应该不包括多数据库方法。我认为你不会喜欢维护10000个数据库实例,并且每天还要创建数百个新实例的想法。
仅从这个参数来看,似乎共享数据库、单一模式方法是最合适的。事实上,每个租户存储的数据只有约50Mb,而且没有每个租户的附加组件,使得这种方法更加适用。
上面提到的MSDN文章提到了三种安全模式,以解决共享数据库方法的安全考虑:
当你对应用程序的数据安全措施有信心时,就可以向客户提供强有力的数据安全保证的服务级别协议。在你的SLA中,除了这些保证,你还可以描述你将采取的措施来确保数据不会被破坏。
更新2: 微软的工程师们似乎移动/创建了一篇关于这个主题的新文章,原始链接已经消失,这是新的链接:多租户SaaS数据库租户模式(感谢Shai Kerer)