消息中间件之常见使用场景

概述

消息中间件例如,Kafka,RocketMQ和RabbitMQ等等,是业务开发中不可或者的组件。通常消息中间件包括3个角色组成,如下:

  • 生成者(Producer),生产消息。
  • 消息代理(message broker),存储生产者产生的消息。
  • 消费者(Consumer),从消息代理获取并消费消息。

大致流程图如下:

 常见场景

通常消息的使用场景有如下几类:

  • 应用解耦
  • 流量消峰
  • 日志处理
  • 分布式事务(异步消息调用)

应用解耦

在常见的订单支付场景中,为了鼓励用户多下单,运营经常会搞各类促销活动。当用户订单支付(订单服务)成功后,就送用户XXX优惠券(优惠券服务);给用户增加积分(积分服务)等等。按照传统的逻辑,直接在订单服务中,调用优惠券服务和积分服务,大致流程如下:

按照上面的模式,耦合了第三方服务,增加的订单服务的代码维护量。如下情况尤为突出:

  1. 增加其他促销活动的服务,例如,直接返现,送礼品卡,此时,需要在订单服务中调用对应服务。
  2. 原先调用的优惠券服务和积分服务原来的API参数和逻辑有改动,此时,需要在订单服务中调用处修改对应参数。

这时,可以使用消息中间件类业务解耦,订单服务通过消息中间件发送第三方服务需要的参数,第三方服务在消息中间件中,回去对应的参数完成对应的促销活动。大致的调用流程如下:

流量消峰

在高并发场景中,例如,商品秒杀,抢票等场景。由于,瞬间的高并发请求可能超过服务器的处理能力,会直接把数据库击垮,以秒杀常见为例,流程如下:

这时,可以使用消息中间件进行流量消峰。当大量的用户请求发送到订单服务时,先把下单的参数使用消息队列保存,然后,在消费端以数据库可以承受的范围内生成订单。流程如下:

日志处理 

在一个大型应用的开发中,应用程序通常部署几台,甚至几十台应用服务器上。此时,开发人员和运维人员查询日志时,需要到服务对应的服务器上去跟踪无疑是相当的不方便。此时,需要一个集中化的日志管理系统,对管理所有的日志,现在比较流行的方案就是ELK(elasticsearch、logstash、kibana) +Kakfa的方案,操作过程可以参考ELK + kafka 日志方案,组件介绍如下:

  • Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
  • Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 Kakfa),它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
  • Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

分布式事务(异步消息调用)

在分布式事务的解决方案中,使用本地消息表+消息中间件异步通知实现的分布式事务方案,具体请参考聊聊分布式事务,再说说解决方案

发布了37 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/new_com/article/details/105441750