消息队列场景简介
“ 消息 ”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息被发送到队列中,“ 消息队列 ”是在消息的传输过程中保存消息的 容器 。

在目前广泛的Web应用中,都会出现一种场景:在某一个时刻,网站会迎来一个用户请求的高峰期(比如:淘宝的双十一购物狂欢节,12306的春运抢票节等),一般的设计中,用户的请求都会被直接写入数据库或文件中,在高并发的情形下会对数据库服务器或文件服务器造成巨大的压力,同时呢,也使响应延迟加剧。这也说明了,为什么我们当时那么地抱怨和吐槽这些网站的响应速度了。当时2011年的京东图书促销,曾一直出现在购物车中点击“购买”按钮后一直是“ Service is too busy ”,其实就是因为当时的 并发访问量过大,超过了系统的最大负载能力 。当然,后边,刘强东临时购买了不少服务器进行扩展以求增强处理并发请求的能力,还请了信息部的人员“喝茶”,现在京东已经是超大型的网上商城了,我也有同学在京东成都研究院工作了。
使用消息队列
从京东当年的“Service is too busy”不难看出,高并发的用户请求是网站成长过程中必不可少的过程,也是一个必须要解决的难题。在众多的实践当中,除了增加服务器数量配置服务器集群实现伸缩性架构设计之外,异步操作也被广泛采用。而异步操作中最核心的就是使用 消息队列 ,通过消息队列,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务,改善网站系统的性能。在京东之类的电子商务网站促销活动中, 合理地使用消息队列,可以有效地抵御促销活动刚开始就开始大量涌入的订单对系统造成的冲击 。
记得我在实习期间,成都市XXXX局的一个价格信息采集发布系统项目中有一个采集任务发布的模块,其中每个任务都是一个事务,这个事务中需要向数据库中不断地插入行,每个任务发布时都要往表中插入几百行甚至几千行的任务数据(比如价格采集日报,往往需要发布2-3年的任务数据,每一天都是一个任务,所以大约有2,3千行任务期号数据,还要发给很多个区县的监测中心,因此数据库写操作量很大,更别说同时发布的并发操作),由于业务逻辑的处理比较复杂和往数据库的写操作量交大,所以在没有采用消息队列时点击“发布”按钮后往往需要等待1分钟左右的时间才提示“发布成功”,用户体验极不友好。

这时,我们就可以使用消息队列的思想来重构这个发布模块,在用户点击“发布”按钮后,系统只需要把往数据库插入的这个事务信息插入到指定的任务发布消息队列里边去(入队操作,这里一般有一台独立的消息队列服务器来单独存储和处理),然后系统就可以立即对用户的这个发布请求进行响应(比如给出一个发布成功的操作提示,这里暂不考虑消息队列服务操作失败的情形,如果失败了,可以考虑采用给用户发送邮件、短信或站内消息,让其重新进行发布操作)。
队列结构
最后,消息队列服务器中有一个进程单独对消息队列进行处理,首先判断消息队列中是否有待处理的消息,如果有,则将其取出(出队操作,坚持“先进先出”的顺序,保证事务的准确性)进行相应地处理(比如这里是进行保存数据的操作,将数据插入到数据库服务器中的指定数据库里边,实质还是文件的IO操作)。就这样,通过消息队列将高并发用户请求进行异步操作,然后一一对消息队列进行出队的同步操作,也避免了并发控制的难题。
说到这里,大家可能会想到这尼玛不就是 生产者消费者模式 么?对的,么么嗒,消息队列就是生产者消费者模式的典型场景。简单地说,客户端不同用户发送的操作请求就是生产者,他们将要处理的事务存储到消息队列中,然后消息队列服务器的某个进程不停地将要处理的单个事务从消息队列中一个一个地取出来进行相应地处理,这就是消费者消费的过程。
下面我们将以异常日志为案例,介绍在.Net中如何采用消息队列的思想解决并发问题。当然,消息队列只是解决并发问题的其中一种方式,在实际中往往需要结合多种不同的技术方式来共同解决,比如负载均衡、反向代理、集群等方案。

转载于:https://blog.51cto.com/4254002/2069854

中字头 中建二局项目一期 aop相关推荐

  1. 领军筑梦 | 中建二局2022年春季校园招聘正式启动!

    来源:中建二局

  2. vue 项目中 自动生成 二维码

    vue 项目中 自动生成 二维码 ​ 最近在写一个vue项目,要求根据卡号可以自动生成一个二维码,并渲染在指定位置,因为第一次做类似业务,小编在网上找了找,发现了很多,具体起来主要用的就两种: QRc ...

  3. vue项目中自动生成二维码

    vue项目中自动生成二维码 我们在做vue项目时,很多时候要用到生成二维码的功能,今天给大家介绍一个有前端生成二维码的小例子: 1.安装vue-qr: npm isntall vue-qr --sav ...

  4. 【转】缺陷与出路—一个游戏开发者的反思 二、项目开发中的混沌和秩序

    二.项目开发中的混沌和秩序 我们可能都听说过这些说法:"你不可能不劳而获""覆水难收"或"天网恢恢,疏而不漏".如果这些谚语对你说来不算陌生 ...

  5. 科创人·中建三局一公司尹奎:数字化变革能创造全新行业,其意义超越形式、范式创新

    尹奎 中建三局一公司技术中心主任 教授级高级工程师,BIM领域资深专家,完成10余个基于BIM的相关研究课题,获省部级以上科技进步奖 13 项:公开出版专著3部,参与编写"十二五" ...

  6. python语言创意绘画-校招资讯|拼多多、百度、中建六局等名企校园招聘

    原标题:校招资讯|拼多多.百度.中建六局等名企校园招聘 1.[上海]拼多多 [公司简介] 拼多多是国内目前主流的手机购物APP.用户通过发起和朋友,家人,邻居等的拼团,以更低的价格,拼团购买商品.旨在 ...

  7. 高效!中建三局携手百度智能云打造度目智慧通行解决方案

    "度目智慧通行是防疫时代的必然产物."中建三局信息技术研究院的一名技术人员如是说. 中建三局信息技术研究院(以下简称研究院)由中建三局安装公司(智慧事业部)运营,自建立伊始,便肩担 ...

  8. 上海亚商投顾:沪指窄幅震荡 “中字头”概念股又暴涨

    上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股. 市场情绪 沪指今日窄幅震荡,深成指.创业板指盘中跌超1%,午后探底回升一度翻红.光伏.储能等赛道午 ...

  9. 中建五局电子合同:打通全业务数字化链路

    中建五局成立于1965年,是世界500强第13位--中国建筑股份有限公司的全资骨干企业.以房屋建筑施工.基础设施建造.投资与房地产开发为主营业务,拥有房建.市政.公路"三特三甲"资 ...

最新文章

  1. python使用statsmodels包中的tsaplots函数可视化时间序列数据所有滞后位置个数(级别)的自相关性(plot the autocorrelation function)
  2. 20180521 数组转换
  3. oracle遇到无效lob,sql – ORA-22275错误:指定了无效的LOB定位符
  4. ideajdk升级_JDK升级为13
  5. EF Code First建库 增删改查
  6. Glide 缓存与解码复用
  7. await和async
  8. su室内插件_SketchUp必学插件TOP100,每一个都是[室内/装饰/景观]设计的效率神器...
  9. 王叁寿,令人佩服,激励一下自己
  10. 麦咖啡的设置,很长,如果你想百毒不侵的话。。
  11. 啃书:《利用Python进行数据分析》第一章
  12. 群体创新技术/群体决策的几种类型
  13. 关于DSP28335的CAN模块与上位机(PC)通信调试心得(1)
  14. 二叉树的先序遍历(C++)
  15. js中json数组 和 字符串 互转
  16. python 将小图放入较大的白色或黑色背景图片
  17. oppor17刷鸿蒙系统,OPPO R17性能出色 价格仅需2499入手不后悔
  18. 电脑运行linux虚拟盘闪退,Linux 系统下启动Android模拟器报错闪退
  19. Jmeter环境变量配置
  20. javascript常用实例的实现与封装

热门文章

  1. 小红书软件,自动文案神器,爆文效率UP
  2. Python网络爬虫实战案例之:7000本电子书下载(2)
  3. Everest——Linux发行版本
  4. 对比PASCAL和C语言的差异
  5. 数据采集器与爬虫相比有哪些优势?
  6. 720度全景拍摄曝光问题如何解决
  7. Ubuntu系统的USB禁用取消方式
  8. 综合交易平台交易终端及用户手册
  9. golang 模拟登陆微信公众平台,突破微信群发每日一条限制
  10. angular学习总结-组件插槽