【问题标题】:Application-level back-pressure VS TCP native flow-control应用级背压 VS TCP 原生流控
【发布时间】:2018-03-27 07:54:46
【问题描述】:

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

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

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

其他更准确的问题:

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

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

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

【问题讨论】:

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


    【解决方案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,您无需手动响应 背压信号,因为库为您透明地执行它。

    【讨论】:

    • 感谢您的回答!这正是我所说的“我是否要从网络和 TCP 协议中抽象出异步通信的概念”。不过,我真的很感激!
    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    相关资源
    最近更新 更多