消息中间件

消息中间件设计思路

偶尔善良 提交于 2020-01-18 04:26:17
文章目录 五大核心组成 协议 AMQP MQTT OpenMessage协议 Kafka协议 持久化 消息分发 高可用 主从共享 主从同步 多主集群同步部署 多主集群转发部署模式 Master-Slave 和 Broker-Cluster 的组合 高可靠 五大核心组成 协议 持久化机制 消息分发机制 高可用设计 高可靠设计 协议 三要素 语法 语义 时序(同步) 消息中间件常见协议:OpenWire、AMQP、MQTT、Kafka、OpenMessage 为什么消息中间件不用 HTTP 协议 —— HTTP 太大,并且是短连接 AMQP 高级消息队列协议即 Advanced Message Queuing Protocol(AMQP) 特性: 支持事务、持久化,可靠性好 MQTT MQTT (Message Queuing Telemetry Transport) 消息队列遥测传输是 IBM 开发的一个即时通讯协议,物联网系统架构中的重要组成部分。 特性: 轻量、结构简单、传输快、没有事务支持、没有持久化相关设计 应用场景: 适用于计算能力有限、低带宽、网络不稳定的场景 OpenMessage协议 OpenMessaging 是近一两年由阿里发起,与雅虎、滴滴出行、StreamIio等公司共同参与创立的分布式消息中间件、流处理领域的应用开发标准。是 国内

分布式之消息队列

旧巷老猫 提交于 2020-01-16 10:58:21
1、为什么要使用消息队列? 主要有三个原因: 解耦、异步、削峰 (1)解耦 传统模式: 传统模式的 缺点 : 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 中间件模式: 中间件模式的的 优点 : 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。 (2)异步 传统模式: 传统模式的 缺点 : 一些非必要的业务逻辑以同步的方式运行,太耗费时间。 中间件模式: 中间件模式的的 优点 : 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度 (3)削峰 传统模式 传统模式的 缺点 : 并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常 中间件模式: 中间件模式的的 优点 : 系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。 2、使用了消息队列会有什么缺点? 分析 :一个使用了MQ的项目,如果连这个问题都没有考虑过,就把MQ引进去了,那就给自己的项目带来了风险。我们引入一个技术,要对这个技术的弊端有充分的认识,才能做好预防。 要记住,不要给公司挖坑! 回答 :回答也很容易,从以下两个个角度来答 系统可用性降低 :你想啊,本来其他系统只要运行好好的,那你的系统就是正常的。现在你非要加个消息队列进去

消息中间件介绍

纵饮孤独 提交于 2020-01-15 01:15:30
题目 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景? 消息中间件各种面试题: 消息中间件面试题:消息丢失怎么办? 消息中间件面试题:消息队列的优缺点,区别 消息中间件面试题:消息中间件的高可用 消息中间件面试题:如何保证消息的顺序性 消息中间件面试题:如何保证消息不被重复消费 消息中间件面试题:如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时呢? 消息中间件面试题:如果让你写一个消息队列,该如何进行架构设计? 面试题剖析 为什么使用消息队列 先说一下消息队列常见的使用场景吧,其实场景有很多,但是比较核心的有 3 个:解耦、异步、削峰。 解耦 看这么个场景。A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃… mq-1 在这个场景中,A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。A 系统要时时刻刻考虑 BCDE 四个系统如果挂了该咋办?要不要重发,要不要把消息存起来?头发都白了啊! 如果使用 MQ,A 系统产生一条数据,发送到 MQ 里面去,哪个系统需要数据自己去 MQ 里面消费

腾讯自研万亿级消息中间件TubeMQ为什么要捐赠给Apache?

安稳与你 提交于 2020-01-11 05:46:32
导语 | 近日,云+社区技术沙龙“腾讯开源技术”圆满落幕。本次沙龙邀请了多位腾讯技术专家围绕腾讯开源与各位开发者进行探讨,深度揭秘了腾讯开源项目TencentOS tiny、TubeMQ、Kona JDK、TARS以及MedicalNet。本文是对张国成老师演讲的整理。 本文要点: Message Queue 的原理和特点; TubeMQ相关实现原理及使用介绍; TubeMQ后续的发展和探讨。 一、Message Queue 简介 对于Message Queue(以下简称MQ),Wiki百科上的定义指:不同进程之间或者相同进程不同线程之间的一种通讯方式,它是一种通讯方式。 那我们为什么要采用MQ呢?这是由MQ的特点来决定的。第一是因为它可以整合多个不同系统共同协作;第二是它可以解耦,进行数据传递和处理;第三是它可以做峰值的缓冲处理,我们平常接触到的像Kafka、RocketMQ、Pulsar等基本上也都有这样的特点。 那作为大数据场景下的MQ又有什么特点呢?从我个人的理解来说,就是 高吞吐低延时,系统尽可能地稳定,成本尽可能地低,协议也不需要特别地复杂,特别是水平扩展能力要尽可能的高。 因为像海量数据基本上都是到百亿、千亿、万亿,比方说我们自己的生产环境可能一个月、一年的时间就会翻一番,如果没有横向的扩展能力,系统就很容易出现各种问题。 二、TubeMQ实现原理及使用介绍 1

Spring Boot2.X整合消息中间件RabbitMQ原理简浅探析

半世苍凉 提交于 2020-01-10 09:35:00
目录 1、简单概述RabbitMQ重要作用 2、简单概述RabbitMQ重要概念 3、Spring Boot整合RabbitMQ 前言 RabbitMQ是一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。消息中间件最主要的作用还是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC的调用等等。 @ 1、简单概述RabbitMQ重要作用 首先谈谈作用,你知道它有啥用才会有兴趣去知道它的重要概念,走进它,亲近它!上面已经提过了RabbitMQ主要是用来实现程序的异步和解耦。这里也主要讲解它是如何做到异步和解耦的。 1.1、异步 对比一下使用消息队列实现异步的好处: 1.2、解耦 至于解耦只能靠自己的对耦合的理解,这里就以文字的形式概述: 以上面消息队列实现异步场景分析:主线程依旧处理耗时低的入库操作,然后把需要处理的消息写进消息队列中,这个写入耗时可以忽略不计,非常快,然后,独立的发邮件子系统,和独立的发短信子系统,同时订阅消息队列,进行单独处理。处理好之后,向队列发送ACK确认,消息队列整条数据删除。这个流程也是现在各大公司都在用的方式,以SOA服务化各个系统

手把手带你了解消息中间件(3)——RocketMQ

蓝咒 提交于 2020-01-10 00:21:31
一、RocketMQ简介   RocketMQ作为一款纯 java 、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。 二、RocketMQ架构   如图所示为RocketMQ基本的部署结构,主要分为NameServer集群、Broker集群、Producer集群和Consumer集群四个部分。   Broker在启动的时候会去向NameServer注册并且定时发送心跳,Producer在启动的时候会到NameServer上去拉取Topic所属的Broker具体地址,然后向具体的Broker发送消息 1、NameServer   NameServer的作用是Broker的注册中心。   每个NameServer节点互相之间是独立的,没有任何信息交互,也就不存在任何的选主或者主从切换之类的问题,因此NameServer是很轻量级的。单个NameServer节点中存储了活跃的Broker列表(包括master和slave),这里活跃的定义是与NameServer保持有心跳。 2、Topic、Tag、Queue、GroupName   Topic 与 Tag 都是业务上用来归类的标识,区分在于 Topic 是一级分类,而 Tag 可以理解为是二级分类 1) Topic(话题)   Topic是生产者在发送消息和消费者在拉取消息的类别

消息中间件之ActiveMQ

旧街凉风 提交于 2020-01-08 13:51:42
什么是消息中间件? 消息中间件是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据 通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程之间的通信。 消息中间件能做什么? 消息中间件主要解决的就是分布式系统之间消息传递的问题,它能够屏蔽各种平台以及协议之间的特性,实现引用程序之间的协同。举个非常简单的例子,就拿一个电商平台的注册功能来简单分析下,用户注册这一个服务,不单单只是insert一条数据到数据库里面就完事了,还需要发送激活邮件、发送新人红包或者积分、发送营销短信等一系列操作。假如说这里面的每一个操作,都需要消耗1s,那么整个注册过程就需要耗时4s才能响应给用户。 但是我们从注册这个服务可以看到,每一个子操作都是相对独立的,同时,基于领域划分以后,发送激活邮件、发送营销短信、赠送积分及红包都属于不同的子域。所以我们可以对这些子操作进行来实现异步化执行,类似于多线程并行处理的概念。如何实现异步化呢?用多线程能实现吗?多线程当然可以实现,只是,消息的持久化、消息的重发这些条件,多线程并不能满足。所以需要借助一些开源中间件来解决。而分布式消息队列就是一个非常好的解决办法,引入分布式消息队列以后,架构图就变成这样了(下图是异步消息队列的场景)。通过引入分布式队列,就能够大大提升程序的处理效率,并且还解决了各个模块之间的耦合问题

腾讯自研万亿级消息中间件TubeMQ为什么要捐赠给Apache?

家住魔仙堡 提交于 2020-01-08 12:01:14
导语 | 近日,云+社区技术沙龙“腾讯开源技术”圆满落幕。本次沙龙邀请了多位腾讯技术专家围绕腾讯开源与各位开发者进行探讨,深度揭秘了腾讯开源项目TencentOS tiny、TubeMQ、Kona JDK、TARS以及MedicalNet。本文是对张国成老师演讲的整理。 本文要点: Message Queue 的原理和特点; TubeMQ相关实现原理及使用介绍; TubeMQ后续的发展和探讨。 一、Message Queue 简介 对于Message Queue(以下简称MQ),Wiki百科上的定义指:不同进程之间或者相同进程不同线程之间的一种通讯方式,它是一种通讯方式。 那我们为什么要采用MQ呢?这是由MQ的特点来决定的。第一是因为它可以整合多个不同系统共同协作;第二是它可以解耦,进行数据传递和处理;第三是它可以做峰值的缓冲处理,我们平常接触到的像Kafka、RocketMQ、Pulsar等基本上也都有这样的特点。 那作为大数据场景下的MQ又有什么特点呢?从我个人的理解来说,就是 高吞吐低延时,系统尽可能地稳定,成本尽可能地低,协议也不需要特别地复杂,特别是水平扩展能力要尽可能的高。 因为像海量数据基本上都是到百亿、千亿、万亿,比方说我们自己的生产环境可能一个月、一年的时间就会翻一番,如果没有横向的扩展能力,系统就很容易出现各种问题。 二、TubeMQ实现原理及使用介绍 1

Python与消息中间件

耗尽温柔 提交于 2020-01-06 14:46:10
课程介绍: 分布式大数据处理系统架构中,消息中间件是必不可少的组件,本课程主要讲解如何基于Python和常用消息中间件快速开发大数据处理平台,并且结合实际应用场景,从零开始搭建一套完整的分布式日志分析告警系统。 课程目录: 01-消息中间件初识.mp4 02-常见消息中间件比较.mp4 03-消息中间件常见概念理解.mp4 04-Redis常用操作和命令.mp4 05-Python Redis消息队列开发.mp4 06-Redis安装与配置.mp4 07-Redis简介与应用场景.mp4 08-Python Kafka消息队列开发.mp4 09-Kafka相关概念解释.mp4 10-Kafka安装与配置.mp4 11-Kafka简介与应用场景.mp4 12-将异常日志事件写入Redis队列.mp4 13-将Redis中事件取出发送邮件告警.mp4 14-从kafka中取出日志并进行实时解析.mp4 15-采集日志并且写入kafka队列.mp4 16-日志处理告警平台架构详解.mp4 下载地址: Python与消息中间件 来源: https://www.cnblogs.com/lijm1266/p/12154497.html

Python与消息中间件

隐身守侯 提交于 2020-01-06 01:26:04
课程介绍: 分布式大数据处理系统架构中,消息中间件是必不可少的组件,本课程主要讲解如何基于Python和常用消息中间件快速开发大数据处理平台,并且结合实际应用场景,从零开始搭建一套完整的分布式日志分析告警系统。 课程目录: 01-消息中间件初识.mp4 02-常见消息中间件比较.mp4 03-消息中间件常见概念理解.mp4 04-Redis常用操作和命令.mp4 05-Python Redis消息队列开发.mp4 06-Redis安装与配置.mp4 07-Redis简介与应用场景.mp4 08-Python Kafka消息队列开发.mp4 09-Kafka相关概念解释.mp4 10-Kafka安装与配置.mp4 11-Kafka简介与应用场景.mp4 12-将异常日志事件写入Redis队列.mp4 13-将Redis中事件取出发送邮件告警.mp4 14-从kafka中取出日志并进行实时解析.mp4 15-采集日志并且写入kafka队列.mp4 16-日志处理告警平台架构详解.mp4 下载地址: Python与消息中间件 来源: https://www.cnblogs.com/lijm1266/p/12154497.html