一、场景引入,问题初现

很多读者期待的是先讲段理论、原理啥的,然而我的写文章的逻辑习惯性的是想将问题的背景引入,用真实的案例来寻寻渐进。

我的老上家是一家创业型的B2B方向建材互联网企业,从 0 到 1 组建了一支10 人的小型研发团队。在入职的第二天被告知要在一个半月内上线WEB网站和APP两个端项目,项目启动的时候我们就两个JAVA,我们商量着如何启动项目,如何快速进入开发,快速完成任务。最终我们选用了SpringBoot + Dubbo 架构来进行开发。一段时间没日没夜的加班,好不容易核心业务系统给做出来了,平时正常QA测试没发现什么大毛病,感觉性能还不错,一切都很完美。

然后系统就这么上线了,一开始业务复杂度低,用户规模小,系统上线一段时间,注册用户量 5万+,日活平均 1 千用户。

每天都有新的数据进入数据库的表中,就这么日积月累的,没想到数据规模居然慢慢吞吞增长到了单表几百万。

这个时候呢,看起来也没太大的毛病,就是有运营人员反应,文章推送功能反应比较慢,页面上的 loading 要转个 10 来分钟才消失。

这是为啥呢?

  • 推送的业务场景多样多表关联
  • 项目数据库还没有设计好索引,或者是设计了索引,但无奈负责该模块的小弟采用串行编码,导致整方法执行完,等待时间过长。

二、扬汤止沸,饮鸩止渴

一般碰到这种事情,一大堆代码性能问题,80%的工程师首先想到的大多是采用多线程进行编码。

后来仔细梳理现有业务场景,很多场景需要做消息的传递工作,这个时候就想着有什么方式能进行消息的传递工作,自然而然选择引入消息队列。

三、追本溯源,治标治本

考虑消息中间件的引入主要是保证系统的可用性,所以消息队列的引入很好的解决了系统的性能问题。

引入消息队列后,整体流程如图所示。
同样的功能,将业务逻辑分到三个系统处理:

  • 文章推送服务只需要对文章进行保存,然后将文章ID Provider 到 MQ 的 new_article 队列中。
  • 业务查询服务主要是 Consumerr MQ 中 new_article 队列中各种条件进行筛选聚合,并叫结果 Provider 到 MQ 的 push_article 队列中。
  • 消息推送服务主要是 Consumer MQ 中 push_article 队列中用户集合进行push。

终于系统上线,运营人员反馈该功能体验很好,为他们节省了大量时间。

四、总结全文,回眸再看

本文主要是针对实战业务中场景出现的实际问题,从系统架构上进行优化,引入MQ帮助系统进行消息的传输功能, 从而让各个服务只关注各自的实现,达到系统解耦的功效;另一方面主要是提高了系统性能,保证系统的稳定运行,让用户体验更好。

rabbitmq实战_RabbitMQ 实战系列之:消息传递相关推荐

  1. rabbitmq实战_RabbitMQ实战(四) - RabbitMQ amp; Spring整合开发

    0 相关源码 1 你将学到 RabbitMQ 整合 Spring AMQP实战 RabbitMQ 整合 Spring Boot实战 RabbitMQ 整合 Spring Cloud实战 2 Sprin ...

  2. rabbitmq direct 多个消费者_RabbitMQ实战应用技巧

    1. RabbitMQ实战应用技巧 1.1. 前言 由于项目原因,之后会和RabbitMQ比较多的打交道,所以让我们来好好整理下RabbitMQ的应用实战技巧,尽量避免日后的采坑 1.2. 概述 Ra ...

  3. 微软官方Windows Server 2008实战攻略系列

    微软Windows Server 2008实战攻略系列之十八:Windows Server 2008 高可用性配置实现 http://download.microsoft.com/download/f ...

  4. (全部)2008重磅出击——微软Windows Server 2008实战攻略系列

    微软Windows Server 2008实战攻略系列之十八:Windows Server 2008 高可用性配置实现 [url]http://download.microsoft.com/downl ...

  5. Oracle特殊恢复原理与实战(DSI系列)

    1.深入浅出Oracle(DSI系列Ⅰ) 2.Oracle特殊恢复原理与实战(DSI系列Ⅱ) 3.Oracle SQL Tuning(DSI系列Ⅲ)即将开设 4.Oracle DB Performan ...

  6. java 微服务实践 视频,全新JAVA微服为务实战Spring Boot系列视频教程 小马哥 JAVA微服务实践视频课程...

    全新JAVA微服为务实战Spring Boot系列视频教程 小马哥 JAVA微服务实践视频课程 ===============课程目录=============== ├─(1) 03Java 微服务实 ...

  7. 【SQL开发实战技巧】系列(六):从执行计划看NOT IN、NOT EXISTS 和 LEFT JOIN效率,记住内外关联条件不要乱放

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  8. 【SQL开发实战技巧】系列(十):从拆分字符串、替换字符串以及统计字符串出现次数说起

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  9. 【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

最新文章

  1. golang runes 字符串 互转
  2. VS.NET 2005 Beta2的稳定性太差了:(
  3. 微机化远动系统与计算机网络,远动技术教案_第3章_微机监控系统数据通信网络结构及原理.pdf...
  4. Div+CSS布局入门教程(四) 页面顶部制作之二
  5. [转载] python win32api 使用小技巧
  6. java装箱与拆箱_【转】java 自动装箱与拆箱
  7. 三线表(带有行横标目)的绘制方法
  8. 华为U5800刷机,Root权限
  9. SQL server 2008 全代码
  10. 解决win7语言栏消失问题
  11. Xshell和xftp免费下载与使用
  12. UniApp接入阿里云金融级实人认证服务
  13. 浅谈偏光镜使用与选购[机器视觉系列]
  14. EPUB转为PDF和书籍pdf下载
  15. 人工智能的未来趋势将会走向哪里?
  16. python投票系统项目ppt_python fastApi实战项目 - 爱投票管理系统(一)
  17. 面试自动化测试的必问题
  18. NAND Flash SSD 是如何生产出来的?
  19. ibus的设置及极点五笔的安装
  20. 自学java基础笔记

热门文章

  1. 第三次学JAVA再学不好就吃翔(part32)--方法重写
  2. python技术是什么_学 Python 都用来干嘛的?
  3. Python入门知识点总结
  4. 使用 ABAP 开发的一个基于 Web Socket 的小工具,能提高程序员日常工作效率
  5. 如何在 SAP BTP 平台上重用另一个已经开发好的 service
  6. 使用 generator-easy-ui5 快速创建 SAP UI5 应用的工程结构
  7. 最简单的 Webpack Hello World 例子
  8. SAP Spartacus 产品明细页面的 url 设计和数据源
  9. SAP Spartacus Popover Directive 构造函数的用途分析
  10. 试图用Session Administration删除某用户的session时报错