• 从Kafka看Broker中间件的设计



    1. 软件设计要求

    满足以下功能:

    • 消息模型
      1. Req-Rep模型(http服务器)
      2. Pub-Sub模型(消息队列)
      + push模式:多播/监听队列
      + pull模式:消息存储/序列化
      3. Producer-Consumer模型(Broker缓存)
    • 线程关系
      • 心跳机制
      • 独立线程负责多路复用
      • 数据的包装struct
    • 消息路由
      • topic_routing

    wechat: 《吃透 MQ 系列》之扒开 Kafka 的神秘面纱

    使用Broker中间件的优势:

    1. 系统解耦

      快递员跟收件人来打比方的话,快递员送货如果都送到每个人手里的话,那么快递员要一个个打电话,收件人收到电话之后,要在家等着快递。快递员跟收件人是紧密耦合在一起的。如果门口保安可以代收快递的话,快递员跟收件人就解耦了,快递员放在门口保安处,收件人去门口保安处领,就可以了,不用必须等着或者必须送到。这种就叫解耦

    2. 异步处理

      还是上面的例子,快递员给收件人打电话,说马上送快递。收件人说不行,要去上班,你放门口老大爷那就行。就是说收件人不用等着送到才进行下一件事,这就叫做异步处理。

    3. 削峰限流

      有一天你买的快递到了,你媳妇、你爸妈买的快递都到了,打电话都让你去取,他们分别在小区的东南西北门都有,半个小时不取的话,就走了。你这个时候会不会手忙脚乱。但是这会你跟他们说:都给我放在南门老大爷那边。这会就是快递员去放到那边,你可以慢慢的取了。这就是削峰限流的意思

    这样,一条消息的流转路径就如下图所示,先走主题路由(topic),然后走分区路由(partition),最终决定这条消息该发往哪个分区。

    • 生产消息
      • 批量发送: 由于频繁发送的话,可能会比较占网络,可以在参数设置batch的方式进行发送
      • 消息压缩
      • 高效序列化
      • 内存池复用
    • 存储消息
      • IO多路复用
  • 相关阅读:
    TCP通信
    TCP/IP与套接字
    SPA页面性能优化
    webpack打包css样式出错
    《转》理解Object.defineProperty的作用
    vue2.0 自定义时间过滤器
    axios post提交数据格式不对的问题
    vue-cli开发时,ajax跨域详细解决办法
    关于Vue实例的生命周期created和mounted的区别
    npm install 报错(npm ERR! errno -4048,Error: EPERM: operation not permitted,)解决方法
  • 原文地址:https://www.cnblogs.com/brt2/p/15531779.html
Copyright © 2020-2023  润新知