我即将开发一个新的SaaS解决方案,我希望使用单个Web应用程序(SPA),以及共享相同架构的多租户数据库。但是我对更新和部署例程感到担忧。
让我们假设我在Web应用程序和数据库中进行了更改,我在其中添加了一个新列到某个表。现在我想更新Web应用程序,同时我想用新列更新所有数据库而不需要关闭维护。我可以从更新单个租户数据库开始,但是一旦对租户进行更改,Web应用程序就不再是租户的当前状态了。换句话说,我可以先更新Web应用程序,但随后应用程序不再适用于任何租户。
我该如何解决这个问题?
答案 0 :(得分:1)
这是系统架构的问题,答案在很大程度上取决于您的要求和约束。
至于客户端,我同意@HansKilian,它不应该与数据库架构耦合。
对于服务器更新,您可能希望在Docker中运行您的应用程序。因此,Docker容器的每个[实例]都专用于特定的租户,因此,它适用于特定的数据库。也就是说,没有两个租户共享同一个容器。这有许多不同的原因。例如:
信息安全:SaaS问题之一是一个租户意外泄漏到另一个租户的数据。如果您从未在同一个容器中运行两个租户,则可以减少发生此类事件的可能性。
细粒度部署:更新特定租户的数据库时,只会删除与此特定租户相关的容器。其余的租户继续跑。
为了实现这样的体系结构,您需要将传入请求路由到正确的容器。这可以通过许多不同的方式实现。例如,您可以将NGINX放在Web应用程序前面,使每个请求都包含标识租户的标头,并根据该标头定义路由规则。或者您可以在群集模式下使用Docker,并在容器服务名称中包含租户ID。
这只是可以做什么的一个例子,不确定它适合你的情况 - 这一切都取决于。