大型网站架构系列:分布式消息队列(一)

精彩早知道

  1. 消息队列概述
  2. 消息队列应用场景
  3. 消息中间件示例
  4. JMS消息服务(见第二篇:大型网站架构系列:分布式消息队列(二))
  5. 常用消息队列(见第二篇:大型网站架构系列:分布式消息队列(二))
  6. 参考(推荐)资料(见第二篇:大型网站架构系列:分布式消息队列(二))
  7. 本次分享总结(见第二篇:大型网站架构系列:分布式消息队列(二))

一、消息队列概述

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。

目前在生产环境,使用较多的消息队列有ActiveMQRabbitMQZeroMQKafkaMetaMQRocketMQ等。

二、消息队列应用场景

以下介绍消息队列在实际应用中常用的使用场景。

  1. 异步处理
  2. 应用解耦
  3. 流量削锋
  4. 消息通讯

2.1异步处理

场景说明:

用户注册后,需要发注册邮件和注册短信。

传统的做法有两种: 1.串行的方式。 2.并行方式。

(1)串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端

(2)并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间。

假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。

因为CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。并行方式处理的请求量是10次(1000/100)。

小结

如以上案例描述,传统的方式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题呢?

引入消息队列,将不是必须的业务逻辑,异步处理。改造后的架构如下:

按照以上约定,用户的响应时间相当于是注册信息写入数据库的时间,也就是50毫秒。

注册邮件,发送短信写入消息队列后,直接返回,因此写入消息队列的速度很快,基本可以忽略,因此用户的响应时间可能是50毫秒。

因此架构改变后,系统的吞吐量提高到每秒20 QPS。比串行提高了3倍,比并行提高了两倍。

2.2应用解耦

场景说明:

用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。如下图:

传统模式的缺点:

  1. 假如库存系统无法访问,则订单减库存将失败,从而导致订单失败。
  2. 订单系统与库存系统耦合。

如何解决以上问题呢?引入应用消息队列后的方案,如下图:

  • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
  • 库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。
  • 假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦。

2.3流量削锋

流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。

应用场景:

秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。

  1. 可以控制活动的人数。
  2. 可以缓解短时间内高流量压垮应用。
  1. 用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。
  2. 秒杀业务根据消息队列中的请求信息,再做后续处理。

2.4日志处理

日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。架构简化如下:

  • 日志采集客户端,负责日志数据采集,定时写受写入Kafka队列。
  • Kafka消息队列,负责日志数据的接收,存储和转发。
  • 日志处理应用:订阅并消费kafka队列中的日志数据。

以下是新浪kafka日志处理应用案例:

  1. Kafka:接收用户日志的消息队列。
  2. Logstash:做日志解析,统一成JSON输出给Elasticsearch。
  3. Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数据存储服务,通过index组织数据,兼具强大的搜索和统计功能。
  4. Kibana:基于Elasticsearch的数据可视化组件,超强的数据可视化能力是众多公司选择ELK stack的重要原因。

2.5消息通讯

消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。

点对点通讯:

客户端A和客户端B使用同一队列,进行消息通讯。

聊天室通讯:

客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果。

以上实际是消息队列的两种消息模式,点对点或发布订阅模式。模型为示意图,供参考。

三、消息中间件示例

3.1电商系统

消息队列采用高可用,可持久化的消息中间件。

比如Active MQRabbit MQRocket Mq。

  1. 应用将主干逻辑处理完成后,写入消息队列。消息发送是否成功可以开启消息的确认模式。(消息队列返回消息接收成功状态后,应用再返回,这样保障消息的完整性)
  2. 扩展流程(发短信,配送处理)订阅队列消息。采用推或拉的方式获取消息并处理。
  3. 消息将应用解耦的同时,带来了数据一致性问题,可以采用最终一致性方式解决。比如主数据写入数据库,扩展应用根据消息队列,并结合数据库方式实现基于消息队列的后续处理。

3.2日志收集系统

分为:

  • Zookeeper注册中心:提出负载均衡和地址查找服务。
  • 日志收集客户端:用于采集应用系统的日志,并将数据推送到kafka队列。
  • Kafka集群:接收,路由,存储,转发等消息处理。
  • Storm集群(OtherApp):与OtherApp处于同一级别,采用拉的方式消费队列中的数据。

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-03-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器人网

PLC选型必须了解的那些原则,详细,清楚!

随着PLC的推广普及,PLC产品的种类和数量越来越多,而且功能也日趋完善。近年来,从美国、日本、德国等国引进的PLC产品,加上国内厂家组装或自行开发的PLC产品...

32190
来自专栏机器人网

不同的机器人控制各需要什么关键技术?

机器人控制系统是机器人的大脑,是决定机器人功能和性能的主要因素。工业机器人控制技术的主要任务就是控制工业机器人在工作空间中的运动位置、姿态和轨迹、操作顺序及动作...

35050
来自专栏SeanCheney的专栏

Celery分布式任务队列插件Celery - Distributed Task Queue

http://docs.celeryproject.org/en/latest/index.html Celery - Distributed Task Que...

33690
来自专栏PingCAP的专栏

TiDB 在 Mobikok 广告系统中的应用和实践

Mobikok(可可网络)成立于 2013 年,是一家快速成长的移动互联网营销公司,专注于移动 eCPM 营销。总部在中国深圳,聚焦于订阅 offer 的海外流...

47150
来自专栏SeanCheney的专栏

《Python分布式计算》 第4章 Celery分布式应用 (Distributed Computing with Python)搭建多机环境安装Celery测试安装Celery介绍更复杂的Celer

本章是前面某些知识点的延续。特别的,本章以实例详细的探讨了异步编程和分布式计算。本章关注Celery,一个复杂的用于构建分布应用的Python框架。最后,对比了...

61460
来自专栏Albert陈凯

2018-04-16 Java面试通关要点汇总集2018年最新 Java面试通关要点汇总集

2018年最新 Java面试通关要点汇总集 基础篇 基本功 面向对象的特征 final, finally, finalize 的区别 int 和 Integ...

30960
来自专栏PPV课数据科学社区

浅谈开源大数据平台的演变

一说到开源大数据处理平台,就不得不说此领域的开山鼻祖Hadoop,它是GFS和MapReduce的开源实现。虽然在此之前有很多类似的分布式存储和计算平台,但真正...

46160
来自专栏PPV课数据科学社区

大型网站架构系列:电商网站架构案例

大型网站架构是一个系列文档,欢迎大家关注。本次分享主题:电商网站架构案例。从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型。除具备功能...

74470
来自专栏PPV课数据科学社区

【案例】深度解析大数据在公安领域的应用

近一两年,大数据开始在公安等行业领域得到普及应用,除了行业自身的特殊要求外,大数据也带动了相关行业的需求发展。未来,基于大数据的行业应用会变得更加深入,更多的相...

36840
来自专栏PPV课数据科学社区

分布式数据库数据一致性原理说明与实现

分布式数据库的数据一致性管理是其最重要的内核技术之一,也是保证分布式数据库满足数据库最基本的ACID特性中的 “一致性”(Consistency)的保障。在分布...

43550

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励