鉴于 TCP 提供 native 流量控制,我正在研究为什么某些系统实现应用程序级背压。
我正在阅读,特别是 akka-streams和(更高级别的讨论)reactive streams .
是不是只是把异步通信的思想抽象出了网络,脱离了TCP协议(protocol)?
其他更准确的问题:
任何帮助和指示将不胜感激!
谢谢 :)
最佳答案
我认为您问题的基本假设是 TCP 是流管道中唯一的外部通信。
假设您的流通过多个 IO channel (例如文件 IO、数据库查询和标准输出到控制台)进行通信:
//Read Data from File --> DB Query --> TCP Server Query --> Slow Function --> Console
akka-stream 实现将提供异步、背压支持 通过整个管道 .因此 akka-stream 必须为调用长时间运行的函数、查询数据库、读取文件、写入控制台等提供应用程序级的背压。
你是对的,akka 对
TCP Server
的实现是正确的。流的部分relies on TCP's "native backpressure" .从文档中:...by using Akka Streams you are freed of having to manually react to back-pressure signals, as the library does it transparently for you.
关于akka-stream - 应用级背压 VS TCP 原生流控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49507289/