特来电是一个互联网公司,而且是技术领先的互联网公司。互联网公司的标配是什么?答案就是缓存+MQ。没错,您没看错,就是MQ--消息队列,我们今天要讨论的RabbitMQ就是消息队列中功能非常强大的一种。那么RabbitMQ在特来电是如何应用的呢?这就是今天这篇博文的目的,让您连接RabbitMQ在特来电的深度应用!

1.一张图看懂MQ的地位

RabbitMQ具有和关系型数据库、内存数据库同等的地位,作为最底层的组件,为上层调用提供服务。在特来电,几乎所有应用系统都是分布式部署,而RabbitMQ是分布式系统的基础组件。

2.RabbitMQ集群在特来电的部署方式

为了最大限度的保证可用性,避免单个节点的故障而影响整个系统的运行,RabbitMQ使用集群方式搭建,并配合HAProxy来提供负载均衡功能。

目前在生产环境,我们通过三台RabbitMQ服务器、两台HAProxy服务器来保证每天接近900W的消息分发与处理。

3.分布式任务计算平台(MAC)在特来电的广泛使用

消息队列对于应用解耦、流量削峰等具有极大的优势。分布式任务计算平台--MAC是处理RabbitMQ消息的主要途径之一,何为分布式任务计算平台?

处理MQ消息是一件非常复杂的事情,虽然说MQ官方会推出对应的调用SDK,但对于具体使用方式、异常处理、性能调优、异常补偿等,都会增加使用者的学习成本,并且对于SDK的统一升级等都会非常复杂。鉴于此,特来电公共技术部经过仔细调研,开发了分布式任务计算平台简化了处理MQ消息复杂性,并通过支持分布式部署、水平扩展、自动重试、流量安全控制、通过任务插件注入的方式来简化使用MQ的复杂性,并通过一系列的辅助来保证最终数据处理的一致性。

分布式任务计算平台是作为MQ的消费者Consumer而存在。

截止到目前为止,分布式任务计算平台共有274类不同任务,承载着900W的消息处理。

4.分布式任务计算平台(MAC)主动对流量的控制

还记得我们说过,MQ的两个主要功能:应用解耦和流量削峰。生产环境274类不同任务支撑了不同应用之间的解耦,但没有主动控制流量削峰。

为什么以前我们不主动对流量进行主动控制,而现在要主动控制呢?

究其原因,我们认为对于每个消息的处理应该是尽可能的快,但随着业务之间的交互越来越复杂,消息的处理总是达不到消息到来的速度。尽管分布式任务计算平台会尽可能增大消息处理并发数。但在消息峰值来临时,会对后端的业务处理带来更大的压力,严重时,可能会拖垮系统的运行,影响公司整体业务的处理。基于此,我们在MAC端增加主动控制流量,在业务系统可接受的影响范围内,进行消息的处理。

MAC将是否主动控制流量的配置进行了极大的简化,只需在对应的任务元数据配置流量控制阈值及时间单元即可启用,MAC会主动控制消息的消费速率在阈值范围内。

5.MAC如何解决RabbitMQ消息全部被接收到Client端,造成Client端内存占用高的问题

实际使用RabbitMQ过程中,如果完全不配置QoS,这样RabbitMQ会尽可能快速地发送队列中的所有消息到MAC。MAC会在本地缓存所有的消息,从而极有可能导致OOM或者导致服务器内存不足而影响其它进程的正常运行。所以我们需要通过设置Qos的prefetch count来控制MAC缓存的消息数量,同时设置得当也会提高MAC的吞吐量。

prefetch count并不是说设置得越大越好。过大可能导致consumer处理不过来,一直在本地缓存的BlockingQueue里呆太久,这样消息在客户端的延迟就大大增加;而对于多个consumer的情况,则会分配不均匀,导致有些consumer一直在忙,有些则非常空闲。然而设置的过小,又会令到consumer不能充分工作,因为我们总想它100%的时间都是处于繁忙状态,而这时可能会在处理完一条消息后,BlockingQueue为空,因为新的消息还未来得及到达,所以consumer就处于空闲状态了。

MAC会根据一定的方式,依照流量控制阈值来设置RabbitMQ的prefetch Count,将MAC缓存消息的数量控制在一定范围内,减少MAC缓存消息占用的内存。

prefetch Count相关的内容请参考:http://zclau.com/2016/09/15/RabbitMQ%E7%9A%84Qos-prefetch/

总结:

RabbitMQ 作为消息队列产品的佼佼者,提供了丰富的功能来满足业务需求,而特来电人也在基于RabbitMQ做最大限度的深度应用,集群部署、分布式任务计算平台、主动流量控制等都是我们对RabbitMQ深度应用。

在RabbitMQ的使用路上,参考我们具体的业务需求及RabbitMQ提供的特性,我们还会创造出更多有价值的功能。

在RabbitMQ的使用之路上,有你我不孤单。

RabbitMQ在特来电的深度应用相关推荐

  1. JAVA程序员常用访问网址

    技术桟更新总有一些不得不访问的官网不得不记录下来,放在本地太容易忘了,分享一波,也是为了防止自己忘了!!!写到哪儿算哪儿 国家严打版本问题,hacker类文章不能看了!就离谱 目录 1.记事本工具 2 ...

  2. 深度剖析RabbitMQ可靠性消息投递以及实践方案

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿飞的博客 来源 | 阿飞的博客 一般而言,如 ...

  3. Spring源码深度解析(郝佳)-学习-Spring消息-整合RabbitMQ及源码解析

      我们经常在Spring项目中或者Spring Boot项目中使用RabbitMQ,一般使用的时候,己经由前人将配置配置好了,我们只需要写一个注解或者调用一个消息发送或者接收消息的监听器即可,但是底 ...

  4. 别人家的团队怎么用RabbitMQ:我总结的5点规范

    大概从 2013 年开始,我就开始了自己和 RabbitMQ 的接触,到现在已经有七年多了. 在这七年中,既有一些对 RabbitMQ 的深度体验,更有无数的血泪史. 而根据我这么多年的使用经验,我将 ...

  5. 使用深度神经网络进行自动呼叫评分(一)

    导言 呼叫评分是呼叫中心质量保证的重要组成部分,它能够使呼叫中心代理可以更快.更高效的完成工作,并且避免无意义的日常工作.考虑到呼叫中心的生产力,在研发中提出了一种处理所有来电的算法,并将它们分为可疑 ...

  6. 深度丨MIT重磅报告:一文看清AI商业化现状与未来

    "本文旨在为读者呈现出全球企业在 AI 方面的发展计划和现状.当然,这份报告不是通过猜想和预测,而是建立在可靠的调查数据之上,麻省理工斯隆学院对全球各行业超过 3000 名高管和分析人员,以 ...

  7. 麦肯锡AI应用报告:深度学习是蓝海还是深坑?

    来源:网络大数据 AI的价值并不在模型自身,而在于公司怎样用好它们. 麦肯锡出品,一份深度学习领域的分析报告,包含400个应用案例,横跨19个行业的9种业务功能.报告重点强调了前沿AI技术的应用范围之 ...

  8. Java还欠缺什么才能真正支持机器/深度学习?

    如何让团队开始使用ML以及如何最好地将ML与我们运行的现有系统集成? 实际上没有用Java构建的ML框架(有DL4J,但我真的不知道有谁使用它,MXNet有一个Scala API而不是Java,而且它 ...

  9. 特来电监控引擎流计算应用实践

    随着云计算的深入落地,大数据技术有了坚实的底层支撑,不断向前发展并日趋成熟,无论是传统企业还是互联网公司,都不再满足于离线批处理计算,而是更倾向于应用实时流计算,要想在残酷的企业竞争中立于不败之地,企 ...

最新文章

  1. vue.js crud_如何使用VS Code和ADO.NET使用ASP.NET Core执行CRUD操作
  2. 自然语言处理(NLP)之使用LSTM进行文本情感分析
  3. 3w最简单led灯电路图_led灯驱动电源电路图大全(六款模拟电路设计原理图详解)...
  4. python列表间隔合并_Python使用zip合并相邻列表项的方法示例
  5. js / php 网站底部版权文字自动改变年份
  6. Scintilla 3 24在MFC中的使用 动态 静态
  7. memcpy 作用(C++)
  8. 7年老员工的6点离职忠告
  9. Spring源码分析-从@ComponentScan注解配置包扫描路径到IoC容器中的BeanDefinition,经历了什么(二)?
  10. 工程测量计算机在线用,工程测量中的计算机编程新技术.doc
  11. google地图瓦片地址
  12. R语言使用aov函数执行单因素方差分析、使用TukeyHSD函数分析单因素方差分析的结果并解读TukeyHSD函数的输出结果
  13. java线程倒计时_Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger...
  14. Python自动化办公练习——合并工作簿
  15. Google zxing实现二维码扫描完美解决方案
  16. 统计学练习题——组合,排列组合
  17. 并发编程-并发编程的挑战
  18. ucsd计算机科学,UCSD计算机科学博士排名,谨记得细致看
  19. 反恐精英在线服务器名称,反恐精英Online-官方网站
  20. 微信小程序自定义组件:带未读数目的tabBar按钮(小红点+带未读数目)

热门文章

  1. Python-编程例题
  2. RIP实验(详细步骤)
  3. 微信公众号文章是否违规怎么检测?
  4. 漫谈数据库领域职业定位与发展
  5. PTA 程序设计天梯赛【day2】
  6. 【黄啊码】php商城搭建从0到n,可用于毕业设计
  7. C语言完整代码实现:二叉树的先序遍历、中序遍历、后序遍历
  8. STOS指令和LEA指令
  9. python悬浮球窗口_实现悬浮窗口
  10. Linux Top 详细介绍,包含task排序