开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情
消息队列有什么功能?
- 通讯:发布订阅、广播
- 缓存:速度不匹配、削峰填谷、提高可用性
- 异步:提高并发能力
- 流量控制:秒杀的限流保护、令牌桶
- 服务解耦
消息队列的问题
- 增加延迟问题;
- 增加了系统的复杂度;
- 降低了数据一致性,如要保持强一致性,需要高代价的补偿(如分布式事务、对账)
- 有数据丢失风险,如宕机重启,如要保证队列数据可用,需要额外机制保证(如双活容灾)
不适用场景:银行转账、电信开户、第三方支付
消息队列的应用场景
- 电商订单系统:订单系统与支付、库存、物流等系统之间通过消息队列异步通信,提高系统的稳定性和可靠性。
- 数据分发系统:用消息队列作为数据分发的载体,支持数据广播、数据发布和订阅。
- 系统监控:通过消息队列传输系统的监控数据,进行实时监控和异常报警。
- 数据同步:将数据同步到不同的系统中,通过消息队列异步传输,减少系统间的耦合。
- 广告投放:通过消息队列传递广告展示和点击数据,进行实时计算和精准投放。
- 分布式爬虫:通过消息队列控制爬虫任务的调度和结果的收集。
- 实时推荐系统:通过消息队列传递用户行为数据,实现实时推荐。
- 大数据处理:通过消息队列传递数据,实现大数据的处理和分析。
- 异步任务处理:例如,将用户提交的订单信息放入消息队列中,后台处理程序会消费该信息并处理订单。
- 日志收集和处理:消息队列可以用于从不同的应用程序、服务器和设备收集大量的日志数据,并使其可用于后续处理和分析。
- 数据缓冲:消息队列可以作为一种缓冲机制,缓存大量的数据流并使其可供后续处理和分析。这在实时数据处理和流式计算方面非常有用。
- 事件驱动架构:消息队列可以使不同的应用程序和服务之间相互解耦,从而实现松耦合的事件驱动架构。
- 数据传输和同步:消息队列可用于在不同的应用程序、服务、服务器或设备之间传输和同步数据。
- 实时流处理:消息队列可以在实时流处理应用程序中充当缓冲器,从而提高性能和可扩展性。
- 在线聊天和通信:消息队列可以用于在线聊天和通信应用程序,用于实时消息传递。
- 消息通知和提醒:消息队列可以用于向用户发送通知和提醒,例如电子邮件、短信或推送通知。
- 数据备份和恢复:消息队列可以用于备份和恢复数据,以提供容错性和数据可用性。