达到 Apache Storm 的限制

Reaching limits of Apache Storm

我们正在尝试使用 Apache Storm.

实现 Web 应用程序

应用程序
收到大量广告请求(100 TPS - 一百次交易/ second ),
对它们进行一些简单的计算,然后
将结果存储到NoSQL数据库
最大延迟为 10 毫秒

我们正在使用 Cassandra 作为其写入功能的接收器。

但是,我们已经超过了8 ms的要求,我们在100ms.

我们尝试最小化缓冲区(Disruptor 缓冲区)的大小并使用螺栓的并行性很好地平衡拓扑。

但我们还在20ms.

有 4 个工作人员(8 个核心/16GB),我们处于 20k TPS,这仍然很低。

是否有任何优化建议或
我们是否刚刚达到 Apache Storm
的极限(Java 的极限)?

低延迟和高吞吐量之间需要权衡。

如果你真的需要高吞吐量,你应该依靠批处理调整缓冲区大小,或者使用 Trident。

尽量避免将元组传输给其他工作人员有助于降低延迟。 (localOrShuffleGrouping)

请不要忘记监控导致世界停止的 GC。如果您需要低延迟,则应将其最小化。

我不知道你使用的平台,但在 C++ 中 10ms 是永恒的。我认为您使用的工具不正确。

使用 C++,处理一些本地查询应该不到一微秒。

涉及多个内存位置的非本地查询and/or必须等待磁盘或网络I/O,不得不花费更多时间。在这种情况下,并行是你最好的朋友。

你必须找到瓶颈。

  1. 是I/O吗?
  2. 是CPU吗?
  3. 是内存带宽吗?
  4. 是内存访问时间吗?

找到瓶颈后,您可以改进它,异步它 and/or 相乘(=并行化)它。