我们正在尝试用 Apache Storm
.
应用
接收大量的广告请求( 100 TPS
-100次交易/秒),
做一些简单的计算然后
将结果存储在nosql数据库中
最大延迟为10毫秒。
我们正在使用 Cassandra
因为它的写作能力。
然而,我们已经越过了 8 ms
要求,我们在 100ms
.
我们尝试最小化缓冲区(中断缓冲区)的大小,并使用螺栓的并行性来很好地平衡拓扑。
但我们还在 20ms
.
有了4个工作线程(8核/16gb),我们 20k TPS
这仍然很低。
有什么优化或改进的建议吗
我们刚刚达到极限吗 Apache Storm
(限制 Java
)?
2条答案
按热度按时间zsbz8rwp1#
在低延迟和高吞吐量之间有一个折衷。
如果您真的需要高吞吐量,您应该依靠批处理来调整更大的缓冲区大小,或者使用trident。
尽量避免将元组传输给其他工作者有助于降低延迟(本地或混合)
请不要忘记监视gc,因为它会导致世界停止。如果你需要低延迟,它应该被最小化。
cetgtptt2#
我不知道你在用什么平台,但在c中
10ms
是永恒。我想你用错工具了。使用c服务于某些本地查询需要不到一微秒的时间。
触及多个内存位置和/或必须等待磁盘或网络i/o的非本地查询别无选择,只能占用更多时间。在这种情况下,平行性是你最好的朋友。
你必须找到瓶颈。
是i/o吗?
是cpu吗?
是内存带宽吗?
是内存访问时间吗?
找到瓶颈后,您可以对其进行改进、异步和/或乘法(=并行化)。