当前位置:首页 > 文章列表 > 数据库 > MySQL > 深入理解阿里分布式消息中间件

深入理解阿里分布式消息中间件

来源:SegmentFault 2023-02-19 17:58:48 0浏览 收藏

对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《深入理解阿里分布式消息中间件》,主要介绍了MySQL、缓存、Java、nginx、spring,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

什么是分布式消息中间件

clipboard.png

什么是分布式消息中间件?

对于分布式消息中间件,首先要了解两个基础的概念,即什么是分布式系统,什么又是中间件。

分布式系统:

“A distributed system is one in which components located at networked
computers communicate and coordinate their actions only by passing
messasges.”——《Distributed Systems Concepts and Design》

从上面这个解释可以得到分布式系统的两个特点:

  1. 组件分布在网络计算机上
  2. 组件之间通过消息来协调行动

中间件:

Middleware is computer software that provides services to software
applications beyond those available from the operating system. It can
be described as "software glue". Middleware makes it easier for
software developers to implement communication and input/output, so
they can focus on the specific purpose of their application.——维基百科

中间件被描述为为应用程序提供操作系统所提供的服务之外的服务,简化应用程序的通信、输入输出的开发,使他们专注于自己的业务逻辑。

从维基百科上对中间件的解释感觉有点绕,其实可以从“空间”的角度去理解中间件,即中间件是处于“中间层”的组件,是上层的应用程序和底层的服务之间的桥梁(比如DB中间件的上层是应用程序,底层是DB服务),也是应用与应用之间的桥梁(比如分布式服务组件)。

分布式消息中间件:

“Message-oriented middleware (MOM) is software or hardware
infrastructure supporting sending and receiving messages between
distributed systems.”——维基百科

维基百科给出的消息中间件的定义是支持在分布式系统中发送和接受消息的硬件或软件基础设施(对我们这里讨论的范围来说肯定就是软件了)。

那么分布式消息中间件其实就是指消息中间件本身也是一个分布式系统。

为什么要使用消息中间件

消息中间件就是可以省去繁琐的步骤,直达目的,怎么讲呢,就是比如你想很多人,知道你的动态,而知道的人可能手机没电,可能手机信号不好,可能手机不在服务区,或者看的人比较忙,看的时间不固定,这样的时候,你发送的消息怎么会让其看到呢,就是建立一个微信公众号,可以满足用户随时看到你想让其看到的消息,这就是中间件的一种应用方式,生活中老师讲课的黑板,家中的电视机都是中间件的一种体现方式。

消息中间件能做什么?

任何中间件必然都是要去解决特定领域的某个问题,消息中间件解决的就是分布式系统之间消息传递的问题。消息传递是分布式系统必然要面对的一个问题。
假设一个电商交易的场景,用户下单之后调用库存系统减库存,然后需要调用物流系统进行发货,如果交易、库存、物流是属于一个系统的,那么就是接口调用。但是随着系统的发展,各个模块越来越庞大、业务逻辑越来越复杂,必然是要做服务化和业务拆分的。这个时候就需要考虑这些系统之间如何交互,第一反应就是RPC(Remote Procedure Call)。系统继续发展,可能一笔交易后续需要调用几十个接口来执行业务,比如还有风控系统、短信服务等等。这个时候就需要消息中间件登场来解决问题了。

笔者认为,RPC和消息中间件的场景的差异很大程度上在于就是“依赖”和“量”。比如短信通知服务并不是事交易环节必须的,并不影响下单流程,不是强依赖,所以交易系统不应该依赖短信服务。比如一些数据分析程序可能需要在拿到一天的总销售量,这个就只需要销售中心提供接口在需要时调用即可。
消息中间件出现以后对于交易场景可能是调用库存中心等强依赖系统执行业务,之后发布一条消息(这条消息存储于消息中间件中)。像是短信通知服务、数据统计服务等等都是依赖于消息中间件去消费这条消息来完成自己的业务逻辑。

从以上的场景可以看出消息中间件其实就是对系统进行了解耦,同时带来了异步化等好处。
简单概括一下消息中间件的应用场景大致如下:

  • 业务解耦:交易系统不需要知道短信通知服务的存在,只需要发布消息
  • 削峰填谷:比如上游系统的吞吐能力高于下游系统,在流量洪峰时可能会冲垮下游系统,消息中间件可以在峰值时堆积消息,而在峰值过去后下游系统慢慢消费消息解决流量洪峰的问题
  • 事件驱动:系统与系统之间可以通过消息传递的形式驱动业务,以流式的模型处理

分布式消息中间件图

clipboard.png

一个抽象的对分布式消息中间件的认知大概是这样:

  • 有一个SDK,提供给业务系统发送、消费消息的接口
  • 有一批Server节点用于接受和存储消息,并在合适的时候发送给下游的系统进行消费

常见消息中间件对比

1、ActiveMQ
ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线. ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位.
ActiveMQ特性
(1)多种语言和协议编写客户端.语言:Java,C,C++,C#,Ruby,Perl,Python,PHP.
(2)应用协议:OpenWire、Stomp REST,WS Notification,XMPP,AMQP
(3)完全支持JMS1.1和J2EE1.4规范(持久化,XA消息,事务)
(4)虚拟主题、组合目的、镜像队列
2、RabbitMQ
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
RabbitMQ特性
(1)支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript等
(2)AMQP的完整实现(vhost、Exchange、Binding、Routing Key 等)
(3)事务支持/发布确认
(4)消息持久化
3、Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,是一个分布式的、分区的、可靠的分布式日志存储服务。它通过一种独一无二的设计提供了一个消息系统的功能。(不是个严格的中间件,主要是用于日志转存的)
Kafka特性:
(1)通过O(1) 的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
(2)高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
(3)Partition、Consumer Group
消息中间件综合对比

clipboard.png

如果大家想学习以下路线内容,在此我向大家推荐一个架构学习交流群。交流学习群号:478030634 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

注:关注作者微信公众号,了解更多分布式架构、微服务、netty、MySQL、spring、、性能优化、等知识点。公众号:《Java烂猪皮》

好了,本文到此结束,带大家了解了《深入理解阿里分布式消息中间件》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
mysql 5.7 windows zip安装mysql 5.7 windows zip安装
上一篇
mysql 5.7 windows zip安装
Mysql操作表结构常用命令
下一篇
Mysql操作表结构常用命令
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 茅茅虫AIGC检测:精准识别AI生成内容,保障学术诚信
    茅茅虫AIGC检测
    茅茅虫AIGC检测,湖南茅茅虫科技有限公司倾力打造,运用NLP技术精准识别AI生成文本,提供论文、专著等学术文本的AIGC检测服务。支持多种格式,生成可视化报告,保障您的学术诚信和内容质量。
    21次使用
  • 赛林匹克平台:科技赛事聚合,赋能AI、算力、量子计算创新
    赛林匹克平台(Challympics)
    探索赛林匹克平台Challympics,一个聚焦人工智能、算力算法、量子计算等前沿技术的赛事聚合平台。连接产学研用,助力科技创新与产业升级。
    50次使用
  • SEO  笔格AIPPT:AI智能PPT制作,免费生成,高效演示
    笔格AIPPT
    SEO 笔格AIPPT是135编辑器推出的AI智能PPT制作平台,依托DeepSeek大模型,实现智能大纲生成、一键PPT生成、AI文字优化、图像生成等功能。免费试用,提升PPT制作效率,适用于商务演示、教育培训等多种场景。
    58次使用
  • 稿定PPT:在线AI演示设计,高效PPT制作工具
    稿定PPT
    告别PPT制作难题!稿定PPT提供海量模板、AI智能生成、在线协作,助您轻松制作专业演示文稿。职场办公、教育学习、企业服务全覆盖,降本增效,释放创意!
    53次使用
  • Suno苏诺中文版:AI音乐创作平台,人人都是音乐家
    Suno苏诺中文版
    探索Suno苏诺中文版,一款颠覆传统音乐创作的AI平台。无需专业技能,轻松创作个性化音乐。智能词曲生成、风格迁移、海量音效,释放您的音乐灵感!
    60次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码