Czw`s blog

Thoughts, stories and ideas.

Latest

RocketMQ消息的文件组织形式

RocketMQ消息的文件组织形式

RocketMQ文件的组织形式主要围绕消息的高效存储与检索设计,主要包括CommitLog、ConsumeQueue和IndexFile三类文件。以下是对这三类文件组织形式的详细阐述: 1. CommitLog文件 * 作用:CommitLog是消息存储的主体文件,用于存储Producer端写入的消息主体内容。 * 组织形式: * 所有topic的消息都存储在同一个CommitLog文件中,确保消息发送时按顺序写文件,以追求极致的消息存储性能和高吞吐量。 * 单个文件大小默认1G,文件名长度为20位,左边补零,剩余为起始偏移量。例如,第一个文件名为00000000000000000000,代表起始偏移量为0,文件大小为1G。当第一个文件写满后,第二个文件名为00000000001073741824,以此类推。 * 存储内容:消息内容不是定长的,每条消息在CommitLog中的存储结构包括消息长度、消息体、消息属性等。 2. ConsumeQueue文件 * 作用:ConsumeQueue是消息消费队列文件,主要用于提高消息消费的性

By Zhewen Cao
记一次消息推送业务的探索

记一次消息推送业务的探索

什么是服务端消息推送 服务端消息推送(Push Notification)是一种技术概念,指的是从服务端实时发送信息到客户端的过程。在移动互联网和Web应用中,服务端消息推送被广泛用于提升用户体验、增加用户粘性和活跃度。以下是服务端消息推送的详细解释: 定义 服务端消息推送,简称推送(Push),是指服务器主动向客户端发送信息,而无需客户端显式请求。这种方式使得信息能够实时地到达用户,无需用户手动刷新页面或应用。 实现方式 服务端消息推送的实现方式多种多样,主要包括以下几种: 1. 短轮询(Short Polling): * 客户端定时向服务器发送请求,询问是否有新消息。 * 优点:实现简单。 * 缺点:实时性差,服务器资源消耗大。 2. 长轮询(Long Polling): * 客户端向服务器发送请求后,服务器会保持连接,直到有新消息才返回响应并关闭连接。 * 优点:相比短轮询,实时性更好,资源消耗更少。

By Zhewen Cao
Redis Stream:构建高效、可靠的消息队列新选择

Redis Stream:构建高效、可靠的消息队列新选择

引言 随着分布式系统的日益复杂,消息队列作为一种重要的中间件,在解决系统间异步通信、负载均衡、数据缓冲等方面发挥着不可替代的作用。Redis,作为一个高性能的键值存储系统,在5.0版本中引入了Stream这一新的数据结构,为构建高效、可靠的消息队列提供了新的选择。本文将深入探讨Redis Stream的架构、特性及其在消息队列中的应用。 Redis Stream概述 Redis Stream是Redis 5.0版本引入的一种新的数据结构,它提供了一种持久化的、可查询的、可扩展的消息队列服务。Stream类型的数据结构类似于一个日志系统,数据被添加到Stream的末尾,并且每个数据都会被分配一个唯一的序列号(Entry ID),这个序列号是按照时间顺序递增的。这使得Stream类型非常适合用于实现消息队列、事件驱动的系统、数据流处理等场景。 Stream的底层结构 Redis Stream的底层结构主要由基数树(Radix Tree)和Listpack组成。基数树用于索引Listpack,而Listpack用于存储Stream Entry。每个Stream Ent

By Zhewen Cao
MQTT协议帧结构解析

MQTT协议帧结构解析

MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的轻量级消息传输协议,广泛应用于物联网(IoT)、移动应用等领域。MQTT的报文帧结构是其通信的基础,主要由三部分组成:固定报头(Fixed Header)、可变报头(Variable Header)和有效载荷(Payload)。以下是对这三部分的详细解析: 1. 固定报头(Fixed Header) 固定报头是MQTT报文帧的开始部分,每个MQTT报文都必须包含固定报头。它占据报文帧的前两个字节,具体结构如下: * 报文类型(4位):第一个字节的前4位(7-4位)用于标识报文类型,MQTT协议定义了16种报文类型,但并非所有类型都已被使用或定义。常见的报文类型包括CONNECT(连接服务器)、CONNACK(连接确认)、PUBLISH(发布消息)、PUBACK(发布确认)、SUBSCRIBE(订阅主题)、SUBACK(订阅确认)等。 * 标志位(

By Zhewen Cao
MQTT协议技术解析与应用场景探索

MQTT协议技术解析与应用场景探索

引言 在物联网(IoT)和机器对机器(M2M)通信日益普及的今天,MQTT(Message Queuing Telemetry Transport)协议以其轻量级、高效和可靠的特点,成为了连接远程设备、实现实时消息传输的重要工具。本文将深入解析MQTT协议的核心特性,并探讨其在多个领域的应用场景。 MQTT协议概述 MQTT(消息队列遥测传输)是一种基于发布/订阅模式的轻量级通信协议,由IBM在1999年发布。它构建在TCP/IP协议之上,特别适用于硬件性能有限、网络状况不佳的远程设备。MQTT的协议设计简单、数据包头部小,这使得它在低带宽、高延迟的网络环境中运行效率极高。 核心特性 1. 发布/订阅模式:MQTT采用发布/订阅模式,消息不是直接由发送者发送到接收者,而是通过MQTT服务器(也称为MQTT代理或Broker)分发。这种模式解除了应用程序之间的耦合,提高了系统的灵活性和可扩展性。 2. 低开销与高效:MQTT协议的数据包头部非常小(固定长度为2字节),并且协议交换最小化,这

By Zhewen Cao
CICD

CICD

CI/CD 的概述 CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。 CI/CD 的核心概念是持续集成、持续交付和持续部署。它是作为一个面向开发和运营团队的解决方案,主要针对在集成新代码时所引发的问题(也称为:“集成地狱”)。 CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。 这些关联的事务通常被统称为 CI/CD 流水线(pipeline),由开发和运维团队以敏捷方式协同支持。 * 哦!原来是这个东东。其实平时开发需求都在用集成平台,但是却不知道它背后的概念。 CI 持续集成(Continuous Integration) 协同开发是目前主流的开发方式,也就是多位开发人员可以同时处理同一个应用的不同模块或者功能。 但是,如果企业计划在同一天,将所有开发分支代码集成在一起,最终可能会花费很多时间和进行很多重复劳动,费事费力。因为代码冲突是难以避免的。 如果开发人员本地的环境和线上不一致的话,那么这个问题就更加复杂了。 持续集成

By Zhewen Cao
商业智能报表(Business Intelligence)

商业智能报表(Business Intelligence)

企业BI报表,即商业智能(Business Intelligence)报表,是一种利用商业智能技术将企业中的数据转换为有意义的信息和可视化展示的报告。它通过将数据转化为直观、易于理解的图表和指标,帮助决策者快速捕捉关键业务信息,识别趋势和模式,从而做出更加精准和及时的决策。以下是关于企业BI报表的详细解析: 一、BI报表的定义与功能 定义: * BI报表是一种数据分析和可视化工具,通过商业智能技术,将企业内部的海量数据转化为有价值的信息和图表,支持企业的决策过程。 功能: 1. 数据可视化:将复杂的数据转化为直观的图表和图形,便于理解和分析。 2. 实时更新:提供实时或近乎实时的数据更新,确保决策者掌握最新信息。 3. 多维分析:支持从多个角度对数据进行深入分析,如钻取、切片、旋转等。 4. 自助式分析:让不懂编程的业务人员也能自行完成数据分析任务,提高分析效率。 5. 决策支持:为决策者提供数据驱动的决策支持,帮助制定更科学的战略和计划。 二、BI报表在行业中的应用 电商行业: * 通过BI报表,电商企业可以实时监控和分析销售数据,发

By Zhewen Cao

发布-订阅模式:构建高效、解耦的通信架构

引言 在现代软件系统中,组件之间的通信是构建复杂功能的关键。随着系统规模的扩大和复杂度的增加,传统的直接通信方式(如请求-响应模式)逐渐暴露出耦合度高、扩展性差等问题。为了解决这些问题,发布-订阅模式(Publish-Subscribe Pattern)应运而生,它提供了一种高效、解耦的通信方式,广泛应用于消息队列、事件驱动架构、物联网(IoT)等领域。 发布-订阅模式概述 发布-订阅模式是一种消息传递模式,它允许消息的发送者(发布者)和接收者(订阅者)之间不直接进行通信,而是通过一个共同的通信渠道(消息代理或事件总线)来交换消息。发布者将消息发布到通道上,而不关心哪些订阅者会接收到这些消息;订阅者则从通道上订阅自己感兴趣的消息,并处理这些消息,而不需要知道这些消息是由谁发布的。 核心组件 * 发布者(Publisher):负责将消息发布到消息代理上。发布者不需要知道有哪些订阅者会接收这些消息。 * 订阅者(Subscriber):从消息代理上订阅自己感兴趣的消息,并处理这些消息。订阅者不需要知道这些消息是由谁发布的。 * 消息代理(Message Bro

By Zhewen Cao
RAFT协议的term

RAFT协议的term

Follower的任期编号与同步Master的数据之间有一定的间接关系,但这种关系并非直接的数据同步过程,而是涉及到选举和日志复制的一致性保证。 任期编号的作用 在Raft协议中,任期编号(Term)是一个关键概念,用于标识集群中的一次选举周期。每个节点都会维护一个当前的任期编号,并在进行选举、日志复制等操作时携带该编号。任期编号的主要作用是确保集群中的操作是有序的,避免因为网络延迟或分区等原因导致的操作冲突。 Follower的任期编号与选举 Follower节点的任期编号会在以下情况下发生变化: * 当Follower在一段时间内没有收到Leader的心跳消息时,它会认为Leader可能已经宕机,此时Follower会增加自己的任期编号,并转变为Candidate状态,发起选举。 * 如果Follower收到了来自其他节点(如新当选的Leader)的更高任期编号的心跳消息,它会更新自己的任期编号,并承认该节点的Leader地位。 任期编号与数据同步 虽然任期编号本身并不直接参与数据的同步过程,但它确保了数据同步的正确性和一致性。在Raft协议中

By Zhewen Cao
RocketMQ DLedger模式

RocketMQ DLedger模式

引入DLedger模式在RocketMQ中是一个重要的演进,它主要解决了Broker组内自动故障转移的问题,并提升了系统的高可用性和数据一致性。以下是对引入DLedger模式的详细解释: 一、DLedger模式的定义 DLedger是OpenMessaging中一个基于Raft协议的CommitLog存储库实现。从RocketMQ 4.5.0版本开始,RocketMQ引入DLedger模式,利用Raft算法来管理Broker的日志复制和选举过程,从而实现了Broker组内的自动故障转移。 二、引入DLedger模式的目的 在RocketMQ 4.5版本之前,RocketMQ主要采用Master/Slave部署模式,这种模式虽然提供了一定的高可用性,但在故障转移方面存在缺陷。例如,当Master节点宕机时,需要人工手动进行重启或切换,无法自动将一个Slave节点转换为主节点。DLedger模式的引入正是为了解决这一问题,通过自动选举新的Leader节点,确保Broker集群的高可用性。 三、DLedger模式的核心优势 1. 自动故障转移:当Master节点宕机时,D

By Zhewen Cao
RocketMQ的选举机制

RocketMQ的选举机制

RocketMQ的选举机制,特别是在引入DLedger模式后,主要依赖于Raft协议来实现Broker节点的高可用性和主从切换。以下是对RocketMQ选举机制的详细解析: 一、Raft协议基础 Raft是一种用于管理复制日志的共识算法,它通过选举一个领导者(Leader)来处理所有客户端的请求。Raft将集群中的节点分为三种角色:领导者(Leader)、跟随者(Follower)和候选者(Candidate)。 * 领导者(Leader):负责处理所有客户端的请求,以及将日志条目复制到所有跟随者。 * 跟随者(Follower):简单地响应来自领导者或候选者的请求。 * 候选者(Candidate):当跟随者在一定时间内没有收到领导者的心跳消息时,它会转变为候选者并开始一次选举,以尝试成为新的领导者。 二、选举过程 在RocketMQ中,当Master节点宕机后,选举过程大致如下: 1. 超时触发选举: * 每个Follower节点都会维护一个超时时间,用于检测Leader节点是否存活。

By Zhewen Cao
平衡树和红黑树

平衡树和红黑树

平衡树和红黑树是计算机科学中用于组织数据的重要数据结构,它们各自具有特定的特性和应用场景。 平衡树 平衡树是一类动态的数据结构,其最大的特点是能够维护修改操作(如插入、删除)、前驱后继操作、查找数k的排名、查找第k大等功能,同时保持树的平衡状态,以确保这些操作的高效性。平衡树通过特定的算法(如旋转操作)在插入或删除节点后重新调整树的结构,以保持树的平衡,从而使得树的高度保持在较低的水平,进而保证操作的高效性。 红黑树 红黑树是一种自平衡的二叉搜索树(Binary Search Tree),它在计算机科学中用于组织数据,如数字的块。红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees),后来被Guibas和Robert Sedgewick修改为如今的“红黑树”。红黑树是一种特化的AVL树(平衡二叉树),它在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。 红黑树的特点包括: 节点颜色:每个节点都包含一个额外的存储位来表示节点的颜色,可以是红色或黑色。 自平衡特

By Zhewen Cao