【问题标题】:"Hibernating" service fabric application“休眠”服务结构应用程序
【发布时间】:2018-03-08 01:27:18
【问题描述】:

我正在构建一个有点小的服务结构应用程序,自从我转换为服务结构后,我一直对缓慢的启动时间感到恼火,这不仅是在发布之后,而且在 10 到 15 分钟不活动之后也是如此。

我添加了一个项目,其唯一目的是访问每个服务并每 10 秒发出一个小型数据库请求,认为这将保持应用程序和 ef 运行。这帮助我避免了超时,现在第一个请求在 5-15 秒范围内。经过一些预热后,请求通常在 300 毫秒范围内,因此它们是非常简单的请求,并且服务之间没有太多通信(总共 4 个服务)。

经过大量搜索,我发现了一个似乎可以正常工作的分析器,因为大多数人都不喜欢 Visual Studio 中的那个。不幸的是,它并没有真正说那么多,只是它等待线程很多并且它似乎不在我的代码中。我所有的外部请求都使用等待异步。此外,在遵循请求时,似乎缺少信息......

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

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

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

【问题讨论】:

  • 您是将其部署到 Azure 中的集群还是仅在本地计算机上体验?
  • 我在本地和将它部署到 3 个服务器集群时都遇到了这个问题,这不是 azure 中的
  • 假设您的流量是负载平衡的...在您的服务解析到的节点上进行一些日志记录。可能是请求 1 到节点 A(15 秒响应),2 到节点 B(15 秒响应),3 到节点 A(现在 300 毫秒响应),4 到节点 C(15 秒响应)。看看我在说什么?

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


【解决方案1】:

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

希望有帮助

【讨论】:

  • 这不能解释为什么他的应用程序会在几分钟后“休眠”!
【解决方案2】:

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

关于您的缓慢响应(300 毫秒),这确实有点奇怪,我们有多个无状态服务(使用 HTTP 和 Kestrel),后面有 EF,响应时间不到 50 毫秒)。

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2015-06-27
    • 2023-03-28
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多