当前位置: 首页 > news >正文

(一)RocketMQ初步认识

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

rocketMQ是一个消息中间件。其产生的动机在github官方文档有如下阐述:

在早期阶段,我们在ActiveMQ 5.x(小于5.3)的基础上构建了分布式消息传递中间件。我们的国际业务使用它来进行异步通信,搜索,社交网络活动流,数据管道,甚至在我们的交易订单流程中。随着我们的贸易业务吞吐量越来越不可思议,来自我们的消息传送群集的压力也变得越来越明显。

基于我们的观察和研究,随着越来越多的队列和虚拟主题的使用,ActiveMQ IO模块成为瓶颈。在某些情况下,较慢的消费者可能会减慢生产者。我们尽最大努力通过节流,断路器或降级来处理这个问题,但它不能优雅地扩展。所以我们开始专注于当时流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足我们的要求,如低延迟和高可靠性,详见这里。

在这种情况下,我们决定创新一个新的消息中间件,以处理一系列广泛的用例,从传统的发布/订阅场景到苛刻的大容量实时事务系统,不容许消息丢失。我们还创建了一个基于RocketMQ的基础产品,这是一个名为阿里云平台的平台即服务(PaaS)产品。今天,超过100家公司在他们的业务解决方案中使用RocketMQ开源版本。我们相信RocketMQ可以让更多的人受益,所以我们想在世界各地分享。

阐述中提到的kafka,ActiveMQ以及我们将要研究的RocketMQ都是消息中间件,何是消息中间件?

##消息中间件

  • 理解:

    • 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。

    • 传统消息系统数据有较大丢失风险,消息中间件最大的作用是解耦系统之间的依赖及异步化各系统间的调用。且作为系统间消息存储和转发环节,具有高可靠性。

  • 特点:

    • 异步处理:发/接双方不需同时在线,消息可以分发,可以堆叠。
    • 解耦合:防止引入过多的API给系统的稳定性带来风险;调用方使用不当会给被调用方系统造成压力,被调用方处理不当会降低调用方系统的响应能力。

理解完消息中间件,我们来看一下RocketMQ的特点:

##Rocket MQ 特点:

官方解释:

产品基于高可用分布式集群技术,提供消息发布订阅、消息轨迹查询、定时(延时)消息、资源统计、监控报警等一系列消息云服务,是企业级互联网架构的核心产品

这里提到集群和分布式,再理解下:

##分布式和集群

  • 概念:

    • 分布式:一个业务分拆多个子业务,部署在不同的服务器上。
    • 集群:同一个业务,部署在多个服务器上,将几台服务器集中在一起,实现同一业务
  • 区别

    分布式的每一个节点,都完成不同的业务,一个节点垮了,这个节点的业务就不可访问了。而集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。 所以说,分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的

举例:如新浪网,访问的人多了,他可以做一个集群,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。

到这里,对于RocketMQ是个什么东西有一个模糊的理解,在具体实践前我们需要了解一些概念(我仅介绍单机搭建时会涉及的知识点)

##Rocket MQ架构及术语理解

Rocket MQ架构简图

图A中有四个角色,也是Rocket MQ中的重要概念。概念如下:

  • Producer
    • 消息生产者,负责产生消息,一般由业务系统负责产生消息。
  • Consumer
    • 消息消费者,负责消费消息,一般是后台系统负责异步消费。
  • NameServer
    • 无状态节点,用来保存活跃的 broker 列表,和topic列表。
  • Broker
    • 消息中转角色,负责存储消息,转发消息。

producer和consumer很好理解一个发送消息,一个接受消息。nameserver和broker是重点要说的,它们是服务器层,构成了集群的逻辑。这里先解释一个概念。

无状态节点 无状态和状态的区别,即为服务器应答过程中是否基于上次请求所构筑的上下文环境,个人理解:无状态就是发送过来的请求结果都一样,和上一次没啥因果关系。有状态就是我这一次发的请求和上一次有一定关系,服务器得保留每次的请求,以便对下一次请求产生影响

nameserver是无状态节点,所以可以扩展成集群。

  • topic
    • 消息的逻辑管理单位。

实际生产模式下(关闭了broker的自动创建、订阅topic的功能)

  • broker控制topic的增删,发送未知topic的producer会报错(autoCreateTopicEnable=false
  • broker控制topic的订阅,未指定的订阅组,consumer无法拉取消费该topic的信息(autoCreateSubscriptionGroup=false

##工作流程

  1. 首先需要搭建一个NameServer节点,就像一个信号塔,producer,consumer以及broker之间的联系都需要通过访问NameServer,获取到各自需要的路由信息后才能进行联系。
  2. NameServer节点搭建成功后,启动Broker。启动前可以修改Broker的默认配置文件,包括前文说到的topic相关的参数等,修改完成后,启动Broker,配置即生效。
  3. 启动完NameServer和Broker后,可以在控制台里进行topic的增加和订阅(具体控制台的操作后文再说)。然后producer就可以发送已有的topic类型的消息,另一边consumer(订阅组)被broker准许后,每当consumer订阅的topic下接收到消息(消息从producer发送到broker中),consumer便可以成功拉取到此消息(消息从broker到consumer)并进行消费。

RocketMQ架构说明

该段简要的描述了RocketMQ工作的流程,更多更复杂的概念咱们后文再涉及...

下一篇:Rocket MQ单机环境搭建

转载于:https://my.oschina.net/caiyunick/blog/795312

相关文章:

  • 我在Repository类中命名方法的习惯
  • 【转载】Java程序设计入门 (二)
  • 四个好看的CSS样式表格
  • gbk页面ajax表单提交中文乱码的问题
  • android定时方法
  • mabatis使用疑问
  • selenium css(转)
  • 【Todo】Spark运行架构
  • mysql 行锁,表锁 测试
  • 信息安全-5:RSA算法详解(已编程实现)[原创]
  • 最近用Timer踩了一个坑,分享一下避免别人继续踩
  • SharePoint 2013 弹窗效果之本地HTML打开方式(二)
  • NoClassDefFoundError: org/aspectj/lang/JoinPoint
  • Java ResultSet的getRow()
  • 当接口被调用时使用Spring拦截器注入运行时数据
  • $translatePartialLoader加载失败及解决方式
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • CSS实用技巧
  • Debian下无root权限使用Python访问Oracle
  • Docker容器管理
  • export和import的用法总结
  • Git学习与使用心得(1)—— 初始化
  • JavaScript 基础知识 - 入门篇(一)
  • jquery ajax学习笔记
  • js正则,这点儿就够用了
  • miaov-React 最佳入门
  • React-redux的原理以及使用
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 构造函数(constructor)与原型链(prototype)关系
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 通信类
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (31)对象的克隆
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三) diretfbrc详解
  • (三分钟)速览传统边缘检测算子
  • (五)MySQL的备份及恢复
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • **PHP分步表单提交思路(分页表单提交)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET处理HTTP请求
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • /3GB和/USERVA开关
  • /bin/bash^M: bad interpreter: No such file or directory
  • /proc/stat文件详解(翻译)
  • @Transactional 详解