2

我正在尝试为 Service Fabric 中的多租户容器化 ASP.NET MVC 应用程序获得概念证明。这个想法是每个客户将获得 1+ 个应用程序实例,这些实例分布在整个集群中。我无法绘制出来的一件事是路由。

每个应用程序都将与此 SO answer类似地进行分区。到目前为止的计划是让外部负载平衡器将每个请求路由到 SF 反向代理服务。

例如: tenant1.myapp.com将被路由到反向代理<SF cluster node>:19081/myapp/tenant1(19081 是 SF 反向代理的默认端口)、tenant2.myapp.com-><SF Cluster Node>:19081/myapp/tenant2等,然后代理会将其路由到node:port应用程序实例正在侦听的正确位置。

由于每个应用程序都必须映射到不同的端口,因此 SF 计划在创建每个应用程序时动态分配一个端口。这似乎并不完全可扩展,因为理论上我们可以达到端口限制(~65k)。

那么我的问题是,这是一种有效/建议的方法吗?有更好的方法吗?有没有我遗漏/忽略的东西?我是 SF 的新手,所以任何帮助/见解将不胜感激!

4

2 回答 2

1

我认为临时端口限制对您来说不是问题,甚至在您消耗这些端口的一半之前,您很可能会消耗所有服务器资源(CPU + 内存)。

做您需要的事情是可能的,但它需要您创建一个脚本或一个应用程序,负责为部署的服务实例创建和管理配置。

我不会使用内置的反向代理,它非常有限,你想要的只会添加额外的配置而没有任何好处。

目前我认为traefik是最合适的解决方案。Traefik 使您能够将特定域路由到特定服务,这正是您想要的。

因为您将使用多个域,所以需要动态配置,而该配置不是开箱即用的,这就是为什么我建议您创建一个单独的应用程序来部署这些实例的原因。一个非常高级的步骤是:

  • 您使用 traefik 默认规则定义您的服务,如下所示
  • 从您的应用程序管理器中,您为新租户部署此服务的新命名服务
  • 部署实例后,您将其配置为在特定域中侦听,将规则设置traefik.frontend.rule=Host:tenant1.myapp.com为正确的租户名称

您可能需要添加一些额外的配置,但这将引导您走向正确的道路。

关于集群架构,您可以通过多种方式进行,首先,我建议您保持简单,一种前端节点类型包含 traefik 服务,另一种后端节点类型用于您的服务,从那里您可以决定如何规划集群正确,已经有很多关于如何定义集群的答案。

请查看以下链接的更多信息:

https://blog.techfabric.io/using-traefik-reverse-proxy-for-securing-microservices-on-azure-service-fabric/

https://docs.traefik.io/configuration/backends/servicefabric/

于 2018-06-08T23:05:24.453 回答
0

假设您不需要在每个节点上都有一个实例,您最多可以拥有(nodecount * 65K) 个服务,这将使其再次可扩展。

看看Azure API managementTraefik,它们有一些 SF 集成选项。这比有限的内置反向代理要好得多。例如,它们提供路由规则。

于 2018-06-06T06:24:43.803 回答