【问题标题】:maximum throughput in distributed processing (with netty 4.0)分布式处理的最大吞吐量(使用 netty 4.0)
【发布时间】:2013-12-12 18:54:23
【问题描述】:

我们为分布式处理构建系统,并希望将 netty (4.0) 用于网络 I/O 堆栈。

以下情况:我们有一个生产者任务 A 和一个消费者任务 B。任务 A 以 64K 块生成数据并将其传输给任务 B。任务 B 在某些情况下可能是计算密集型的,并且消耗 64K 块的速度比生成的慢通过任务A。任务A和B通过tcp通道连接。

我们考虑这种方法:任务 A 生成块并将其放入本地队列中。当 tcp 通道空闲并且下一个 64K 可以写入通道时,会自动从队列中取出一个块(netty 是否给我们这样的信号/事件?)。如果任务 A 上的队列超过了存储块的固定限制,我们会阻塞任务 A,直到任务 B 消耗完块。本质上,我们希望任务 A 的“接收器触发写入”能够充分利用 tcp 通道而不会拥塞它。这种设计的目标应该是最大的数据吞吐量。

现在有几个问题:)

这是实现最大吞吐量的好设计吗?充分利用 tcp 通道的更好设计是什么?

netty 是这些场景的正确框架吗? (我对 netty 很陌生,但我真的很喜欢框架的简洁抽象/设计!)

这样的设计可以用netty实现吗? =>(它会从接收方站点给我们这样的信号/事件吗?)

使用 netty 实现最大吞吐量的最佳设计是什么?

还有其他更适合的框架吗?

欢迎任何想法和说明!!!

非常感谢提前!!! 托比

【问题讨论】:

    标签: java io netty distributed-computing system-design


    【解决方案1】:

    这里有几点说明:

    • 一般设计:您提到的是“分布式”处理,但不要指定是否有多个任务 A 和任务 B 处理器实例。如果您只有一个 Task A 处理器和一个 Task B 处理器,则数据吞吐量将由较慢的处理器决定。我知道,平均而言,B 较慢,但它可以更快,因此在 A 和 B 之间引入缓冲区看起来是个好主意。因此,我认为如果您想要/需要坚持使用单个 A 和单个 B 实例,则该设计很好,但是如果 B 确实较慢,您可能会考虑拥有多个实例(然后您将拥有比 A 更多的 B 实例)

    • netty 或其他框架:是的,你可以在 Netty 中做到这一点。但是,我认为您必须编写“TCP 通道空闲”信号。我没有太多经验,但我认为像http://akka.io/ 这样的框架,实现消息传递和演员模型会很有趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多