zoukankan      html  css  js  c++  java
  • 消息队列

    1、阿里的消息队列有MQ和Notify

        消息队列的作用是解耦,并发,异步

    2、MQ不保证重复性,保证局部有序

        Notify不保证重复性,不保证有序性

    3、重复性

        因为多个线程或者进程或者多个机器之间进行通讯可能会出现问题,比如:网络超时而造成流程不能正常进行下去。所以比较好的处理机制是重试。

        在多机或者多线程的环境中,因为网络原因或者其他原因,经常会出现类似超时或者其他原因造成拿不到确切的回执结果,此时要么等待,要么重试,要么默认成功或者失败。

    4、幂等性

       因为网络(网络包重复)或者其他原因,消息可能会出现重复投递,此时需要解决重复性的问题,下面是两种解决思路

      1、使用去重表

         每次收到请求,检查该请求是否已经成功处理过。如使用msgId去重

      2、业务规则实现幂等

         1、状态机

          2、消息标识状态从哪变到哪

          3、状态机,和2比较相似

    5、有序性

        有序性则限制了整个集群的吞吐量,因为队列的消息时锁住的保证消息一个接一个消费

    6、如何解决有序性:

          业务规则实现等幂

          假如有几个消息,每个消息标识的业务字段分别为1,2,3,4,状态机为:1->2->3->4

           系统现在的默认状态为0,先收到3消息,业务系统直接置现在的状态为3,然后收到1消息,根据状态机丢弃该消息,类似的2消息也会丢弃。(此方法也能解决消息重复实现幂等)

    7、消息堆积问题

        现在MQ采取MappedByteBuffer也就是内存映射文件来解决该问题。

        磁盘的吞吐量一般为150M,随机读的时候因为不断的需要磁盘寻道吞吐量下降到50M。随机寻道是磁盘性能的主要原因。

        因为消息写是不断的附件文件,读一般也是顺序的读文件,所以读写磁盘的时候随机读和写会比较少,所以花在磁盘寻道上的时间也会比较少,这样磁盘的性能就上去了。

    8、事务消息

       需要实现消息队列 server的回查接口

       

  • 相关阅读:
    Linux下mysql的自动定时备份
    javaweb面试题
    java面试题
    Web应用优化之nginx+tomcat集群配置+redis管理session
    Web应用系统通常可以经过哪些层面的优化
    HBase安装
    博客园所有文章字数统计
    Python生成器
    Python列表生成式
    直方图均衡化-Python实现
  • 原文地址:https://www.cnblogs.com/YDDMAX/p/5528885.html
Copyright © 2011-2022 走看看