搜故事,从300万个故事到海量知识百科的华丽转变!
搜故事 > 小故事 > 正文

读懂这篇文章 你的阿里技术面就可以过关了

时间:2019-07-05

阿里巴巴中间件技术专家刘振东在上周的Apache RocketMQ开发者沙龙北京站的活动上,进行了主题为ApacheRocketMQ 101的分享,帮助开发者从0开始学习 Apa

提示:本文共有 2644 个字,阅读大概需要 6 分钟。

在美国的大学课程中,101是所有课程中的第一门,是新生入学后的必修课程。阿里巴巴中间件技术专家刘振东在上周的Apache RocketMQ开发者沙龙北京站的活动上,进行了主题为《ApacheRocketMQ 101》的分享,帮助开发者从0开始学习 Apache RocketMQ,除了一些基础的入门内容外,还有很多是在社区未发表过的个人所感所悟,首次对外分享。分享内容包括RocketMQ的起源、RocketMQ概念模型、存储模型、部署模型和最佳实践总结,其中最佳实践的内容是阿里中间件技术类岗位的必考面试题。

嘉宾介绍:刘振东,阿里巴巴中间件技术专家,Apache RocketMQ PMC/Committer,2016年中间件性能挑战赛亚军,具有丰富的分布式系统设计和优化经验,目前负责Apache RocketMQ新航道探索和创新。

一、RocketMQ的起源

通常,每个产品的诞生都源于一个具体的需求或问题,RocketMQ也不例外。起初,产品的原型像一个巨石,把所有需要实现的程序和接口都罗列到一起。但随着公司业务的发展,所有的系统和功能都在这个巨石上开发,当覆盖几百上千名开发人员的时候,瓶颈就出来了。这时候,就需要我们把系统进行分解。

图释:巨石 ->分布式

分解后,就出现了上图中的分布式架构,这类架构最大的特点就是解耦,而RocketMQ的异步解耦意味着底层的重构不会影响到上层应用的功能。RocketMQ另一个优势是削峰填谷,在面临流量的不确定性时,实现对流量的缓冲处理。此外,RocketMQ的顺序设计特性使得RocketMQ成为一个天然的排队引擎,例如,三个应用同时对一个后台引擎发起请求,排队引擎的特性可以确保不会引起“撞车”事故。

二、RocketMQ的概念模型

对于任何一款中间件产品而言,清晰的概念模型是帮助开发者正确理解使用它的关键。从RocketMQ的概念模型来看:Topic是用于存储逻辑的地址的,Producer是信息的发送,Consumer是信息的接收者。

图释:最基本的概念模型

这只是一个基础的概念模型,在实际的生产中,结构会更复杂,例如我们需要对中间的Topic进行分区,出现多个有关联的Topic,再如同一个信息的发送方会有多个订阅者,同一个需求方会有多个发送方,出现一对多、多对一的情况。

图释:扩展后的概念模型

上图就是对Topic、Producer、Consumer扩展后的概念模型。RocketMQ中可以接触到的所有概念都可以在这个概念模型图中找到。左边有两个Producer,中间就是两个分布式的Topic,用于存储逻辑地址的两个Topic中分别有两个用于存储物理存储地址的Message Queue,Broker是实际部署过程的对应的一台设备,右边则是两个Consumer,Consumer Group是代表两个Consumer可共享相互之间的订阅。不同的Consumer Group相互独立。一句话总结就是不同的Group是广播订阅的,同一个Group则是负载订阅的。图中的连线表示各模块之间的关系,例如Consumer Group A中的Consumer1对应着Message Queue0和Message Queue1的两个队列,分布在BrokerA这一台设备上。

三、RocketMQ的存储模型

RocketMQ的消息的存储是由ConsumeQueue和CommitLog 配合来完成的,ConsumeQueue中只存储很少的数据,消息主体都是通过CommitLog来进行读写。

图释:存储模型

CommitLog:是消息主体以及元数据的存储主体,对CommitLog建立一个ConsumeQueue,每个ConsumeQueue对应一个(概念模型中的)MessageQueue,所以只要有Commit Log在,Consume Queue即使数据丢失,仍然可以恢复出来。

Consume Queue:是一个消息的逻辑队列,存储了这个Queue在CommitLog中的起始offset,log大小和MessageTag的hashCode。每个Topic下的每个Queue都有一个对应的ConsumerQueue文件,例如Topic中有三个队列,每个队列中的消息索引都会有一个编号,编号从0开始,往上递增。并由此一个位点offset的概念,有了这个概念,就可以对Consumer端的消费情况进行队列定义。

四、RocketMQ的部署模型

在实际的部署过程中,Broker是实际存储消息的数据节点,Nameserver则是服务发现节点,Producer发送消息到某一个Topic,并给到某个Consumer用于消费的过程中,需要先请求Nameserver拿到这个Topic的路由信息,即Topic在哪些Broker上有,每个Broker上有哪些队列,拿到这些请求后再把消息发送到Broker中;相对的,Consumer在消费的时候,也会经历这个流程。

图释:部署模型

五、RocketMQ最佳实践总结

这是我们在实践过程的总结,同时我们也把其中一些普适性的总结作为阿里中间件技术岗的面试题,目的是帮助大家更深刻的理解我们在设计分布式消息系统的一些思考和探索。

Q1:分布式消息系统中,如何避免消息重复?

造成消息重复的根本原因是:网络不可靠。只要通过网络交换数据,就无法避免这个问题。所以解决这个问题的办法就是绕过这个问题。那么问题就变成了:如果消费端收到两条一样的消息,应该怎样处理?

a. 消费端处理消息的业务逻辑保持幂等性;

b. 保证每条消息都有唯一编号且保证消息处理成功与去重表的日志同时出现。

通过幂等性,不管来多少条重复消息,可以实现处理的结果都一样。再利用一张日志表来记录已经处理成功的消息的ID,如果新到的消息ID已经在日志表中,那么就可以不再处理这条消息,避免消息的重复处理。

Q2:顺序消息扩容的过程中,如何在不停写的情况下保证消息顺序?

1. 成倍扩容,实现扩容前后,同样的key,hash到原队列,或者hash到新扩容的队列;

2. 扩容前,记录旧队列中的最大位点;

3. 对于每个Consumer Group,保证旧队列中的数据消费完,再消费新队列,也即:先对新队列进行禁毒即可;

Q3:分布式消息系统中,如何对消息进行重放?

消费位点就是一个数字,把Consumer Offset改一下就可以达到重放的目的了。

Apache RocketMQ部分开发者合影

看到此处说明本文对你还是有帮助的,关于“读懂这篇文章 你的阿里技术面就可以过关了”留言是大家的经验之谈相信也会对你有益,推荐继续阅读下面的相关内容,与本文相关度极高!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
这篇文章不是一般人能写出来的 品之有味 做之有益 送给大家都看看!

这篇文章不是一般人能写出来的 品之有味 做之有益 送给大家都看看!

亲爱的朋友,保健,儿女,歌声,生活,有机会,之有味,好友来,想见面,感情深,挺胸膛,文人,健康长寿,人生旅途,保健品,出点,关键,夕阳,坏毛病,国家,商业性,图片,广场,心态,心情愉快,技术,成绩,感觉,诺贝尔文学奖,早晚

2020-08-06 #故事会在线阅读

下面这篇文章是:死在兔岛上的狼。 这篇文章的含义?

下面这篇文章是:死在兔岛上的狼。 这篇文章的含义?

大众,时候,意义,定义,枪打出头鸟,采取行动,结果,砍头,错误地,估计形势,一口饭,不团结,不能用,盲目地,这说明,这样才能

2020-06-11 #小故事

我花生命写这篇文章 你也在花生命阅读这篇文章

我花生命写这篇文章 你也在花生命阅读这篇文章

时间,生命,梵高,很多人,时间就是,这篇文章,花生,东西,命运多舛,女人,爱因斯坦,我不敢,无人能,跳桥,人生,女性,意义,榆林,现象,理论,老人,老太太,诗歌,写字,发展,什么是,任何东西,我以为,来看我,在所难免

2017-10-04 #长篇故事

读完这篇文章 你将不再迷茫

读完这篇文章 你将不再迷茫

人生,目标,方向,分析,生活,书籍,心累,时候,状态,调整,世界上最伟大的推销员,我们需要,这篇文章,突然就,初衷,书架,任务,价值,内心,动力,力量,原因,名人,太久,客观,文章,常态,情况,思绪,总会

2011-02-26 #故事大全

《请客》这篇文章说明了什么道理?

《请客》这篇文章说明了什么道理?

小往大来,权谋,中国,手段,作者,主人,人家,悭吝,消灾,荷包,钱财,这篇文章,中国人,习俗,会钞,哲学,关系,归真,次数,目的,白花,行为,车费,道理,远景,青蚨,面子,诱惑,不花钱,大多数人

2020-05-06 #故事阅读

初中英语作文 帮忙看一下这篇文章的错误

初中英语作文 帮忙看一下这篇文章的错误

初中英语,作文,错误,看一下,这篇文章

2020-07-20 #故事阅读

世外桃源这句成语出自哪里 与大家分享学习这篇文章的几点经验

世外桃源这句成语出自哪里 与大家分享学习这篇文章的几点经验

意思,今义,桃花林,桃花源记,古义,桃花源,渔人,世外桃源,这篇文章,陶渊明,成语,景色,美景,多义词,桃林,生活,作用,桃花,沿途,武陵人,这几句,中心,作者,关系,外人,地方,妻子,文章,环境,结构

2020-08-04 #故事大全

威驰这款车有哪些优势?空间表现如何?读完这篇文章你就觉悟了!

威驰这款车有哪些优势?空间表现如何?读完这篇文章你就觉悟了!

动力,空间,油耗,内饰,车型,汽车市场,丰田,外观,舒适性,驾驶者,优势,优点,发动机,小型车,实际,市场,性价比,线性,觉悟,驾车者,设计,有哪些,腿部空间,这篇文章,颜值,高颜值,各大,捷达,一片天,一环

2016-05-04 #长篇故事