akka-stream - 应用级背压 VS TCP 原生流控

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

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

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

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

其他更准确的问题:

  • 如果应用程序(比如 akka-streams 应用程序)最终通过 TCP 进行通信,它会退回到 TCP 的 native 背压吗?
  • 响应式(Reactive)流是否通过简单地让 TCP 处理它来在 TCP 之上实现应用程序级背压?

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

    最佳答案

    我认为您问题的基本假设是 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/

    相关文章:

    scala - Akka 流。分组,聚合一段时间并发出结果

    scala - 如何并排组合两个流?

    java - react 堆项目 : Multiple Publishers making HTTP calls and one Subscriber to handle all results

    mysql - 如何在 Slick 中使用 react 流来插入数据

    websocket - Kafka 消息到 websocket

    scala - 将 Akka 流连接到 JMS

    javascript - 如何循环promise函数流程控制

    ssh - tmux 流量控制

    javascript - Node.js - 确保非阻塞调用完成

    javascript - Bacon中如何根据一些EventStream的变化来切换流