应用级背压VS TCP本机流量控制

时间:2018-03-27 07:54:47

标签: akka-stream flow-control reactive-streams backpressure

我正在调查为什么有些系统实现应用程序级别的反压,因为TCP提供了本机流控制。

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

是否只是从网络和TCP协议中抽象出异步通信的想法?

其他更精确的问题:

  • 如果应用程序(例如akka-streams应用程序)最终通过TCP进行通信,它是否会回退到TCP的原生背压?

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

akka对流relies on TCP's "native backpressure"TCP Server部分的实施是正确的。来自文档:

  

...通过使用Akka Streams,您无需手动做出反应   背压信号,因为图书馆对你透明。