服务结构(内部部署)路由到多租户容器化应用程序

时间:2018-06-04 23:08:34

标签: url-routing service-fabric-stateless azure-service-fabric service-fabric-on-premises

我正在尝试在Service Fabric中获得多租户容器化ASP.NET MVC应用程序的概念证明。我们的想法是每个客户都会在集群中获得1个以上的应用程序实例。我遇到问题的一点是路由。

每个应用的分区类似于this SO answer。到目前为止,计划是将外部负载均衡器路由到SF反向代理服务的每个请求。

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

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

我的问题是,这是一种有效/建议的方法吗?有更好的方法吗?有什么东西我缺少/忽视?我是SF的新手,所以任何帮助/见解都会受到赞赏!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

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

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

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

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

关于集群架构,你可以通过多种方式实现,为了启动,我建议你保持简单,一个包含traefik服务的FrontEnd节点类型和另一个用于服务的BackEnd节点类型,从那里你可以决定如何为了正确规划集群,已经有很多关于如何定义集群的SO答案。

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

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

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