中间件1.1.1-分布式消息中间件设计篇
什么是分布式消息中间件
单体架构:
缺点: 如果在多服务器中,每修改一部分小功能时,都要每个更新一遍。
分布式系统架构:
能用于高并发的场景,一个请求后台多系统协同处理,后台系统相互远程调用, 所以需要消息中间件来处理。
消息中间件概述
什么是消息中间件
利用高效可靠的消息传递机制进行平台无关的数据交流;并基于数据通信来进行分布式系统的集成;通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信;
消息中间件的应用场景
跨系统数据传递、高并发流量削峰、数据异步处理…等等
常用的消息中间件
ActiveMQ
RabbitMQ
Kafka
RocketMQ
消息中间件核心设计
本质
一种具备接收请求、保存数据、发送数据等功能的网络应用。和一般网络应用程序的区别是它主要负责数据的接收和传递,所以性能一般都高于普通程序。
5大核心组成:
协议
持久化机制
消息分发机制
高可用设计
高可靠设计
协议
什么是协议
协议是计算机之间通信时共同遵从的一组约定,都遵守相同的约定,计算机之间才能相互交流。是对数据格式和计算机之间交换数据时必须遵守的规则的正式描述。
协议三要素:
1)语法:即数据与控制信息的结构或格式;
2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应
3)时序(同步):即事件实现顺序的详细说明
Http协议三要素举例:
语法:http规定了请求报文和响应报文的具体格式。
语义:客户端主动发起的操作称为请求;
时序:一个请求对应一个响应
消息中间件常用的协议: OpenWire、AMQP、MQTT、 Kafka、 OpenMessage
为什么消息中间件不直接使用Http协议?
每次传的信息比较多
AMQP协议
AMQP( Advanced Message Queuing Protocol.)是高级消息队列协议04年 Jpmorgan Chase(摩根大通集团)联合其他公司共同设计。
特性
事务支持、持久化支持,出生金融行业,在可靠性消息处理上具备天然的优势。
用在: ActiveMQ、RabbitMQ
MQTT协议
MQTT( Message Queuing Telemetry Transport)消息队列遥测传输是IBM开发的一个即时通讯协议,物联网系统架构中的重要组成部分。
特性:
轻量、结构简单、传输快、没有事务支持、没有持久化相关设计口。
应用场景:
适用于计算能力有限、低带宽、网络不稳定的场景。
用在: ActiveMQ、RabbitMQ
OpenMessage协议
Open Messaging是近一两年由阿里发起,与雅虎、滴滴出行、 Streamlio等公司共同参与创立的分布式消息中间件、流处理领域的应用开发标准。
是国内首个在全球范围内发起的分布式消息领域国际标准。
特性:
结构简单、解析快、有事务设计、有持久化设计.
用在: RocketMQ
Kafka协议
Kafka协议是基于TCP的二进制协议。消息内部是通过长度来分隔,由一些基本数据类型组成。
特性:
结构简单、解析快、无事务设计、有持久化设计
用在: kafka
什么叫持久化?
简单来说就是将数据存入磁盘,而不是存在内存中随服务重启而消失,使数据能够永久保存叫做持久化。
MQ都支持文件系统持久化。
ActiveMQ支持数据库持久化(少数MQ)。
消息分发
为什么要有消息分发策略?
ActiveMQ | RabbitMQ | Kafka | RocketMQ | |
发布订阅 | 支持 | 支持 | 支持 | 支持 |
轮询分发 | 支持 | 支持 | 支持 | |
公平分发 | 支持 | 支持 | ||
重发 | 支持 | 支持 | 支持 | |
消息拉取 | 支持 | 支持 | 支持 | |
高可用机制
高可用性是指产品在规定的条件和规定的时刻或时间区间内处于可执行规定功能状态的能力。
当业务量大时,一台消息中间件服务器可能无法满足需求,所以需要消息中间件能够集群部署,来达到高可用的目的。
Master- Slave主从共享数据的部署方式
不同步数据,转发消费者的请求。
Master- Slave主从同步部署方式
多台服务器同步数据,消费者可以读某个服务器
Broker- Cluster多主集群同步部署方式
多台服务器同步数据,消费者可以读写某个服务器
Broker- Cluster多主集群转发部署方式
不同步数据,只同步每台服务器的数据地址,数据服务器可以向另一台转发请求。
缺点:一台服务器挂了,数据丢失。
Master-slave 与 Broker- Cluster结合
高可靠
高可靠性是指系统可以无故障地持续运行。比如一个系统从来不崩溃、报错,或者崩溃、报错的几率较低,那就是高可靠。
在高并发业务场景下,如果不能保证系统的高可靠,那造成的损失将会非常严重。
保证消息中间件的高可靠性,可以从以下几方面考虑:
消息传输可靠:通过协议来保证系统间数据解析的正确性。
消息存储可靠:通过持久化来保证消息的存储可靠性。
- 上一篇:
- 下一篇: 中间件1.2.1-ActiveMQ入门
每日一句
博客分组
标签云
- 最近综合
- 情绪巨婴是什么 12.18
- 普通蛋糕做法 05.31
- 玉米烤肠芝士面包做法 05.31
- Mysql安装教程 - 绿色版 06.18
- 我们学习知识为什么总是忘记呢?【学习金字塔】 05.12
- Typora开发版⽆法使⽤解决⽅法 05.04
- 为什么无知者越自信? -- 达克效应 05.10
- 马斯洛需求层次理论 04.29
- 随机综合
- Java学习总结(1.1.1) Java程序运行原理分析 03.17
- Java学习总结(1.3.1) Lock接口和其实现 04.03
- java 固定的范围内,按分辨率比例正确显示图片 04.11
- eclipse 快捷键大全_最有用快捷键整理 08.18
- 鸿蒙内核 04.29
- [vue]VUE的一些问题和解决 08.05
- 中间件1.2.4-ActiveMQ持久化原理和事务机制 04.29
- Java学习总结(1.1.3) 线程中止 03.17