zoukankan      html  css  js  c++  java
  • 面试 -- 核心篇 -- 中间件(消息)

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

    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.  

  • 相关阅读:
    CentOS中JAVA_HOME的环境变量设置
    Macserver服务更新经常使用的几个shell命令
    一个技术派创业者的反思
    巴斯卡三角形
    iOS中基于 Socket 的 C/S 结构网络通信(中)
    poj 3267 The Cow Lexicon (动态规划)
    Android入门:短信和拨打电话
    HDUOJ--4888--Redraw Beautiful Drawings【isap】网络流+判环
    Dynamics CRM 2015 New Feature (9): Services Changes
    Class 找出一个整形数组中的元素的最大值
  • 原文地址:https://www.cnblogs.com/itxiaok/p/10356646.html
Copyright © 2011-2022 走看看