发送端的性能问题及优化方案

128 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情

问题

发送端一般会出现两种情况,一个是性能不足,导致消息发送效率很低,另一种情况是发送端性能满负荷,发送的消息对于消费者来说,已经产生消息积压,对业务的时效性产生影响。

这两种情况都无关消息队列本身,因为本身生产者都是先处理自己的业务逻辑,然后再发送消息至消息队列,所以生产者性能低下是生产者本身的问题,即使生产者满负荷运载,消息队列本身的吞吐量也不在话下。

方案

生产者性能低下问题

首先生产者发会首先处理业务逻辑,然后准备发送的消息并序列化,发送消息并等待发送结果,其中包含了网络传输消息的耗时以及消息队列处理接收到的消息耗时。

基于这种发送模式,可从以下几个方面进行调整:

  1. 增加生产者的实例数,提升生产者处理以及发送消息的能力
  2. 生产者增加多线程的处理,并发处理以及发送消息
  3. 生产者异步发送消息,这样减少了网络传输耗时以及消息队列处理消息的耗时
  4. 生产者设置批量发送逻辑,而不是每次只发送一条消息,这样也避免了频繁的建立连接

生产者满负荷问题

当生产者面临高并发请求,流量高峰时,能同步提升消息队列和消费者能力的话是最好的,但是如果服务器资源已达到瓶颈,此时则需要从生产者端做优化考虑了。

因为已经达到系统的最大处理能力,并且消费者无法快速的消费积压的消息,此时则需要考虑在生产者端做限流处理。

限流的上限取决于消息队列、以及消费者端的能力,提前设置好限流上限,这样就算有突发的大流量,也不会因为剧增的流量而导致系统的瘫痪,同时可以设置告警和监控,以根据实际情况来对后续做调整。例如从消费者端着手优化、或者横向扩展消息队列,待后续工程提升能力后,生产者端也可按需增加实例数。