我正在调查为什么有些系统实现应用程序级别的反压,因为TCP提供了本机流控制。
我正在阅读,特别是akka-streams和(更高级别的讨论)reactive streams。
是否只是从网络和TCP协议中抽象出异步通信的想法?
其他更精确的问题:
如果应用程序(例如akka-streams应用程序)最终通过TCP进行通信,它是否会回退到TCP的原生背压?
通过简单地让TCP处理它,反应流是否在TCP之上实现了应用程序级的反压?
任何帮助和指针将不胜感激! 谢谢:))
答案 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,您无需手动做出反应 背压信号,因为图书馆对你透明。