为什么使用消息队列

46 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情

消息队列有什么功能?

  • 通讯:发布订阅、广播
  • 缓存:速度不匹配、削峰填谷、提高可用性
  • 异步:提高并发能力
  • 流量控制:秒杀的限流保护、令牌桶
  • 服务解耦

消息队列的问题

  • 增加延迟问题;
  • 增加了系统的复杂度;
  • 降低了数据一致性,如要保持强一致性,需要高代价的补偿(如分布式事务、对账)
  • 有数据丢失风险,如宕机重启,如要保证队列数据可用,需要额外机制保证(如双活容灾)

不适用场景:银行转账、电信开户、第三方支付

消息队列的应用场景

  1. 电商订单系统:订单系统与支付、库存、物流等系统之间通过消息队列异步通信,提高系统的稳定性和可靠性。
  2. 数据分发系统:用消息队列作为数据分发的载体,支持数据广播、数据发布和订阅。
  3. 系统监控:通过消息队列传输系统的监控数据,进行实时监控和异常报警。
  4. 数据同步:将数据同步到不同的系统中,通过消息队列异步传输,减少系统间的耦合。
  5. 广告投放:通过消息队列传递广告展示和点击数据,进行实时计算和精准投放。
  6. 分布式爬虫:通过消息队列控制爬虫任务的调度和结果的收集。
  7. 实时推荐系统:通过消息队列传递用户行为数据,实现实时推荐。
  8. 大数据处理:通过消息队列传递数据,实现大数据的处理和分析。
  9. 异步任务处理:例如,将用户提交的订单信息放入消息队列中,后台处理程序会消费该信息并处理订单。
  10. 日志收集和处理:消息队列可以用于从不同的应用程序、服务器和设备收集大量的日志数据,并使其可用于后续处理和分析。
  11. 数据缓冲:消息队列可以作为一种缓冲机制,缓存大量的数据流并使其可供后续处理和分析。这在实时数据处理和流式计算方面非常有用。
  12. 事件驱动架构:消息队列可以使不同的应用程序和服务之间相互解耦,从而实现松耦合的事件驱动架构。
  13. 数据传输和同步:消息队列可用于在不同的应用程序、服务、服务器或设备之间传输和同步数据。
  14. 实时流处理:消息队列可以在实时流处理应用程序中充当缓冲器,从而提高性能和可扩展性。
  15. 在线聊天和通信:消息队列可以用于在线聊天和通信应用程序,用于实时消息传递。
  16. 消息通知和提醒:消息队列可以用于向用户发送通知和提醒,例如电子邮件、短信或推送通知。
  17. 数据备份和恢复:消息队列可以用于备份和恢复数据,以提供容错性和数据可用性。