消息系统的4大使用场景

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 消息系统的4大使用场景

为什么要使用消息系统

这是最开始的一种架构:

  1. 大量的请求到达Web网站时,我们可以通过Redis缓存减少数据库对数据的查询压力。但是对于大量的增、删、改等请求,Redis无法完成,所以需要一个专门的消息系统来“缓存”这些请求。
  2. 一些非法操作会同时发送海量的查询请求,这时如果Redis中没有对应的数据,则这些请求就会被转嫁到Mysql,Mysql会瞬间承受大量的查询压力,来不及将对应的数据发送到Redis中,直接导致数据库宕机。所以也需要一个消息系统来“缓存”这些请求。

所以我们就使用下面的架构缓解数据库压力

备注:Redis可以做消息系统,但是无法适应大量的消息存储,一旦内存不足,直接完蛋。

消息系统的应用场景

  1. 解耦合

如上图所示,如果没有消息系统的情况下,,Web网站会直接调用手机认证和邮箱认证的接口,如果认证系统调用方式或者接口发生变更,Web网站的相关代码也需要更改,并且重新打包编译部署启动,这段时间网站无法使用,是无法容忍的问题。


因此我们使用消息系统,采取下面的方式:

如上图使用了消息系统可以做到web服务和其他的服务之间的解耦合,如三方的接口/调用方式做了更改, 我们不需要修改web服务的代码,也不需要重新启动web服务,只需要修改消息系统中调用三方服务的代码即可。

  1. 异步处理

假设一个场景:

当我们注册账号时,需要获取短信验证码或者邮箱认证,我们获取到发送认证成功后才会返回发送成功信息,在这之前,我们需要耗费大量时间等待我们的操作是否成功,严重影响用户体验。


因此我们采用消息系统的异步处理的特性解决此问题

异步处理在会先返回结果后再执行发送信息,避免了用户长时间等待操作是否成功的通知。

  1. 流量削峰

如上图,当有了消息系统,可以短时间拦截大量的请求,形成消息队列,交给Mysql慢慢的执行(可以理解为 大坝:当洪水来临,拦截下来,慢慢放流)

  1. 消息通信

客户端A 和 B 进行通信时,必须双方同时在线才能通信,否则不行。

但是引入消息系统后,我们可以将A的“发送信息”存入到消息系统中,当B上线后再将存入消息系统的“发送信息”发送给他。公众号群发的消息也是用此实现的。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
20天前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现?
消息队列系统中的确认机制在分布式系统中如何实现?
|
2月前
|
消息中间件 存储 RocketMQ
MetaQ/RocketMQ 原理问题之在解耦场景中,消息队列工作的问题如何解决
MetaQ/RocketMQ 原理问题之在解耦场景中,消息队列工作的问题如何解决
|
2月前
|
消息中间件 监控 Java
使用Java实现高性能消息队列系统
使用Java实现高性能消息队列系统
|
3月前
|
消息中间件 存储 NoSQL
消息队列的对比及适配的应用场景
消息队列的对比及适配的应用场景
102 0
|
4月前
|
消息中间件 缓存 API
【后端面经】【消息队列】22 | 消息队列:消息队列可以用来解决什么问题?-03 扩展性+可用性+事件驱动思想
【5月更文挑战第8天】 本文探讨了扩展性、可用性和事件驱动的概念。扩展性方面,消息队列简化了新下游的接入,而同步调用需要复杂的协调。在保证高可扩展性和研发效率的设计中,若无法使用消息队列,可以提供一致性抽象来减轻接入负担。可用性上,消息队列只需确保消息发送,而同步调用需保证所有下游成功,更易出错。事件驱动是一种通过事件进行组件间通信的架构模式,具有低耦合、高扩展性和高可用性,适合处理复杂流程。结合SAGA的事件驱动方案能实现高级分布式事务管理,即使实时性稍弱,但能保证事务的异步和高效执行。
37 1
|
4月前
|
消息中间件 Kafka
消息队列 MQ:构建高效、可扩展的分布式系统
消息队列 MQ:构建高效、可扩展的分布式系统
|
消息中间件 存储 运维
消息队列与消息中间件概述:消息中间件核心概念与技术选型
消息队列是一个存放消息的容器,消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能、削峰、降低系统耦合性。
525 4
|
消息中间件 存储 前端开发
消息队列常见的使用场景
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩和最终一致性架构。 使用较多的消息队列有 RocketMQ,RabbitMQ,Kafka,ZeroMQ,MetaMQ
332 0
|
消息中间件 设计模式 Kafka
消息队列使用场景
说到消息中间件,我使用比较多的就是RabbitMQ。在分布式系统中,不同模块之间的通信,除了可以使用 RPC方式进行调用外,MQ也是另外一种方式,也是进程之间进行通信的一种方法。 消息队列:传递消息的队列。参与传递消息的双方称为生产者、消费者。生产者和消费者可以只有一个实例,也可以集群部署。
116 0