【发布时间】:2018-01-31 20:12:15
【问题描述】:
我即将开发一个新的 SaaS 解决方案,我想在其中使用单个 Web 应用程序 (SPA),以及共享相同架构的多租户数据库。但是,我对更新和部署例程感到担忧。
假设我对 Web 应用程序和数据库进行了更改,我在其中向某个表添加了一个新列。现在我想更新 Web 应用程序,同时我想用新列更新所有数据库,而无需应用程序停机进行维护。我可以从更新单个租户数据库开始,但是一旦对租户进行更改,该租户的 Web 应用程序就不再是最新的。其他方式我可以先更新 Web 应用程序,但随后应用程序不再适用于任何租户。
我该如何解决这个问题?
【问题讨论】:
-
您的网络应用不应该知道数据库的结构。它应该知道服务器 API。您可以对其进行版本控制,以允许不同版本的网络应用共存。
-
您始终可以为每个租户配置一个新的 Web 应用实例。然后每个客户的环境都是真正隔离的,您可以依次更新每个客户。如果您对每个数据库都有单独的数据库,那么您实际上已经走上了这条路线。或者您可以按照建议对您的 API 进行版本控制,并为每个客户设置一个标志,说明他们使用的 API 版本,并让 Web 应用程序采用该值并相应地调整它调用的 URL。您必须确保您的 API 更改确实是向后兼容的。如果您想进行重大更改,您可能需要停机。
-
@HansKilian 你能重复一下吗?你将如何实现它?
-
有不同的方法可以做到这一点。这是一个很好的起点:github.com/Microsoft/aspnet-api-versioning
标签: c# azure multi-tenant