总览
持久消息传递可以非常快,甚至与非持久消息传递一样快。
持久消息传递的局限性
持久的消息传递取决于您的主内存大小和硬盘驱动器的速度。 如果您有HDD,则该速度可低至20 MB / s,最高可至60 MB / s。 RAID组HDD可以支持100到300 MB / s。 SATA SSD可以支持100到500 MB / s之间的速度,而PCI SSD可以支持高达1.5 GB / s的速度。
案例分析
假设您有8 GB的内存,每秒写入两百万条100字节的消息,以及一个支持25 MB / s的HDD。 这可以按突发速度很好地工作,但是您可以达到磁盘缓存已满的程度。 根据您的操作系统,这可能在主内存大小的20%到80%之间。 以我的经验,即使您有足够的可用内存,Windows也趋向于接近20%,而Linux往往允许在30%的内存中进行未提交的写入。
假设您每秒写200万条100字节消息或200 MB / s,并且有1600 MB的磁盘缓存。 写入速率和生成速率之间的速度差为175 MB / s,因此仅用9秒即可填满缓存。 此时,您的性能下降到磁盘的写入速度(每秒25 MB)。 每条消息为100字节,您现在每秒写入250,000条消息,或者慢8倍。
解决办法是什么?
- 将您的突发次数控制在磁盘缓存范围之内,例如,在上述情况下,这大约是一千八百万条消息。
- 增加您的内存量。 虽然内存价格便宜,您可以以150英镑的价格购买32 GB,但所有这些都包括您可以支持的微脉冲持续时间。
- 提高驱动器速度。 使用SSD,您可以支持更高的带宽。 SATA SSD驱动器支持高达500 MB /秒的速度,这比Chronicle通常可以序列化消息的速度要高,即绰绰有余。 这样做的缺点是减少了您可以编写的消息总数。 500 MB SSD可以存储50亿条100字节消息。 6×4 TB RAID-5集可以支持超过200 MB / s的传输速率,足以满足上述案例研究的需要,并且可以存储2000亿条消息。
结论
如果看到任何持久的消息传递解决方案在负载下突然变慢,则需要查看缓冲区的大小和磁盘子系统的吞吐量。
参考:来自Vantage Java博客的JCG合作伙伴 Peter Lawrey提供的持久消息的不利方面。
翻译自: https://www.javacodegeeks.com/2013/02/a-down-side-of-durable-messaging.html