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

摘要:
消息队列的四种应用场景消息队列设计思路(1)在异步处理用户注册时,可以在消息队列中同时实现发送电子邮件和发送短信的功能。(2) 该应用程序将用户下单和库存账户扣除中的消息使用解耦,因此您可以在客户机和业务处理之间添加消息队列,定期写入和写入Kafka队列Kafka消息队列,存储和转发日志处理应用程序:订阅和使用Kafka排队ELKstack日志分析中的日志数据。
面试 -- 核心篇 -- 中间件(消息)
  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.  

免责声明:文章转载自《面试 -- 核心篇 -- 中间件(消息)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇shiro中编码/加密OC项目加入swift第三方库遇到的坑下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RabbitMQ面试题

1、为什么要引入MQ系统,直接读写数据库不行吗?其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用 MQ 可能会很麻烦,但是你现在用了 MQ 之后带给了你很多的好处。 先说一下消息队列常见的使用场景...

ORACLE EXP/IMP 参数详解《转》

exp nc50/1 inctype=complete file=E:\data.dmp full=y(导出全部) exp nc50/1 file=E:\data.dmp OWNER = nc50(导出指定用户nc50) imp nc50/1@orcl inctype=complete file=E:\data.dmp full=Y(导入全部) imp n...

iOS 开发中常见的错误日志处理

Outline如何获得crash日志如何解析crash日志如何分析crash日志     1. iOS策略相关     2. 常见错误标识     3. 代码bug一、如何获得crash日志当一个iOS应用程序崩溃时,系统会创建一份crash日志保存在设备上。这份crash日志记录着应用程序崩溃时的信息,通常包含着每个执行线程的栈调用信息(低内存闪退日志例...

处理 EF 并发其实就这么简单

    最近项目有点闲,终于可以了解点自己想了解的了,以前听同事讲面试的经历总会被问到“如何处理高并发大数据” 乍一听感觉这东西好像很有学问的样子,于是并发这个词在脑海里留深刻印像,而且在自己心中的技术地位也提高很多,也导致了解并发相关的知识时,也带着思想负担,总以为很难懂,程序员或许都是这样,在自己不懂的技术领域,别人说一个很简单的技术,给他的感觉都是很...

Handler处理长时间事件

当我们在处理一些比较长时间的事件时候,比如读取网络或者数据库的数据时候,就要用到Handler,有时候为了不影响用户操作应用的流畅还要开多一个线程来区别UI线程,在新的线程里面处理长时间的操作。开发的时候遇到数据处理都可以这样用handler,灵活修改一下就可以做各种效果了。 第一步:ProgressDialog弹出旋转框来提示长时间操作。 第二步:开多一...

分布式一致性算法--Raft

     前面一篇文章讲了Paxos协议,这篇文章讲它的姊妹篇Raft协议,相对于Paxos协议,Raft协议更为简单,也更容易工程实现。有关Raft协议和工程实现可以参考这个链接https://raft.github.io/,里面包含了大量的论文,视屏已经动画演示,非常有助于理解协议。概念与术语leader:领导者,提供客户提供服务(生成写日志)的节点,...