IIS预加载netcore应用程序

背景描述:

在IIS上部署了netcore应用程序,在更新netcore程序时,会造成更新期间1分钟左右服务停止不可用的情况。为了提高系统可用性,采用consul多数据中心方式,在consul上挂载了3个netcore应用程序,最终通过网关(基于ocelot)提供对外服务。


image.png

在系统更新期间又遇到了一个问题:在IIS上挂载的netcore应用程序不会随IIS启动而自动启动,必须通过浏览访问触发启动。启动后才能向consul注册。

因此每次更新程序后,netcore程序无法向consul注册,因为netcore无法自动启动。

第一次解决方案(失败),在停止netcore应用程序的时候, 不注销在consul的服务

image.png

看起来没问题了,停止IIS的时候,consul注册的服务由于健康检查会变成红色的xx

image.png

等到IIS启动的时候,通过健康检查,又会恢复这个节点。

但是!出现了另一个问题。

在IIS停止到健康检查间隔的这几秒中,如果发生了请求,consul认为服务是正常的,而实际这个节点无法访问,这样就造成了几秒钟的服务不可用。

看起来跟第一次比较,我们把服务的不可用性从1分钟缩短到了几秒钟。但还不够,还需要优化!

最终解决方案(成功),通过IIS预加载,实现启动IIS的时候,自动启动netcore程序。

  1. 首先我们取消之前的注释


    image.png
  2. 在控制面板 - 启用或关闭Windows功能,勾选应用程序初始化,这个很重要,一定要勾选,我之前没勾选,按照网上流程走完还是无法自动启动netcore。


    image.png
  3. IIS应用程序池配置以下3个


    image.png
  4. 网站高级设置,勾选预加载已启用


    image.png
  5. 配置管理器配置如下

image.png
选择节点:system.webServer/applicationInitialization
勾选doAooInitAfterRestart = true
集合添加启动时要启动的页面,hostname我们就配置当前网站ip和端口,页面就/就好了。
image.png
  1. 应用,完成!

这个时候停止IIS,consul的服务会立即注销,启动后consul的服务又会重新注册上去!

参考文档:

https://www.pianshen.com/article/96961627195/
https://weblog.west-wind.com/posts/2016/Jun/06/Publishing-and-Running-ASPNET-Core-Applications-with-IIS

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容