架构思维成长系列教程(四)- “消息”如何给复杂系统解耦

背景

大型互联网系统,业务逻辑较为复杂,或者由于海量、高并发等场景增加了技术架构的复杂性,这时候需要对复杂系统做解耦,这里就要用到消息中间件来给系统做解耦。

内容

消息中间件用法

我们先了解几个概念:

耦合性(Coupling):也叫耦合度,是对模块间关联程度的一个度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。

模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。一般来说,模块间联系越多,其耦合性越强,同时表明其独立性越差。

软件设计中通常用耦合度和内聚度,作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合

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

消息队列主要由以下作用:异步处理、流量削峰、应用解耦

  • 异步处理。生产端不需要等待消费端响应,直接返回,提高了响应时间和吞吐量。
  • 流量削峰。打平高峰期的流量,消费端可以根据自己的速度处理,同时也无需在高峰期增加太多资源,提高资源利用率。
  • 应用解耦。生产端和消费端不需要相互依赖。

应用场景

1. 异步处理:

场景说明:用户下订单后,需要发邮件和短信进行确认。传统的做法有两种,一是串行的方式,二是并行的方式。

  • a.串行方式:将订单信息写入数据库后,发送邮件,再发送短信,以上三个任务全部完成后才返回给客户端。这里有一个问题是,邮件、短信并不是必须的,它只是一个通知,而这种做法让客户端等待没有必要等待的事件。
  • b.并行方式:将订单信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成后,返回给客户端,并行的方式能提高处理的时间。

假设三个业务节点分别使用 50ms,串行方式使用时间 150ms,并行使用时间 100ms。虽然并行已经提高的处理时间,但是,前面说过,邮件和短信对用户正常使用网站没有任何影响,客户端没有必要等待其发送完成才显示下单成功,应该是写入数据库后就返回。

同步方式

如果采用一般的同步方式处理,系统性能会很慢。

线程池-异步方式
  • c.消息队列
消息中间件-异步方式

引入消息队列后,把发送邮件,短信等不是必须的业务逻辑,所以可以进行异步处理。

由此可以看出:引入消息队列后,用户的响应时间就等于写入数据库的时间+写入消息队列的时间,引入消息队列后处理后,响应时间是串行的 3 倍,是并行的 2 倍。

2. 应用解耦:

场景说明:某宝双 11 购物狂欢节,用户下单后,订单系统需要通知库存系统,做锁库存操作,传统的做法就是订单系统调用库存系统的接口。

下单异步处理

这种做法有一个缺点:当库存系统出现故障时,订单就会失败。订单系统和库存系统高耦合,解决的办法是引入消息队列。

  • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单。
  • 下单成功。库存系统订阅下单的消息,获取下单消息,进行库操作。

如果库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失。

3. 流量削峰:

流量削峰,一般在秒杀系统中应用广泛。

场景说明:某东购物网站秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,可以在应用前端加入消息队列。

流量削峰

作用:

  • 可以控制活动人数,超过一定阀值的订单直接丢弃。
  • 可以缓解短时间的高流量压垮系统。

改造后的处理流程如下:

用户的请求,服务器收到之后,首先写入消息队列,加入消息队列长度超过最大值,则直接抛弃用户请求或跳转到错误页面。

秒杀业务根据消息队列中的请求信息,再做后续处理。

最后:

以上,介绍了通过消息中间件的方式,给复杂系统解耦,通过消息中间件的引入,还可以帮助系统提升响应能力、提高可用性。

消息中间件是当今架构技术中很常用的一种工具,希望大家能够花时间去研究和实践。

 

上一章教程

架构思维成长系列教程(三)- “缓存”如何应对亿级流量峰值

该系列教程

架构思维成长系列教程

我的专栏

 

 

至此,全部介绍就结束了

 

 

-------------------------------

-------------------------------

 

我的CSDN主页

关于我(个人域名,更多我的信息)

我的开源项目集Github

 

期望和大家一起学习,一起成长,共勉,O(∩_∩)O谢谢

欢迎交流问题,可加个人QQ 469580884,

或者,加我的群号 751925591,一起探讨交流问题

不讲虚的,只做实干家

Talk is cheap,show me the code

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺佬湿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值