“冬眠”服务面料应用

时间:2017-09-26 17:55:26

标签: entity-framework-core azure-service-fabric asp.net-core-2.0 .net-core-2.0

我有一个小型服务结构应用程序,我正在构建,并且因为我转换为服务结构对启动时间缓慢感到烦恼,它不仅在发布之后,而且在10-15分钟不活动之后。< / p>

我添加了一个项目,其唯一目的是转到每个服务并每隔10秒发出一个小的db请求,以为这将保持应用程序和ef运行。这有助于我获得超时,现在第一个请求是在5-15s范围内。在一些预热之后,请求通常在300毫秒范围内,因此它们是非常容易的请求,并且服务之间没有太多通信(总共4个服务)。

经过大量的搜索后,我发现了一个看起来很有效的分析器,因为大多数人不喜欢visual studio中的那个。不幸的是,除了它等待很多线程并且它似乎不在我的代码中之外,它并没有说太多。我的所有外部请求都使用等待异步。此外,当遵循请求时,似乎有信息丢失......

起初我认为缓慢可能来自ef生成搜索查询,因此我将该部分迁移到使用dapper(完整请求仍然使用一些ef),但这并没有真正改变任何东西。

该应用程序具有所有最新的服务结构,dotnet核心,ef核心,应用程序洞察包。除了一个验证令牌之外的所有服务都是无状态的。当然还有内置的发布模式。

此时我有点失落,因为我找不到它如此缓慢的原因。在过去,这通常是因为IIS关闭应用程序或回收它,但现在当它不存在时,它会是什么?

2 个答案:

答案 0 :(得分:0)

类似的问题发生在我们身上,但是我们使用DI容器,直到第一次调用我们的服务,所有依赖关系都没有解决,创建这些实例需要时间。例如,一个单一的类。另一个是EF DB上下文。为了克服这一点,我们已经过程“温暖”#34;服务第一。

希望有所帮助

答案 1 :(得分:0)

这可能是黑暗中的一个镜头:您的服务是使用Service Fabric远程处理选项还是使用HTTP进行通信?在HTTP的情况下,休眠和预热时间可能是由HttpSys / Kestrel引起的吗?

关于你看起来有点奇怪的慢响应(300ms),我们有多个无状态服务(使用HTTP和Kestrel),后面有EF,并且有50ms的响应时间。