WebAPI生命周期/请求队列

时间:2014-12-20 19:31:51

标签: asp.net asp.net-web-api performance-monitor

我有一个调用WebAPI的AngularJS应用程序。如果我记录我启动请求的时间(在我的angluar控制器中)并记录OnActionExecuting运行的时间(在我的WebAPI控制器的动作过滤器中),我有时会注意到~2秒的差距。我假设在此过滤器之前没有其他任何内容正在运行,这是由于请求被阻止/排队。我之所以认为这是因为如果我删除所有其他数据调用,我就不会看到这个差距。

WebAPI可以同时处理的并行请求数是多少?我试着查看ASP.NET性能监视器,但找不到我能看到这些数据的位置。有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

对此没有直接的答案,但最短的答案是......

对WebApi没有限制,限制来自服务器可以处理的内容以及运行代码的效率。

... 但是既然你问过,让我们考虑一下我们可以假设的关于服务器和应用程序的一些基本内容......

  1. 并发连接
  2. 典型的服务器因“c10k”...... https://en.wikipedia.org/wiki/C10k_problem等问题而闻名......因此对并发连接数设置了一个硬性限制。

    假设每个WebApi调用都是通过在网页上调用一些AJAX来实现的,那么在事情变得邪恶之前,我们就会限制大约10k个连接。

    2.与依赖相关的开销

    如果我们考虑到相关代码的复杂性,那么您可能会遇到像SQL查询这样的事情的瓶颈,我经常编写WebApi控制器,其业务逻辑运行10个以上的数据库查询,这里的开销可能是你的问题

    1. Feed in Overhead
    2. 服务器的网络带宽怎么样? 让我们假设我们为每个呼叫传输1MB的数据,不需要花费很长时间就可以用大小的消息来阻塞1Gb / s以太网线。

      1. 处理开销
      2. 假设您编写了一个执行复杂计算的Api(例如复杂3D数据的网格生成),您可以在每次请求时轻松地将CPU扼流一段时间。

        1. 超时
        2. 假设服务器可以接受您的请求并且请求是异步进行的,那么最大的问题是,您准备等待多长时间才能做出响应?假设这很短,那么在每个请求需要响应之前,您可以减少有时间解决的问题数量。

          ...

          正如您所看到的,这绝不是一个详尽的列表,但它概述了您提出的问题的复杂性。也就是说,我认为WebApi(框架)没有限制,它实际上取决于它周围的基础设施,它有限制以确定可能的内容。