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

Posted itxiaok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试 -- 核心篇 -- 中间件(消息)相关的知识,希望对你有一定的参考价值。

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

  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.  

以上是关于面试 -- 核心篇 -- 中间件(消息)的主要内容,如果未能解决你的问题,请参考以下文章

曾经人手一份的“阿里面试参考指南”现在真的不行了?

java面试总结架构师中间件,Java开发避坑指南!

kafka核心原理的秘密,藏在这16张图里

业务系统对消息中间件的要求(接上一篇《分布式消息中间件中的一些概念》)

Java面试-RabbitMQ

10 典型面试题深度解析