ServiceStack Docker 架构

ServiceStack Docker architecture

我想知道是否有更聪明的人解决了这个问题。

我有一个应用程序,其中每个客户在 Azure 中都有一个单独的 Web 应用程序。它是 Asp.net MVC,带有一个单独的虚拟目录,用于存放 ServiceStack。 MVC 并没有真正使用,该应用程序 99% 由 ServiceStack 提供支持。

架构运行良好,但随着我们获得更多客户,我们必须管理越来越多的 azure webapps。虽然我们可以忍受这一点,但容器的世界就在我们身边,现在 ServiceStack 支持 .net 核心,我有一个部署数百个容器的乌托邦观点,我的任何 "Tenants" 的每个请求都可以转到任何容器并根据需要提供。

我想我已经解决了重构所有元素的大部分问题,但有一个架构问题我还不太清楚。

对于我们的客户来说,在帮助开发新功能或新版本的任何其他客户之前 "Try" 这是一个相当普遍的要求。在一个由每个 VM 上的 nginx 容器(或其他东西?)服务的多个 VM 上的大量容器的世界中,如何以不需要 nginx 容器的方式控制请求到特定版本容器的路由当路由需要更改时重新部署(或任何停机时间) - 例如nginx 可以根据 Redis 中的配置路由请求吗?

非常感谢 advise/pointers。

G

虽然它不是特定于 Azure 的,但我们已经发布了发布 ServiceStack .NET Core Docker Apps to Amazon EC2 Container Service which includes no-touch nginx virtual host management by running an Instance of jwilder/nginx-proxy Docker App 以自动为新部署的 .NET Core Docker 应用程序生成新的 nginx 虚拟主机的分步指南.

jwilder/nginx-proxy isn't AWS-specific and should work for any Docker solution that explains how it works in its introductory blog post.

使用 nginx-proxy 是一个很好的供应商中立的解决方案,用于在同一个 nginx 反向代理后面托管多个 Docker 实例,但是为了扩展您的 Docker 实例,您需要使用您首选的云提供商中的编排功能,例如在 AWS 中,您可以扩展 number of compute instances you want in your ECS cluster or utilize Auto Scaling,其中 AWS 将根据使用指标自动扩展实例。

Azure 管理 Docker 实例的解决方案是 Azure Container Service which lets you scale instance count using the Azure acs command-line tool

我们公司也在做同样的事情。我们正在使用 kubernetes 并使用 nodejs 构建我们自己的反向代理。此反向代理将从特定缓存中读取客户设置并将您重定向到正确的环境。

但是根据体系结构,我建议只拥有 2 个环境 运行 两个相对的 urls:1 个用于生产环境,一个用于 pilot/test 环境。每当客户进入试点环境时 url 他将使用相同的数据库,但只是 WebApp 的升级版本。

当然,如果使用 ORM 并包含数据库迁移,这将不起作用。 (当你使用 servicestack 时可能就是这种情况)