1

我们为分布式处理构建系统,并希望将 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 实现最大吞吐量的最佳设计是什么?

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

欢迎任何想法和注意!

提前谢谢了!!!托比

4

1 回答 1

1

这里有几点说明:

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

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

于 2013-12-12T10:54:23.940 回答