Java高性能编程--中间件(1)

本文深入探讨了分布式事务的挑战及其解决方案,包括基于数据库的XA/JTA协议、异步校验、可靠消息中间件等。重点介绍了RabbitMQ的核心概念,如Queue、Exchange、Bind,并分析了各种消息中间件如AMQP、MQTT、Kafka的特点。同时,讨论了消息中间件在解决系统耦合、流量削峰和数据异步处理中的作用,以及持久化、高可用和高可靠设计的重要性。
摘要由CSDN通过智能技术生成

中间件

RabbitMQ

核心的五个概念

  1. Queue:正真存储数据的地方
  2. Exchange:接受请求后,转存数据
  3. Bind:收到请求后存储到那里
  4. 消息生产者:发送数据的应用
  5. 消息消费者:取出数据处理的应用

前言–分布式事务的几种解决方案

  • 基于数据库XA/JTA协议的方式;需要数据库厂商的支持,Java组件有atomikos等;
  • 异步校对数据的方式 支付宝,微信支付 主动查询支付状态、对账单等形式;
  • 基于可靠消息(MQ)的解决方案 异步场景;通用性较强;拓展性高
  • TCC编程式解决方案 严选、阿里、蚂蚁金服自己封装的DTX

分布式事务的解决方案,业务针对性很强,重要的是思路

接口调用成功或者失败,都会产生分布式事务问题:

  1. 接口调用成功,订单系统数据库事务提交失败,运单系统没有回滚,产生数据;
  2. 接口调用超时,订单系统数据库事务回滚,运单系统接口继续执行,产生数据;
    以上两种情况,都会导致数据不一致问题。

实现分布式事务的5个步骤
在这里插入图片描述

步骤1-可靠消息生产-记录消息发送
在这里插入图片描述

步骤2-可靠消息生产-修改消息发送状态

利用Rabbitmq发布确认机制(confirm)
开启确认发布确认机制后,MQ准确受理消息返回回执。

步骤3-可靠消息处理-正常处理
开启手动ACK模式。由消费者控制消息的重发/清除/丢弃
幂等性。防止重复处理,一次用户操作,只应对一次数据处理
在这里插入图片描述

一定要记录该条消息的处理次数,防止重发多次,导致死循环(redis内存数据库记录每条消息的处理次数)

生产环境,重要数据出现异常,人工干预
如果不给回复,就等这个consumer断开连接后,mq-server会继续推送

步骤4-可靠消息处理-消息丢弃
消费者处理失败,直接丢弃或者转移到死信队列(DLQ)
重试次数过多,消息内容格式错误等情况,通过线上预警机制通知运维人员。

优缺点
优点:
通用性很强
扩展性强
方案成熟

缺点:
1.基于消息中间件,只适合异步场景
2.消息处理会有延迟,需要业务上能够容忍

尽量避免分布式事务
尽量将非核心事务做成异步

分布式事务解决方案的理论依据
CAP理论
BASE理论
2PC协议
3PC协议
Paxos算法
Raft一致性协议

分布式消息中间件设计专题

单体架构
在这里插入图片描述

分布式架构
在这里插入图片描述

系统间耦合度太高
通过消息中间件解耦

在这里插入图片描述

消息中间件概述
什么是消息中间件

  1. 利用高效可靠的消息传递机制进行平台无关的数据交流
  2. 并基于数据通信来进行分布式系统的集成
  3. 通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信

消息中间件的应用场景
跨系统数据传递、高并发流量削峰、数据异步处理等

常用的消息中间件
ActiveMQ RabbitMQ Kafka RocketMQ

消息中间件核心设计
本质
一种具备接收请求、保存数据、发送数据等功能的网络应用
和一般网络应用程序的区别是它主要负责数据的接收和传递,所以性能一般高俞普通程序

5大核心组成
协议:计算机之间通信时共同遵循的一组约定,都遵循相同的约定,计算机之间才能相互交流。
是对数据格式和计算机之间交换数据时必须遵循的规则的正式描述
协议三要素

  1. 语法:及数据与控制信息的结构和格式
  2. 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应
  3. 时序(同步):即事件实现顺序的详细说明

http协议三要素举例
语法:http规定了请求报文和响应报文的具体格式
语义:客户端总动发起的操作成为请求
时序:一个请求对应着一个响应

消息中间件常用的协议:OpenWire 、AMQP、MQTT、Kafka、OpenMessage

为什么消息中间件不直接使用Http协议?
内容多,格式复杂(),中间件需要高性能,简洁
Http短链接,不利于消息中间件长期获取信息的需求

AMQP协议(RabbitMQ,active MQ)
AMQP是高级消息队列协议 04年摩根大通公司联合其他公司共同设计
特性:事务支持,持久化设计,出生在金融行业,在可靠性消息处理上具备天然的优势。

MQTT协议
MQTT消息队列遥感传输 是IBM开发的一个即时通讯协议,物联网系统架构中重要组成部分。
特性:
轻量、结构简单、传输快、没有事务支持,没有持久化相关设计
适用场景:
适用于计算能力有限,低带宽,网络不稳定的场景。

Open Message协议(Apache RocketMQ)
OpenMessage是近一两年由阿里发起,与雅虎、滴滴出行、Streamlio等公司共同参与创立的分布式消息中间件、流处理领域的应用开发标准。是国内首个在全球范围内发起的分布式消息领域国际标准。
特性
结构简单、解析快、有事务设计、有持久化设计

Kafka协议(开发出来就是用于日志处理)
kafka协议是基于TCP的二进制协议。消息内部是通过长度来分隔,由一些基本数据类型组成。

特性
结构简单、解析快、无事务设计、由持久化设计

持久化

持久化是什么?
简单来说就是将数据存入磁盘,而不是存在内存中随服务器重启而消失。使数据能够永久保存叫做持久化。

持久化机制
消息分发机制
高可用设计
高可靠设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值