我知道,当您发布"到IIS,它作为反向代理,将消息路由到Kestrel服务器,并确保它们保持活跃状态。但是,我还没有看到任何定义,所有这些Kestrel服务器都部署在与IIS服务器相同的主机上,或者IIS服务器是否可以在一台主机上,并将Kestrel服务器部署在单独的主机上并拥有自己的服务器IP地址?
如果没有,那么生产中的部署策略是什么?每个VM都需要拥有自己的IIS,部署1-n Kestrels?然后你需要一个单独的例如IIS服务器顶部的F5负载均衡器?
感谢您对此提出的任何意见:)
答案 0 :(得分:0)
ASP.NET Core middleware for IIS integration期望IIS和应用程序部署在同一台机器上:
public static IWebHostBuilder UseIISIntegration(this IWebHostBuilder app)
{
...
var address = "http://localhost:" + port + path;
app.UseSetting(WebHostDefaults.ServerUrlsKey, address);
...
}
答案 1 :(得分:0)
当然,您可以使用Kestrel自行托管IIS(只需删除UseIISIntegration
并监听非环回IP),但它不应该是面向互联网的应用程序(尚未准备好了)。但您必须手动配置IIS以将请求路由/平衡到后面的ips / services。没有"自动服务发现"提供。此外,您还需要自己管理生命周期(即IIS不再停止/重新启动应用程序)。
但是,由于在微服务/可扩展方案中,IP不是固定的,并且可能在服务产生和消失时发生变化,因此当您需要在新服务启动时更改此配置时,IIS会有点棘手并停止
因此,如果你使用微服务,你将不得不使用像Java世界中的ZooKeeper这样的东西(基本上是一个键值存储,每个web服务在那里注册它并且你使用这些值来广播/路由请求或)等等,甚至可能是redis。
也许看看Service Fabric,它也可以在内部使用(类似于this的内容)。