首页 > 编程知识 正文

什么是中间件技术(tuxedo中间件)

时间:2023-05-04 07:22:45 阅读:69168 作者:2874

消息中间件(MQ )的定义实际上没有标准定义,一般认为消息中间件属于分布式系统的一个子系统,关注数据的发送和接收,利用高效可靠的异步消息收发机制进行分布

系统中的其馀各个子系统都是集成的。

一些关键字:

高效:消息处理速度快。

可靠:典型的消息中间件包括消息持久化机制和其他机制,以防止消息丢失。

33558www.Sina.com/:1:提交单个请求后,您不必等待返回,您可以随时发送下一个请求,也就是说,您不必等待。

总之,消息中间件不生产消息,而是消息的搬运工。

为什么要使用消息中间件? 想想电商的场景吧。 用户下单后,需要调用库存系统减少库存,然后调用物流系统发货。 如果事务处理、库存和物流属于系统,则为

是接口呼叫。 但是随着系统的发展,各个模块越来越庞大,业务逻辑越来越复杂,必然需要进行服务化和业务分割。 此时需要考虑这些系统

如何相互作用,一般的处理方法是实现远程处理模块恢复(RPC ),具体来说是双字节、SpringCloud等。 系统继续发展,一笔交易后续可能需要调用几十个连接

用嘴执行业务。 例如风力发电系统、邮件服务等。 此时,为了解决问题,消息中间件必须出现。

所以,消息中间件主要解决分布式系统之间的消息传递,为分布式系统中的其他子系统提供松散耦合的体系结构,同时还有以下好处。

低耦合

:使用消息中间件间接通信,无论程序还是模块。

异步通信功能:在子系统之间无需等待自己的逻辑即可充分运行。

缓冲能力:消息中间件就像一个巨大的蓄水池,存储大量高峰请求并在后台缓慢处理,对秒杀业务尤为重要。

可扩展性—通过不断向群集添加服务,缓解用户不断增长的并发访问压力和不断增长的数据存储需求。 像弹簧挂东西一样使用

房子多,长一点,用户少,缩小一点。 衡量体系结构是否可伸缩的主要标准是能否在多个服务上构建群集

容易向集群添加新服务器。 加入新服务器后,能否提供与原始服务器无差异的服务。 集群中可以容纳的服务器总数有限制吗?

可扩展性:主要标准是向网站添加新业务产品时,是否能够透明地影响现有产品、无任何更改或在很少更改现有业务功能的情况下联机

新产品。 例如,用户购买电影票的APP应用,现在增加了购买铁血战士门票后,随机抽取用户进行异形限定周边的功能。 如何避免更改用户购买

在票证功能的基础上添加此功能。 熟悉设计模式的学生应该很眼熟。 这是设计模式中开关原则(对扩展开放,对修改封闭)的体系结构层面的原则。

和RPC有什么区别? RPC和消息中间件的场景差异主要在于“相关性”和“同步性”。

异步

例如,交易系统不应该依赖SMS服务,因为SMS通知服务作为交易的一部分是不必要的,不影响订单过程且不是很依赖。 RPC呼叫时为邮件通知服

整个业务停止。 这是由于依赖性,但消息中间件没有这种依赖性。

消息中间件出现后,对于交易场景,可能会调用库存中心等系统执行业务,然后发布存储在消息中间件中的消息。 就像发短信一样

知识服务、数据统计服务等依赖于消息中间件来消耗这种消息,从而完成自己的业务逻辑。

依赖性

RPC方案是一种典型的同步方案,使远程呼叫类似于本地呼叫。 中间件方式是异步方式。

消息中间件的使用场景是什么? 异步处理方案说明:用户注册后,需要发送注册邮件和注册邮件。 传统的做法有两种1 .串行方式2 .并行方式。

串行方式:向数据库写入注册信息成功后,发送注册邮件,发送注册邮件。 所有这三个任务完成后,返回客户端。

并行方式:向数据库写入注册信息成功后,在发送注册邮件的同时发送注册邮件。 完成这三项任务后,返回客户端。 与串行的不同之处在于

行的方式可以提高处理时间。

假设三个业务节点分别使用50毫秒,而不考虑其他开销(如网络),则串行时间可能为150毫秒,并行时间可能为100毫秒。

总结:正如以上情况所述,传统系统的性能(并发量、吞吐量、响应时间)存在瓶颈。 怎么解决这个问题?

部署消息队列是异步处理的,而不是必需的业务逻辑。

根据上述约定,用户的响应时间相当于注册信息写入数据库的时间,即50毫秒。 注册邮件,发送邮件并写入消息队列后,会直接回复,所以会写入

由于消息队列速度快且几乎可以忽略,因此用户的响应时间可能为50毫秒。 因此,体系结构更改后,系统吞吐量提高到每秒20QPS。 串行比3倍,比

并行地增加了两倍。

取消合并APP应用产品的方案说明:用户下单后,订单系统必须通知库存系统。 传统的做法是订单系统调用库存系统的接口。

传统机型的缺点:

如果无法访问库存系统,订单库存减少将失败,并且

订单失败;

订单系统与库存系统耦合;

如何解决以上问题呢?引入应用消息队列后的方案

订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。

库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。

假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了,实现订单系统与
库存系统的应用解耦。

流量削峰

流量削峰也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。

应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列:可以控制活动的人
数;可以缓解短时间内高流量压垮应用。

用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面;秒杀业务根据消息队
列中的请求信息,再做后续处理。

日志处理

日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。架构简化如下:

日志采集客户端:负责日志数据采集,定时写入Kafka队列

Kafka消息队列:负责日志数据的接收,存储和转发

日志处理应用:订阅并消费kafka队列中的日志数据

消息通讯

消息通讯是指消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。

点对点通讯:客户端A和客户端B使用同一队列,进行消息通讯。

聊天室通讯:客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果。

消息中间件的编年史

常见的消息中间件比较 ActiveMQRabbitMQRocketMQKafka性能6000+万级(12000+)十万级百万级消息持久化支持支持支持支持多语言支持支持支持很少支持社区活跃度高高中高支持协议多(JMS,AMQP…… )多(AMQP,STOMP,MQTT…… )自定义协议自定义协议优点成熟,已经在很多公司得到应用。较多的文档。各种协议支持较好,有多个语言的成熟客户端。性能较好,管理界面较丰富,在互联网公司也有较大规模的应用,有多个语言的成熟客户端。模型简单,接口易用。在阿里有大规模应用。分布式系统,性能很好,版本更新很快。天生分布式,性能最好,所以常见用于大数据领域。缺点性能较弱。缺乏大规模吞吐的场景的应用,有江河日下之感。内部机制很难了解,也意味很难定制和掌控。集群不支持动态扩展。文档少,支持的语言较少。运维难度大,偶尔有数据混乱的情况,对ZooKeeeper强依赖。多副本机制下对带宽有一定的要求。

如果一般的业务系统要引入 MQ,怎么选型:

用户访问量在ActiveMQ的可承受范围内,而且确实主要是基于解耦和异步来用的,可以考虑ActiveMQ,也比较贴近Java工程师的使用习惯,但是
ActiveMQ现在停止维护了,同时ActiveMQ并发不高,所以业务量一定的情况下可以考虑使用。

RabbitMQ作为一个纯正血统的消息中间件,有着高级消息协议AMQP的完美结合,在消息中间件中地位无可取代,但是erlang语言阻止了我们去深
入研究和掌控,对公司而言,底层技术无法控制,但是确实是开源的,有比较稳定的支持,活跃度也高。

对自己公司技术实力有绝对自信的,可以用RocketMQ。

所以中小型公司,技术实力较为一般,技术挑战不是特别高,用ActiveMQ、RabbitMQ 是不错的选择;大型公司,基础架构研发实力较强,用RocketMQ
是很好的选择
;如果是大数据领域的实时计算、日志采集等场景,用Kafka是业内标准的,绝对没问题,社区活跃度很高,几乎是全世界这个领域的事实性规范。

整体上来看,使用文件系统的消息中间件(kafka、rokcetMq)性能是最好的,所以基于文件系统存储的消息中间件是发展趋势,从存储方式和效
率来看文件系统>KV存储>关系型数据库。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。