Java生鲜电商平台-消息队列如何给复杂系统解耦(小程序/APP)
Java生鲜电商平台-消息队列如何给复杂系统解耦(小程序/APP)
说明:Java生鲜电商平台-消息队列如何给复杂系统解耦,大家在做程序开发的时候,常用的消息队列是:RabbitMQ,Kakfa之类的,本文只是介绍下消息队列给复杂系统解耦的方式.
大型互联网系统,业务逻辑较为复杂,或者由于海量、高并发等场景增加了技术架构的复 杂性,这时候需要对复杂系统做解耦,这里就要用到消息中间件来给系统做解耦。
首先,我们来了解几个概念。
耦合性(Coupling),也叫耦合度,是对模块间关联程度的一个度量。耦合的强弱取决于模 块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块 之间的依赖关系,包括控制关系、调用关系、数据传递关系。一般来说,模块间联系越多,其 耦合性越强,同时表明其独立性越差。软件设计中通常用耦合度和内聚度,作为衡量模块独立 程度的标准。划分模块的一个准则就是高内聚低耦合。
消息中间件,是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信 来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进 程间的通信。消息队列主要由以下作用:异步处理、流量削峰、应用解耦。
异步处理。生产端不需要等待消费端响应,直接返回,提高了响应时间和吞吐量。
流量削峰。打平高峰期的流量,消费端可以根据自己的速度处理,同时也无需在高峰期增 加太多资源,提高资源利用率。
应用解耦。生产端和消费端不需要相互依赖。 下面分别对消息中间件的应用场景做介绍: 一、异步处理
场景说明:用户下订单后,需要发邮件和短信进行确认,传统的做法有两种,一是串行的方 式;二是并行的方式。
1) 串行方式:将订单信息写入数据库后,发送邮件,再发送短信,以上三个任务全部完成 后才返回给客户端。 这里有一个问题是,邮件、短信并不是必须的,它只是一个通知,而这种做法让客户端等待没有必要等待的事件。
2) 并行方式:将订单信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成 后,返回给客户端,并行的方式能提高处理的时间。
假设三个业务节点分别使用 50ms,串行方式使用时间 150ms,并行使用时间 100ms。虽然并行已经提高的处理时间,但是,前面说过,邮件和短信对用户正常使用网站没有任何影响, 客户端没有必要等待其发送完成才显示下单成功,应该是写入数据库后就返回。
如果采用一般的同步方式处理,系统性能会很慢。
异步-线程池
消息中间件-异步方式
引入消息队列后,把发送邮件,短信等不是必须的业务逻辑,进行异步处理。
由此可以看出,引入消息队列后,用户的响应时间就等于写入数据库的时间+写入消息队列 的时间,引入消息队列后处理后,响应时间是串行的 3 倍,是并行的 2 倍。
二、应用解耦
场景:某宝双 11 购物狂欢节,用户下单后,订单系统需要通知库存系统,做锁库存操作, 传统的做法就是订单系统调用库存系统的接口。
下单异步处理
- 这种做法有一个缺点:当库存系统出现故障时,订单就会失败。订单系统和库存系统高耦 合,解决的办法是引入消息队列。
- 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单 下单成功。
- 库存系统:订阅下单的消息,获取下单消息,进行库操作。
- 如果库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失。
三、流量削峰
流量削峰,一般在秒杀系统中应用广泛。
场景:某东购物网站秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题, 可以在应用前端加入消息队列。
作用:
1) 可以控制活动人数,超过一定阀值的订单直接丢弃。
2) 可以缓解短时间的高流量压垮系统。改造后的处理流程如下:
用户的请求,服务器收到之后,首先写入消息队列,加入消息队列长度超过最大值,则直 接抛弃用户请求或跳转到错误页面。
秒杀业务根据消息队列中的请求信息,再做后续处理。
以上,介绍了通过消息中间件的方式,给复杂系统解耦,通过消息中间件的引入,还可以 帮助系统提升响应能力、提高可用性,消息中间件是当今架构技术中,很常用的一种工具,希 望大家能够花时间去研究和实践。
结语
复盘与总结.
总结:
做Java生鲜电商平台的互联网应用,无论是生鲜小程序还是APP,消息队列如何给复杂系统解耦架构设计是非常重要的,本文只是起一个抛砖引玉的作用,
希望用生鲜小程序的搭建J消息队列如何给复杂系统解耦架构设计实战经验告诉大家一些实际的项目经验,希望对大家有用.
QQ:137071249
共同学习QQ群:793305035