“休眠”服务结构应用程序
我有一个有点小的服务结构应用程序,我正在构建,并且自从我转换为服务结构后,对于启动速度慢的问题感到恼火,它不仅在发布之后,而且在像10- 15分钟不活动。“休眠”服务结构应用程序
我已经添加了一个项目,其唯一目的是去每个服务,并每隔10s发出一个小的数据库请求,并认为这会保持应用程序和ef运行。这帮助我获得超时,现在第一个请求在5-15s范围内。在一些预热之后,请求通常在300ms范围内,因此它们很容易请求,并且服务之间没有太多的通信(总共4个服务)。
经过大量的搜索后,我发现了一个似乎工作的分析器,因为大多数人不喜欢visual studio中的分析器。不幸的是,除了它等待线程很多并且它看起来不在我的代码中之外,它并没有真正说多少。我的所有外部请求都使用await async。另外,当遵循请求有点似乎有信息丢失...
起初我认为慢生可能来自于生成搜索查询,所以我迁移该部分使用DAPPER(完整的请求仍然使用一些),但这并没有改变任何事情。
该应用程序具有所有最新的服务结构,dotnet核心,ef核心,应用程序见解包。除了一个验证令牌之外的所有服务都是无状态的。当然内置在发布模式。
在这一点上,我有点失落,因为我找不到它如此缓慢的原因。在过去,这通常是因为IIS关闭了应用程序或将其回收,但现在当它不在时,它可能是什么?
类似的问题发生在我们身上,但是我们使用DI容器,直到第一次调用我们的服务时,所有的依赖都没有解决,创建这些实例需要时间。例如类的单例。另一个是EF DB上下文。为了克服这一点,我们首先要对服务进行“热身”。
希望帮助
这并不能回答为什么他的应用程序会在几分钟后“睡觉”! – Mardoxx
这可能是一个在黑暗中拍摄:你们的服务,使用服务织物远程选项,或者使用HTTP进行通信?在HTTP的情况下,HttpSys/Kestrel可能导致休眠和预热时间?
关于您的响应速度很慢(300毫秒),看起来有点奇怪,我们有多个无状态服务(使用HTTP和Kestrel),后面有EF,并且响应时间小于50毫秒)。
您是将此部署部署到Azure中的群集还是仅在本地计算机上遇到此问题? –
我在本地和将它部署到3台服务器集群时都存在这个问题,该集群未在天蓝色 – user1842278
假设您的流量负载均衡...请记录您的服务解析到的节点。可能是请求1进入节点A(15s响应),2到节点B(15s响应),3到节点A(现在是300ms响应),4到节点C(15s响应)。看看我在做什么? – Mardoxx