消息中间件对目前大中型互联网来说是非常重要的,在业务数据流动中仅次于RPC服务调用,担负着越来越复杂的网站业务从主流程上解耦的重要责任;
从目前互联网对消息中间件的需求来看应该分为两种类型,一种是和钱相关的需求,一种是和钱无关的需求;和钱相关的需求消息的可靠性是放在第一位的,和钱无关的需求是速度放在第一位的,但这两种需求又是矛盾的,很难设计出一种既可靠又高效的系统,除非将两套方案捏合成一个系统,通过配置来选择不同方案,但从实现上说还是两种实现。所以目前业界有几种不同的设计方式来满足不同的需求。
下面看看以下几种典型实现方案:
1、以ActiveMQ为代表的可靠性优先的设计原理:
此种方案将所有的消息数据和消息的发送状态都存储在消息服务器上,可以在消息服务上通过多种手段来保证消息的可靠性,但增加了众多复杂的可靠性保证手段后,消息从发布者到订阅者的速度势必会受到影响;此种方式发布者将消息推向消息服务器,消息服务器再将消息推向订阅者,为消息发送策略提供了很好的可扩展性;
2、以KafKa为代表的速度优先的设计原理:
此种方式将消息的发送状态保存在客户端,同时客户端用拉的模式从消息服务器上获取消息,由于是顺序读,同时还采取了很多保证速度的策略,如zero-copy,所以此种方案速度比较快,但牺牲了很多可靠性方面的保证,比较适合Web2.0网站,这些网站对消息的可靠性要求不是很高,同时由于产生了大量的和用户状态相关的消息,需要一个高效的系统来处理这些消息;另外这种方案也比较适合日志消息的收集;
3、传统的系解耦方案:
此种方式是不用消息中间件直接用数据库存储做的解耦,随着消息中间件的出现,这种方式的使用越来越少,但现在由于MongoDB和Redis等的兴起,一些基于这些Nosql数据库的消息应用逐渐兴起,由于消息数据和消息状态都存储在DB上,所以效率和速度在上面两种方案之间;
那么有没有一种更高效的方式呢?
答案是肯定的,但那可能要进一步降低可靠性!
看看Facebook的Scribe日志收集系统的原理:
如果Scribe Server正常工作,Scribe Client将App的日志(可以看成一个消息)推送到Scribe Server端,如果不正常,则写到本地文件,当Scribe Server恢复正常时再将其推送过去;这里使用本地文件作为缓冲,那么能否综合Scribe和Kafka的优点来设计一个消息系统(或日志收集系统,改造一下可以互用),看下面的方案:
上面的MQ暂且叫他FastMQ吧,①中消息发布端直接写本地文件,同时消息订阅者通过Zookeeper协调,向相关消息发布者的Agent拉消息,并在本地记录消息指针状态;
如果嫌在消息发布端开启MQ Agent麻烦,那么如②中消息拉取协议使用SCP或FTP协议,用这些Linux必备的协议提供者作为Agent减少开发和部署的难度,在服务订阅端解析这些协议流,反序列化为消息供业务使用;
如果觉得消息只存储在消息发布端的磁盘不可靠,那么如③中可以在消息订阅者处理不及消息的时候,把消息数据缓冲在消息订阅端的磁盘上来备份数据,不过这样做就使系统变的复杂,虽然提高了可靠性,但是速度就会有所降低;
此种方案可以使消息分散的存储在业务本身的磁盘上,避免集中存储相互影响的缺点,同时又可以有效利用业务机器的磁盘(大部分业务机器磁盘基本没使用),另外还可以减少一次网络通信的过程,使从发送到接收的速度更快;但其本身也有不少缺点,要做好监控,避免消息大量积压的时候业务磁盘过度使用,对业务造成影响。
目前我们的监控日志收集系统使用的是和②中类似的方案,消息系统使用的是3方案,后期可能会将可靠性要求高的向1方案过度,可靠性要求不高的向最下面介绍这种过度!
转自:http://www.iteye.com/topic/1113331
相关推荐
- 消息的延时机制:如何精确地实现消息的延时投递。 - 任务调度与执行:如何在合适的时间点调度和执行延迟任务。 文章中提到的系统特点,如轻量级、高可用、低耦合和高性能,是评价延迟队列解决方案好坏的重要指标...
分布式消息中间件Corgi的应用架构演进是一个关键的话题,特别是在现代互联网系统中,它扮演着数据同步、异步处理和解耦系统的角色。本文将深入探讨Corgi的演变历程,从早期的设计到后来的优化,以及为什么选择了...
淘宝技术架构的发展历程不仅反映了中国互联网行业的快速发展,也为我们提供了宝贵的经验和启示: - **持续创新**:面对业务发展的挑战,不断尝试新技术、新方法。 - **灵活适应**:根据实际情况调整架构,选择最适合...
互联网的蓬勃发展,业务驱动技术不断升级,在系统越来越庞大,技术越来越复杂,应用部署集群化,所有压力全部指向数据库,数据量巨大,数据库优化也到极限了,数据库的运维难以为继,在这种情况下,分布式数据库似乎...
京东弹性数据库中间件(JED)是京东自主研发的一种数据库中间件解决方案,旨在解决互联网环境下对于数据库性能、可用性和灵活性的高要求。JED支持多种数据库协议,包括MySQL、PostgreSQL、Oracle和SqlServer,适合在...
【大数据平台架构】是当前企业数字化转型的核心组成部分,尤其在互联网行业中,大数据处理能力成为了提升业务能力和竞争力的关键。本文将详细解析大数据平台架构及其关键技术,重点关注巨杉数据库(SequoiaDB)作为...
总结来说,同程旅游的互联网云服务架构设计是一个不断演进的过程,从基础的虚拟化到中间件的云化,再到整个研发流程的优化,都是为了更好地支持大规模访问、提高资源效率和提升运维能力。这一过程中,技术创新、团队...
该团队源自7年前的淘宝平台架构部,随着阿里巴巴集团业务扩展,特别是性能和稳定性技术领域的突破,已经发展成为一个集消息通信、数据处理、性能优化和稳定性技术为一体的互联网架构服务平台。它支撑了包括淘宝、...
通过以上技术手段,当当网成功地将业务架构升级为弹性化和云化的模式,提高了系统的稳定性和扩展性,有效应对了互联网行业的挑战。这不仅适用于当当网,也为其他面临类似问题的公司提供了参考和借鉴。
淘宝数据库架构的演变过程反映了互联网技术从无到有、从简单到复杂、从单一到分布式的发展趋势,这其中涉及到一系列的技术挑战和解决方案。本文将深入探讨这个主题,围绕“架构”和“Java”这两个关键词,解析淘宝...
大型网站技术架构是指为满足大型网站高性能、高可用性、可伸缩性、安全性、快速迭代和低成本等需求,所采用的一系列技术解决方案和策略的集合。为了深入理解大型网站技术架构的核心原理,我们可以从以下几个方面展开...
以上内容详述了互联网金融业务在面对高并发挑战时,如何通过去Oracle策略,利用标准化解决方案和数据中间件技术,构建一个更加灵活、高效且成本可控的系统架构。这一过程不仅涉及到技术选型,还包括整体架构设计、...
随着互联网技术的不断发展,网站应用规模不断扩大,系统架构也随之演变。从最初的单体应用架构到当前流行的微服务架构,每一步演变都有其特定背景和技术驱动因素。 - **1.1.1 单体应用架构** - **定义**: 在互联网...
本文将详细介绍一种基于工业互联网的智能计量管理系统设计方案,旨在通过运用先进的信息技术,实现计量工作的自动化、智能化。 #### 二、背景分析 计量工作在生产过程中扮演着极其重要的角色,被誉为“生产的眼睛”...
- **目的**:兼顾传统核心系统的稳定性和分布式架构的灵活性,实现业务快速创新。 - **策略**: - 将功能相对稳定、与客户资金安全紧密相关的业务保留在集中式核心系统中。 - 新颖性强、创新速度快、交易并发量大...