Ktor、Netty 和增加每个端点的线程数

问题描述 投票:0回答:3

使用 Ktor 和 Kotlin 1.5 实现 Netty 支持的 REST 服务。关于这项服务的一些事情:

  1. “工作”需要花费大量时间才能完成。
  2. 唯一的客户端端点向此服务并行发送多个请求。
  3. 只有少数独特的客户端端点。

服务未按预期扩展。我们对来自单个客户端的并行请求进行了负载测试,我们注意到服务器上只有两个线程实际处理请求。这不是资源匮乏问题 - 有足够的网络、内存、CPU 等,并且无论我们并行启动多少个请求都无关紧要 - 总是有两个线程保持忙碌,而其他线程则闲置。

我们是否可以配置一个参数来增加可用于处理特定端点请求的线程数量?

multithreading kotlin netty ktor
3个回答
2
投票

Netty 使用所谓的非阻塞 IO 模型(http://tutorials.jenkov.com/java-concurrency/single-threaded-concurrency.html)。

在这种情况下,您只有一个线程,只要您遵循最佳实践(不阻塞主线程事件循环),它就可以并行处理许多子进程。


2
投票

您可能需要检查 Netty 的以下配置选项 https://ktor.io/docs/engines.html#configure-engine

connectionGroupSize = x
workerGroupSize = y
callGroupSize = z

默认值通常设置得相当低,调整它们可能对耗时的“工作”很有用。确切的值可能会有所不同,具体取决于可用资源。


0
投票

我现在遇到了这个确切的问题,我们有一个长时间运行的进程,只需要实际的计算时间,这会冻结对同一端点的所有其他请求。我很惊讶这么多年没有人遇到这个问题。我的一个想法是在后台启动漫长的过程并立即响应,但解决方法并不是解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.