3

鉴于 TCP 提供本机流量控制,我正在研究为什么某些系统实现应用程序级背压。

我正在阅读,特别是akka-streams和(更高级别的讨论)反应流

是不是只是把异步通信的思想抽象出了网络,脱离了TCP协议?

其他更准确的问题:

  • 如果应用程序(比如 akka-streams 应用程序)最终通过 TCP 进行通信,它会退回到 TCP 的本机背压吗?

  • 反应流是否通过简单地让 TCP 处理它来在 TCP 之上实现应用程序级背压?

任何帮助和指示将不胜感激!谢谢 :)

4

1 回答 1

2

我认为您问题的基本假设是 TCP 是流管道中唯一的外部通信。

假设您的流通过多个 IO 通道(例如文件 IO、数据库查询和标准输出到控制台)进行通信:

//Read Data from File --> DB Query --> TCP Server Query --> Slow Function --> Console

akka-stream 实现将通过整个管道提供异步、背压支持。因此 akka-stream 必须为调用长时间运行的函数、查询数据库、读取文件、写入控制台等提供应用程序级的背压。

您是正确的,akka 对流TCP Server部分的实现依赖于 TCP 的 "native backpressure"。从文档中:

...通过使用 Akka Streams,您不必手动对背压信号做出反应,因为该库会为您透明地执行此操作。

于 2018-03-28T12:20:37.513 回答