zoukankan      html  css  js  c++  java
  • 消息中间件

    消息中间件要解决什么问题?

    消息中间件要解决的问题是:

    • 解耦:需要互相通信的应用之间的解耦
    • 缓冲:如果一个应用正忙,但其他应用还在不停的给他发消息,这时候需要一个地方暂存无法被处理的请求。

    消息中间件的通用属性?

    • no SPOF: SPOF = Single Point of Failure,你就一个单点,就一台服务器,挂了整个系统的消息都跑不通了,你必须要有替补、要有搭档。这一点,解决思路就是采用集群,nsq和nsqlookup,都支持集群架构
    • 可拓展性强:当一台服务器不够用时,你是否支持方便的横向扩展?nsq的扩展非常简单,默认一个生产者配置一个nsq,如果你需要俩,那就配置两个nsq地址即可
    • 可靠性强:这一点,nsq并不具备,默认情况下,消息是保存到内存的,一旦系统崩溃了,消息就没了。就算消息持久化到磁盘了,也只是做了一次备份,不像Kafka的partition机制,可以做多次备份
    • 性能好:这点毋庸置疑,采用push+内存的实现策略,再加上面提到的高可拓展性,nsq的性能可以得到保障

    消息中间件的特殊属性?

    • 消息投递策略:消息投递是至少一次,还是最多一次,还是需要控制在准确一次?nsq选择的是至少一次,这种适用面最广的方式,Kafka则支持全部三种,当然,这也给系统引入了更多的复杂性,而nsq则选择一如既往的”极简“
    • 消息时序性:为了性能考虑,nsq选择了不去无序,让消息飞~ 当然,如果你能设计出一套可以在topic级别进行时序性控制的消息中间件,是最牛逼不过了,比如有赞自研的nsq
    • push or pull:为了追求实时性,nsq选择了push,不同的消息中间件有不同的实现策略
    • 内存 or 磁盘:通常,如果你选择了push,那么对应的就会选择内存,当然为了消息可靠性,你还是得做一些刷盘的操作

    常见的消息中间件

    RabbitMQ

  • 相关阅读:
    【1】【leetcode-33,81】 搜索旋转排序数组
    【leetcode-82,83,26,80】 删除排序链表/数组中的重复元素
    【leetcode-84】 柱状图中最大的矩形
    Objective-C之run loop详解
    ReactiveCocoa
    IOS响应式编程框架ReactiveCocoa(RAC)使用示例
    通过WireShark抓取iOS联网数据实例分析
    Receiver type for instance message is a forward
    Swift 高级运算符
    ios Instruments 内存泄露
  • 原文地址:https://www.cnblogs.com/frankcui/p/12357257.html
Copyright © 2011-2022 走看看