问题现象
消费端在消费消息的主线程里同步将拉取的消息存储在NFS,导致消费端处理消息的速度变慢,阻塞消息处理。
可能原因
- NFS本身速度就不太理想。
- NFS是网络共享存储,虽然有多机器共享访问的能力优势,但多台机器访问是争抢的,消费者个数增多,性能反而下降。
解决方案
- 建议您将消费端拉取消息和存储消息分别放在两个独立且不同的线程里操作。拉取消息的线程只管消费消息,把消息转给缓存处理线程后就继续消费消息,这样可以保证消费速度的稳定。
- 您也可以考虑采用高效云盘或者SSD云盘,给每台消费端处理机挂载自己的云盘,各自独立存储,这样消费端不会再因为争抢NFS而降低性能。如果您需要把最终的处理结果集中到同一个NFS上保存,仍然可以通过一个异步的工具或者线程,把云盘上的结果再转发到NFS上,而不要让同步存储NFS阻塞消息处理。总之,对于资源访问造成的处理低效,总是可以用异步处理的方式解决。