【问题标题】:Concurrent execution of large request across different IIS servers跨不同 IIS 服务器并发执行大型请求
【发布时间】:2018-05-19 02:17:19
【问题描述】:

我在 IIS 中有 REST Web API 服务,它接受请求对象的集合。用户可以输入超过 100 个请求对象。我的服务部署在 20 台 IIS 服务器上。

我想同时运行这 100 个请求,然后汇总结果并将其发回。这涉及 I/O 操作(为每个请求调用后端服务)和 CPU 绑定操作(计算少量响应元素)。

当我的控制器收到请求时,我们可以在同一台或不同机器上的所有 20 台 IIS 服务器上拆分和共享请求,以加快处理速度。请提出任何选择

【问题讨论】:

  • 您的 100 个左右的请求对象是相互依赖还是依赖于任何依赖,例如某些请求必须在其他请求之前执行,或者全部相同,因此您不必担心顺序。
  • 不独立,我们不必为订购而烦恼

标签: c# asp.net multithreading iis


【解决方案1】:

我不能提供详细的实现,但你必须做以下事情。

有很多解决方案,我可以推荐其中之一。

解决方案 1

  1. 您的一个主应用程序收到请求。 (请求 100 个或更多对象)。

  2. 现在这个应用程序有关于您的 20 个其他站点或 URL 的信息。 (这个 url 也可以存储在 config 或 XML 文件中)

  3. 您还必须决定每台服务器应同时处理一个或多个对象。 (您可以创建这样的配置并存储在 web.config 中)

  4. 现在根据您的请求创建 httpClient 来调用 RestApi 并提供每个数据。确保您使用 Async 模型,以便您可以利用 Async 功能。

  5. 例如,如果我只考虑每个服务器和服务器配置一个对象(服务器 url 存储在数组中)

     int requestCnt = 0;
     foreach(var request in Requests)
     {
      HttpClient client = new HttpClient();
      client.Url = Server[request % 20];
      client.PostAsync()
     } 
    

注意:这只是示例,因此您必须处理详细实现部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2016-11-21
    相关资源
    最近更新 更多