高仿sdk应用场景
本文为您介绍消息队列RocketMQ版的应用场景,以便您更好地判断如何在业务中使用消息队列RocketMQ版。 例如,针对一家互联网电商企业,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等。这些活动都对分布性系统中的各项微服务应用的处理性能带来很大的挑战。 消息队列RocketMQ版作为分布式系统中的重要组件,可用于应对这些挑战,例如解决应用的异步解耦。 下文先以用户注册为场景说明消息队列RocketMQ版如何实现以下功能:
最后,再以电商的秒杀场景和价格同步场景分别说明消息队列RocketMQ版所实现的削峰填谷和大规模机器的缓存同步。 传统处理 最常见的一个场景是用户注册后,需要发送注册邮件和短信通知,以告知用户注册成功。传统的做法有以下两种: 串行方式 串行方式下的注册流程如下图所示。 数据流动如下所述: 以上三个任务全部完成后,才返回注册结果到客户端,用户才能使用账号登录。 假设每个任务耗时分别为50 ms,则用户需要在注册页面等待总共150 ms才能登录。 您在注册页面填写账号和密码并提交注册信息,这些注册信息首先会被写入注册系统。 注册信息写入注册系统成功后,再发送请求至邮件通知系统。邮件通知系统收到请求后向用户发送邮件通知。 邮件通知系统接收注册系统请求后再向下游的短信通知系统发送请求。短信通知系统收到请求后向用户发送短信通知。 并行方式 并行方式下的注册流程如下图所示。 数据流动如下所述: 以上两个任务全部完成后,才返回注册结果到客户端,用户才能使用账号登录。 假设每个任务耗时分别为50 ms,其中,邮件和短信通知并行完成,则用户需要在注册页面等待总共100 ms才能登录。 用户在注册页面填写账号和密码并提交注册信息,这些注册信息首先会被写入注册系统。 注册信息写入注册系统成功后,再同时发送请求至邮件和短信通知系统。邮件和短信通知系统收到请求后分别向用户发送邮件和短信通知。 以下就注册场景中使用了消息队列RocketMQ版的效果进行说明。 异步解耦 对于用户来说,注册功能实际只需要注册系统存储用户的账户信息后,该用户便可以登录,后续的注册短信和邮件不是即时需要关注的步骤。 对于注册系统而言,发送注册成功的短信和邮件通知并不一定要绑定在一起同步完成,所以实际当数据写入注册系统后,注册系统就可以把其他的操作放入对应的消息队列RocketMQ版中然后马上返回用户结果,由消息队列RocketMQ版异步地进行这些操作。 数据流动如下所述: 用户在注册页面填写账号和密码并提交注册信息,这些注册信息首先会被写入注册系统。 注册信息写入注册系统成功后,再发送消息至消息队列RocketMQ版。消息队列RocketMQ版会马上返回响应给注册系统,注册完成。用户可立即登录。 下游的邮件和短信通知系统订阅消息队列RocketMQ版的此类注册请求消息,即可向用户发送邮件和短信通知,完成所有的注册流程。 用户只需在注册页面等待注册数据写入注册系统和消息队列RocketMQ版的时间,即等待55 ms即可登录。 异步解耦是消息队列RocketMQ版的主要特点,主要目的是减少请求响应时间和解耦。主要的适用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同时,由于使用了消息队列RocketMQ版,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦。 注册系统注册的流程中,用户入口在网页注册系统,通知系统在邮件系统,两个系统之间的数据需要保持最终一致。 普通消息处理 如上所述,注册系统和邮件通知系统之间通过消息队列进行异步处理。注册系统将注册信息写入注册系统之后,发送一条注册成功的消息到消息队列RocketMQ版,邮件通知系统订阅消息队列RocketMQ版的注册消息,做相应的业务处理,发送注册成功或者失败的邮件。 流程说明如下: 注册系统发起注册。 注册系统向消息队列RocketMQ版发送注册消息成功与否的消息。 2.1 消息发送成功,进入3。 2.2 消息发送失败,导致邮件通知系统未收到消息队列RocketMQ版发送的注册成功与否的消息,而无法发送邮件,最终邮件通知系统和注册系统之间的状态数据不一致,流程结束。 邮件通知系统收到消息队列RocketMQ版的注册成功消息。 邮件通知系统发送注册成功邮件给用户。 在这样的情况下,虽然实现了系统间的解耦,上游系统不需要关心下游系统的业务处理结果;但是数据一致性不好处理,如何保证邮件通知系统状态与注册系统状态的最终一致。 事务消息处理 此时,需要利用消息队列RocketMQ版所提供的事务消息来实现系统间的状态数据一致性。 |