码迷,mamicode.com
首页 > 其他好文 > 详细

面试 -- 核心篇 -- 中间件(消息)

时间:2019-02-08 21:36:00      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:art   soft   可靠   中间件   转发   elastics   异步   logstash   head   

面试 -- 核心篇 -- 中间件(消息)

  1. 消息队列的应用场景 参考网址:消息队列的四种应用场景

              消息队列设计思路

(1)异步处理

用户注册时,可以同时将 发送邮件 和 发送短信 功能放到消息队列中实现。可以提高用户响应时间,提高系统吞吐量。

(2)应用解耦

用户下单和库存扣账中使用消息,可以防止库存系统出问题后,导致用户下单失败。

(3)流量削峰

秒杀活动中,由于瞬间吞吐量很大,那么可以在客户端和业务处理中间加入消息队列,限制人数,丢弃掉过多的用户请求。这样可以防止流量暴增导致服务器挂掉。

(4)日志处理

日志采集客户端,负责日志数据采集,定时写受写入Kafka队列

Kafka消息队列,负责日志数据的接收,存储和转发

日志处理应用:订阅并消费kafka队列中的日志数据

ELK stack 日志分析。(Elasticsearch, Logstash, Kafka) (5)消息通讯

点对点通讯

聊天室

 

  1. 消息的重发补偿解决思路 参考网址:RocketMQ 解决消息有序和重复的思路

 

  1. 消息的幂等性解决思路 MQ之如何做到消息幂等

幂等性

MQ消息可达性+幂等性+延时性架构设计

  1. 消息的堆积解决思路 处理消息堆积的方法就是把它存下来。只是这个存储可以做成很多方式。比如存储在内存里,存储在分布式KV里,存储在磁盘里,存储在数据库里等等。但归结起来,主要有持久化和非持久化两种。

持久化的形式能更大程度地保证消息的可靠性(如断电等不可抗外力),并且理论上能承载更大限度的消息堆积(外存的空间远大于内存)。 但并不是每种消息都需要持久化存储。很多消息对于投递性能的要求大于可靠性的要求,且数量极大(如日志)。这时候,消息不落地直接暂存内存,尝试几次failover,最终投递出去也未尝不可。

市面上的消息队列普遍两种形式都支持。当然具体的场景还要具体结合公司的业务来看。

  1. 消息的有序性保证思路

  1. 如何实现自己的消息队列 消息队列设计精要

  2.  

面试 -- 核心篇 -- 中间件(消息)

标签:art   soft   可靠   中间件   转发   elastics   异步   logstash   head   

原文地址:https://www.cnblogs.com/itxiaok/p/10356646.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!