去哪儿网服务化改造中的消息队列设计与实现分析
86 浏览量
更新于2024-08-29
收藏 284KB PDF 举报
"去哪儿网在面对业务快速增长带来的挑战时,进行了服务化改造,涉及到的关键技术之一就是消息队列。在评估了多种MQ解决方案如RabbitMQ、ActiveMQ、Kafka和MetaQ(RocketMQ前身)后,由于各种原因,去哪儿网决定自研消息队列。在设计与实现消息队列的过程中,主要关注的是数据一致性、事务保障以及消费者处理的可靠性。"
去哪儿网在2012年的服务化改造中,遇到了单体应用无法适应快速扩展的业务需求的问题。为了应对这一挑战,他们选择了RPC框架Alibaba Dubbo进行同步服务间通信。同时,对于异步通信,去哪儿网对市面上的MQ进行了评估,最终决定自建消息队列,以解决ActiveMQ存在的不稳定性和复杂性问题。
在设计消息队列时,首要任务是确保数据一致性。这涉及到两个关键点:一是发送消息和业务操作必须具有事务性保证,防止出现业务成功但消息未发送或消息发送成功但业务失败的情况。例如,支付服务和出票服务间的通信,必须保证支付成功和消息通知的一致性,避免引发用户投诉或公司损失。二是消费者的处理一致性,通过消费确认(ACK)和重试机制,确保即使消费者临时故障,消息也能最终得到处理。
服务端设计初期,去哪儿网计划将消息队列应用于交易环节,并选择数据库作为消息存储。然而,随着消息队列在各个系统的广泛应用,其角色不再局限于交易场景,因此,设计上可能需要考虑更广泛的需求,如扩展性、容错性和性能优化。
此外,自研消息队列还需要解决的问题包括高可用性、可扩展性以及性能。例如,需要构建分布式MQ集群,以提供高可用的服务,同时支持水平扩展以应对不断增长的业务量。另外,队列的调度策略、消息的持久化机制以及网络通信的效率也是设计中的重要考量因素。
去哪儿网消息队列设计与实现的核心在于,如何在满足业务需求的同时,提供强一致性和高可靠性的消息传递服务,这其中包括了对各种可能故障场景的预设解决方案,以及对服务架构的持续优化。通过自研,去哪儿网能够更好地定制化服务,以适应自身业务的独特需求。
2019-08-07 上传
点击了解资源详情
点击了解资源详情
2016-07-12 上传
2024-03-01 上传
2021-08-30 上传
2021-08-30 上传
2014-07-26 上传
2014-10-17 上传
weixin_38732912
- 粉丝: 6
- 资源: 944
最新资源
- ember-scrud:通过实践学习 ember.js 和 ember-cli
- curve_fit_plus
- google-books-browser-react-native:教程摘自Manuel Kiessling的《使用React Native开始移动应用程序开发》
- meteor-feed:纯净Meteor代码构建的点餐系统
- 使用OpenCV-CNN在网络摄像头上进行人脸识别:该项目通过使用网络摄像头流式传输实时视频来检测带有或不带有面具的人脸
- Object-Oriented-Programming-Principles-and-Practice:面向对象的编程原理和实践-2018Spring
- 海浪音乐盒网站系统官方版 v3.5
- catalogue_panorama
- tadaaam:视口入口动画库
- MRSS:用于生成 mrss 饲料的样板
- 恒压供水PLC程序aa.rar
- redux-react-tutorial:在这个仓库中,我将通过在React.JS中使用它来教你Redux
- luluordrgen
- Read Body Language-crx插件
- angular-2-and-TypeScript-calculator
- learninggruntplugin-lieaqnes:学习设置 grunt 插件