我正在尝试在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的新手,所以任何帮助/见解都会受到赞赏!
答案 0 :(得分:0)
假设您不需要在每个节点上安装实例,您可以拥有(nodecount * 65K)服务,这将使其再次可扩展。
查看Azure API management和Traefik,它们有一些SF集成选项。这比有限的内置反向代理更好。例如,它们提供路由规则。
答案 1 :(得分:0)
我不认为临时端口限制对您来说是一个问题,即使在消耗这些端口的一半之前,您可能会消耗所有服务器资源(CPU +内存)。
尽可能做您需要的事情,但它需要您创建一个脚本或应用程序,负责为部署的服务实例创建和管理配置。
我不会使用内置的反向代理,它非常有限,只需添加额外的配置就没有任何好处。
目前,我认为traefik是最合适的解决方案。 Traefik使您能够将特定域路由到特定服务,这正是您想要的。
因为您将使用多个域,所以它需要一个未开箱即用的动态配置,这就是我建议您创建一个单独的应用程序来部署这些实例的原因。一个非常高级别的步骤将是:
traefik.frontend.rule=Host:tenant1.myapp.com
设置为正确的租户名称您可能需要添加一些额外的配置,但这会引导您走上正确的道路。
关于集群架构,你可以通过多种方式实现,为了启动,我建议你保持简单,一个包含traefik服务的FrontEnd节点类型和另一个用于服务的BackEnd节点类型,从那里你可以决定如何为了正确规划集群,已经有很多关于如何定义集群的SO答案。
请在以下链接中查看更多信息:
https://docs.traefik.io/configuration/backends/servicefabric/