【RabbitMQ】应用问题、仲裁队列(Raft算法)和HAProxy负载均衡
🔥个人主页: 中草药
🔥专栏:【中间件】企业级中间件剖析
一、幂等性保障
什么是幂等性?
幂等性是指对一个系统进行重复调用(相同参数),无论同一操作执行多少次,这些请求对系统的影响都是相同的效果,结果都与执行一次相同。
消息可能因网络重传、消费者异常重启、消息重复投递等导致重复消费,需确保多次处理不会产生副作用。
RabbitMQ 重复消息的来源
场景 | 原因 |
---|---|
生产者重复发送 | 生产者未收到 Broker 的 ACK,触发重试机制(如网络抖动、Broker 未及时响应) |
消费者重复消费 | 消费者处理消息后未及时 ACK,消息重新入队(如消费者崩溃、处理超时) |
Broker 消息堆积 | 消息因队列配置(如死信队列、TTL)被多次重新投递 |
MQ的幂等性保障
对于 MQ 而言,幂等性是指同一条消息,多次消费,对系统的影响是相同的。
一般消息中间件的消息传输保障分为三个层级。
- At most once: 最多一次。消息可能会丢失,但绝不会重复传输.
- At least once: 最少一次。消息绝不会丢失,但可能会重复传输.
- Exactly once: 恰好一次。每条消息肯定会被传输一次且仅传输一次.
RabbitMQ 支持 "最多一次" 和 "最少一次"。对于 "恰好一次", 目前 RabbitMQ 还做不到,不仅是 RabbitMQ, 目前市面上主流的消息中间件,都做不到这一点.
实现方案
1、唯一标识 + 去重表
原理:为每条消息分配唯一 ID(如 UUID、业务主键),消费前检查该 ID 是否已处理。
实现步骤:
生产者:在消息头(Header)中添加唯一标识(如 message_id
)。
消费者:
消费前查询去重表(如 Redis 或数据库),判断 message_id
是否存在。
若不存在,处理消息并写入去重表;若存在,直接 ACK 消息。
优化:
去重表设计:可以使用 Redis 的原子性操作 setnx 来保证幂等性,将唯一 ID 作为 key 放到 redis 中(SETNX messageID 1). 返回 1,说明之前没有消费过,正常消费。返回 0,说明这条消息之前已消费过,抛弃.
过期时间:为去重表记录设置 TTL,避免数据无限膨胀。
2、业务逻辑判断
在业务逻辑层面实现消息处理的幂等性。
例如: 通过检查数据库中是否已存在相关数据记录,或者使用乐观锁机制来避免更新已被其他事务更改的数据,再或者在处理消息之前,先检查相关业务的状态,确保消息对应的操作尚未执行,然后才进行处理,具体根据业务场景来处理
二、顺序性保障
在分布式系统中,消息的顺序性保障是确保消息按照生产者发送的先后顺序被消费者处理的机制。RabbitMQ 作为消息中间件,默认不提供严格的全局顺序保证,但可通过特定设计和配置实现部分场景下的顺序性。
顺序性问题的根源
RabbitMQ 默认无法保证全局顺序性的原因:
-
多消费者并行消费:一个队列绑定多个消费者时,消息可能被无序处理。
-
消息重试与重新入队:消费者处理失败的消息重新入队后,可能插入到队列中间。
-
交换机路由策略:使用
direct
、topic
或headers
交换机时,消息可能分散到不同队列。 -
网络延迟与分区:网络抖动可能导致消息到达 Broker 的顺序与发送顺序不一致。
顺序性保障方案
1、单一队列 + 单一消费者
-
原理:同一队列仅绑定一个消费者,串行处理消息。
-
适用场景:低吞吐量但对顺序性要求极高的场景(如金融交易)。
-
实现:
-
生产者将所有消息发送到同一队列。
-
队列仅允许一个消费者连接(设置
prefetch_count=1
)。 -
消费者禁用自动 ACK,处理完一条消息后手动确认。
-
2、分区消费
单个消费者的吞吐太低了,当需要多个消费者以提高处理速度时,可以使用分区消费,把一个队列分割成多个分区,每个分区由一个消费者处理,以此来保持每个分区内消息的顺序性.
Rabbitmq本身并不支持分区消费,需要业务逻辑去实现,或者借助spring-cloud-stream来实现
Partitioning with the RabbitMQ Binder :: Spring Cloud Stream
实现效果演示
3、消息确认机制
使用手动消息确认机制,消费者在处理完一条消息后,显式地发送确认,这样RabbitMQ才会移除并继续发送下一条消息.
4、业务逻辑控制
在某些情况下,即使消息乱序到达,也可以在业务逻辑层面实现顺序控制,比如通过在消息中嵌入序列号,并在消费时根据这些信息来处理
由于RabbitMO本身并不保证全局的严格顺序性,所以以上所提供的方案往往需要搭配混合使用,特别是在分布式系统中,在实际应用开发中,根据具体的业务需求,需要结合多种策略来实现所需要的顺序保证.
三、消息积压
常见原因
1、消息生产过快:在高流量或者高负载的情况下,生产者以极高的速率发送消息,超过了消费者的处理能力,包括一些流量激增的情况(活动促销)
2、消费者处理能力不足:消费者处理处理消息的速度跟不上消息生产的速度,也会导致消息在队列中积压,可能原因有:
- 消费端业务逻辑复杂,耗时长
- 消费端代码性能低
- 系统资源限制,如 CPU、内存、磁盘 I/O 等也会限制消费者处理消息的效率.
- 异常处理处理不当。消费者在处理消息时出现异常,导致消息无法被正确处理和确认.
3、网络问题:因为网络延迟或不稳定,消费者无法及时接收或确认消息,最终导致消息积压
4、RabbitMQ 服务器配置问题
- 未设置合理的
prefetch count
:消费者一次拉取过多消息,导致内存压力。 - 队列未持久化:重启后消息丢失,需重新处理积压。
- 未使用惰性队列(Lazy Queue):高吞吐场景下内存不足。
解决方案
1)提高消费者效率
a. 增加消费者实例数量,比如新增机器
b. 优化业务逻辑,比如使用多线程来处理业务
c. 设置 prefetchCount, 当一个消费者阻塞时,消息转发到其他未阻塞的消费者.
d. 消息发生异常时,设置合适的重试策略,或者转入到死信队列
2)限制生产者速率。比如流量控制,限流算法等
a. 流量控制:在消息生产者中实现流量控制逻辑,根据消费者处理能力动态调整发送速率
b. 限流:使用限流工具,为消息发送速率设置一个上限
c. 设置过期时间。如果消息过期未消费,可以配置死信队列,以避免消息丢失,并减少对主队列的压力
3)资源与配置优化 比如升级 RabbitMQ 服务器的硬件,调整 RabbitMQ 的配置参数等
在选择策略的时候需要实际考虑业务的需求和系统的实际承载能力
四、Raft算法
Raft 是一种专为 分布式一致性 设计的共识算法。其核心目标是通过 强可理解性 解决传统 Paxos 算法的复杂性,同时保证分布式系统的 高可用性 和 数据一致性。
分解问题
将共识问题拆分为三个子问题:
领导人选举(Leader Election):系统中仅有一个 Leader 负责处理客户端请求。
日志复制(Log Replication):Leader 将操作日志同步到所有 Follower 节点。
安全性(Safety):确保所有节点最终状态一致,避免数据冲突。
核心机制
节点角色
-
Leader:唯一处理客户端请求的节点,负责日志复制和心跳维持。
-
Follower:被动接收 Leader 的日志和心跳,不主动响应客户端,不直接处理客户端请求。
-
Candidate:选举过程中的临时角色(Follower 超时未收到心跳后成为 Candidate,开始尝试通过 投票过程成为新的Leader)。
正常的情况下,集群中只有一个Leader,剩下的节点都是follower
任期(Term)
-
全局单调递增的整数(类似“逻辑时钟”),每个任期至多一个 Leader。
-
节点间通信携带 Term,用于检测过期信息(如旧 Leader 的请求会被拒绝)。
Raft 将时间划分成任意长度的任期(term).每一段任期从一次选举开始,在这个时候会有一个或者多个candidate 尝试去成为leader,在成功完成一次leaderelection之后,一个leader就会一直节管理集群直到任期结束,在某些情况下,一次选举无法选出 leader,这个时候这个任期会以没有leader 而结束(如下图t3).同时一个新的任期(包含一次新的选举)会很快重新开始
通信
Raft算法中的服务器节点之间采用RPC进行通信,主要由两类RPC请求:
-
RequestVote RPCs: 请求投票,由 candidate 在选举过程中发出
-
AppendEntries RPCs: 追加条目,由leader 发出,用来做日志复制和提供心跳机制
选举过程
可以通过此网站动画来理解投票选举过程Raft Consensus Algorithm
Raft 采用一种心跳机制来触发 leader 选举,当服务器启动的时候,都是follow状态.如果follower在election timeout内没有收到来自leader的心跳(可能没有选出leader,也可能leader挂了,或者leader与follower之间网络故障),则会主动发起选举.
步骤如下:
1、率先超时的节点,自增当前任期号然后切换为 candidate 状态,并投自己一票
2、以并行的方式发送一个 RequestVote RPCs 给集群中的其他服务器节点(企图得到它们的投票)
3、等待其他节点的回复
此时可能会出现三种结果
a、赢得选举,自己成为Leader(包括自己的一票),新的Leader会给其他节点发布消息,避免其余节点触发新的选举
b、其他节点赢得了选举,未成功选举的节点在接受到消息时,会自动转化为follower
c、一段时间内没有收到majority投票,保持candidate状态,重新发出选举
没有任何节点获得majority投票.比如所有的 follower 同时变成 candidate,然后它们都将票投给自己,那这样就没有 candidate 能得到超过半数的投票了.当这种情况发生的时候,每个candidate 都会进行一次超时响应,然后通过自增任期号来开启一轮新的选举,并启动另一轮的RequestVote RPCs.如果没有额外的措施,这种无结果的投票可能会无限重复下去.
为了解决上述问题,Raft 采用 随机选举超时时间(randomized election timeouts)来确保很少产生无结果的投票,并且就算发生了也能很快地解决。为了防止选票一开始就被瓜分,选举超时时间是从一个固定的区间(比如,150-300ms)中随机选择。这样可以把服务器分散开来以确保在大多数情况下会只有一个服务器率先结束超时,那么这个时候,它就可以赢得选举并在其他服务器结束超时之前发送心跳。
五、仲裁队列
RabbitMQ 的 仲裁队列(Quorum Queues) 是 RabbitMQ 3.8 版本引入的一种新型队列类型,专为 高可用性和数据一致性 场景设计。它基于 Raft 一致性协议实现,替代了传统的镜像队列(Mirrored Queues),在节点故障时能更可靠地保证数据安全。
在集群环境之中,如果某一节点宕机故障,其中原本的信息也会发生丢失,仲裁队列可以在rabbitmq之间进行队列数据的复制,保障集群系统的高可用性。
节点宕机之前
节点宕机后,消息丢失了
使用仲裁队列
@Bean("quorumQueue")
public Queue quorumQueue() {return QueueBuilder.durable("quorum_queue").quorum().build();
}
可以观察到,仲裁队列后面有一个+2,表示队列中有两个镜像节点,点进去可以看到队列详细
此时如果发生单个节点宕机,队列里的消息不会丢失
六、HAProxy负载均衡
面对大量的业务访问,高并发请求,试想如果一个集群中有3个节点,我们在写代码时,访问哪个节点呢?
答案是访问任何一个节点都可以.
这时候就存在两个问题:
1、如果我们访问的是node1,但是node1挂了,咱们的程序也会出现问题,所以最好是有一个统一的入口,一个节点故障时,流量可以及时转移到其他节点.
2、如果所有的客户端都与node1建议连接,那么node1的网络负载必然会大大增加,而其他节点又由于没有那么多的负载而造成硬件资源的浪费.
这时,负载均衡显得尤为重要,HAProxy(High Availability Proxy)是一款开源的 高性能TCP/HTTP负载均衡器 和 反向代理,广泛用于分发流量、提升系统可用性和扩展性。
快速上手
Ubuntu安装
#更新软件包
sudo apt-get update#查找haproxy
sudo apt listlgrep haproxy#安装haproxy
sudo apt-get install haproxy
验证安装
#查看服务状态
sudo systemctl status haproxy#查看版本
haproxy -v#如果要设置HAProxy服务开机自启,可以使用
sudo systemctl enable haproxy
修改haproxy.cfg
vim /etc/haproxy/haproxy.cfg
# haproxy web 管理界面
listen stats #设置一个监听器,统计HAProxy的统计信息bind *:8100 #指定了监听器绑定到的IP地址和端口mode http #监听器的工作模式为HTTPstats enable #启用统计页面stats realm Haproxy\ Statisticsstats uri /stats auth admin:admin #登录账号密码
# 配置负载均衡
Listen rabbitmgbind *:5670mode tcp #Rabbitmq使用的AMQP协议是一个基于TCP的协议balance roundrobin #制定负载均衡策略为轮询server rabbitmgl 127.0.0.1:5672 check inter 5000 rise 2 fall 3server rabbitmq2 127.0.0.1:5673 check inter 5000 rise 2 fall 3server rabbitmg3 127.0.0.1:5674 check inter 5000 rise 2 fall 3
重启HAProxy
sudo systemctl restart haproxy
此时可以通过访问 http://ip:8100/ 查看HAProxy
修改配置文件
spring:rabbitmq:addresses: amqp://study:study@ip:5670/Test
此时成功实现了负载均衡,也实现了节点宕机后,流量的及时转移
自信与骄傲有异:信者常沉着,而骄傲者常浮扬。 ——梁启超
🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀
以上,就是本期的全部内容啦,若有错误疏忽希望各位大佬及时指出💐
制作不易,希望能对各位提供微小的帮助,可否留下你免费的赞呢🌸
相关文章:
【RabbitMQ】应用问题、仲裁队列(Raft算法)和HAProxy负载均衡
🔥个人主页: 中草药 🔥专栏:【中间件】企业级中间件剖析 一、幂等性保障 什么是幂等性? 幂等性是指对一个系统进行重复调用(相同参数),无论同一操作执行多少次,这些请求…...
国产密码新时代!华测国密 SSL 证书解锁安全新高度
在数字安全被提升到国家战略高度的今天,国产密码算法成为筑牢网络安全防线的关键力量。华测国密SSL证书凭借其强大性能与贴心服务,为企业网络安全保驾护航,成为符合国家安全要求的不二之选! 智能兼容,告别浏览器适配…...
【Linux篇章】Linux 进程信号2:解锁系统高效运作的 “隐藏指令”,开启性能飞跃新征程(精讲捕捉信号及OS运行机制)
本篇文章将以一个小白视角,通俗易懂带你了解信号在产生,保存之后如何进行捕捉;以及在信号这个话题中;OS扮演的角色及背后是如何进行操作的;如何理解用户态内核态;还有一些可以引出的其他知识点;…...
C# 基础 try-catch代码块
try-catch代码块是C#中用于异常处理的核心机制。异常是在程序执行过程中可能出现的错误,而try-catch代码块允许您在执行代码时捕获并处理这些异常。 一、基础结构 try {//可能抛出异常的代码 } catch (ArgumentException ex) {//处理特定异常 } catch (Excepti…...
为什么 mac os .bashrc 没有自动加载?
原因说明 在macOS中,默认情况下,终端使用的是Bash或Zsh作为shell。对于较新版本的macOS(从Catalina开始),默认的shell已经切换为Zsh。因此,如果你正在使用Zsh,.bashrc文件不会自动生效…...
【HarmonyOS Next之旅】DevEco Studio使用指南(二十二)
目录 1 -> 开发静态共享包 1.1 -> 创建库模块 1.2 -> 编译库模块 2 -> 开发动态共享包 2.1 -> 使用约束 2.2 -> 开发动态共享包 2.2.1 -> 创建HSP模块 2.2.2 -> 编译HSP模块 3 -> 发布共享包 1 -> 开发静态共享包 HAR(Harmony Archive…...
QT6.8安装教程
官网下载 链接: Index of /official_releases/online_installers 这个比较慢 建议去 清华大学开源软件镜像站:Index of /qt/archive/online_installers/4.9/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 根据自己什么系统选择 点击打开…...
【Rust泛型】Rust泛型使用详解与应用场景
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
一周学完计算机网络之三:1、数据链路层概述
简单的概述 数据链路层是计算机网络体系结构中的第二层,它在物理层提供的基本服务基础上,负责将数据从一个节点可靠地传输到相邻节点。可以将其想象成一个负责在两个相邻的网络设备之间进行数据 “搬运” 和 “整理” 的 “快递中转站”。 几个重要概念…...
配置ssh无密登录
在root下有一个.ssh文件夹,它的下面有一个known_hosts文件,这个里面记录了哪些其他的主机通过ssh访问过当前的主机。 免密登录原理 (2)生成公钥和私钥 具体操作: 1. 进入 hadoop1001 2. 运行命令:ssh-keyg…...
南京邮电大学金工实习答案
一、金工实习的定义 金工实习是机械类专业学生一项重要的实践课程,它绝非仅仅只是理论知识在操作层面的简单验证,而是一个全方位培养学生综合实践能力与职业素养的系统工程。从本质上而言,金工实习是学生走出教室,亲身踏入机械加…...
无偿帮写毕业论文
以下教程教你如何利用相关网站和AI免费帮你写一个毕业论文。毕竟毕业论文只要过就行,脱产学习这么多年,终于熬出头了,完成毕设后有空就去多看看亲人好友,祝好! 一、找一个论文模板(最好是overleaf) 废话不多说&#…...
【高数上册笔记01】:从集合映射到区间函数
【参考资料】 同济大学《高等数学》教材樊顺厚老师B站《高等数学精讲》系列课程 (注:本笔记为个人数学复习资料,旨在通过系统化整理替代厚重教材,便于随时查阅与巩固知识要点) 仅用于个人数学复习,因为课…...
大数据从专家到小白
文章目录 数据湖技术Apache Iceberg FlinkHiveHadoopHDFS 数据湖技术 Apache Iceberg Iceberg是一个通用的表格式(数据组织格式),它可以适配Presto,Spark等引擎提供高性能的读写和元数据管理功能。 Flink Hive Hadoop HDFS...
特励达力科LeCroy推出Xena Freya Z800 800GE高性能的800G以太网测试平台
Xena Freya Z800 800GE 是由全球领先的测试与测量解决方案提供商特励达力科公司(Teledyne LeCroy)开发的高性能以太网测试平台,专为满足从10GE到800GE数据中心互连速度的需求而设计。特励达力科公司在网络测试领域拥有超过50年的技术积累&…...
LeetCode 热题 100 98. 验证二叉搜索树
LeetCode 热题 100 | 98. 验证二叉搜索树 大家好,今天我们来解决一道经典的二叉树问题——验证二叉搜索树。这道题在 LeetCode 上被标记为中等难度,要求判断给定的二叉树是否是一个有效的二叉搜索树(BST)。 问题描述 给你一个二…...
Linux文件编程——open函数
在 Linux 系统中,文件操作不仅仅通过高级语言的标准库进行,底层的文件操作是通过 系统调用 来实现的。系统调用 是用户空间与操作系统内核之间的接口,允许程序请求操作系统提供的服务,包括文件读写、内存管理、进程控制等。本文将…...
Linux-Ext系列文件系统
1.理解硬件 1.1磁盘 机械磁盘是计算机中唯⼀的⼀个机械设备 磁盘---外设 慢 容量⼤,价格便宜 1.2磁盘的物理结构 1.3磁盘的存储结构 扇区:是磁盘存储数据的基本单位,512字节,块设备 如何定位⼀个扇区呢? 可以先定…...
Multisim14使用教程详尽版--(2025最新版)
一、Multisim14前言 1.1、主流电路仿真软件 1. Multisim:NI开发的SPICE标准仿真工具,支持模拟/数字电路混合仿真,内置丰富的元件库和虚拟仪器(示波器、频谱仪等),适合教学和竞赛设计。官网:艾…...
C——猜数字游戏
前面我们已经学习了C语言常见概念,数据类型和变量以及分置于循环的内容,现在我们可以将这些内容结合起来写一个有趣的小游戏。下面正式开始我们今天的主题——猜数字游戏的实现。 猜数字游戏的要求: 1.电脑自动生成1~100的随机数。 2.玩家…...
【iOS】SDWebImage源码学习
SDWebImage源码学习 文章目录 SDWebImage源码学习前言SDWebImage缓存流程sd_setImageWithURL(UIImageViewWebCache层)sd_internalSetImageWithURL(UIViewWebCache层)loadImageWithURL(SDWebManger层)queryCacheOperationForKey(SDImageCache层)删除缓存 callDownloadProcessFor…...
.Net HttpClient 处理响应数据
HttpClient 处理响应数据 1、初始化及全局设置 //初始化:必须先执行一次 #!import ./ini.ipynb2、处理响应状态 //判断响应码:正常 {var response await SharedClient.GetAsync("api/Normal/GetAccount?id1");if(response.StatusCode Sy…...
【心海资源】【最新话费盗u】【未测】提币对方官方波场+没有任何加密+无后门+前端VUE
提笔接口请使用官方提笔,第三方提笔都有风险 后门你们也扫扫,这种源码风险大,自己玩玩学习进行了 重要的事情说三遍 !!!!!!!!!&…...
Python中的标识、相等性与别名:深入理解对象引用机制
在Python编程中,理解变量如何引用对象以及对象之间的比较方式是至关重要的基础概念。本文将通过Lewis Carroll的笔名示例,深入探讨Python中的对象标识、相等性判断以及别名机制。 别名现象:变量共享同一对象 >>> charles {name: …...
Java 1.8(也称为Java 8)
Java 1.8(也称为Java 8)是Oracle于2014年发布的一个重要版本,引入了许多新特性和改进,极大地提升了Java语言的表达力和开发效率。以下是Java 1.8的主要新特性: ### 1. Lambda表达式 Lambda表达式是Java 1.8最具革命性…...
LVGL简易计算器实战
文章目录 📁 文件结构建议🔹 eval.h 表达式求值头文件🔹 eval.c 表达式求值实现文件(带详细注释)🔹 ui.h 界面头文件🔹 ui.c 界面实现文件🔹 main.c 主函数入口✅ 总结 项目效果&…...
Linux | Uboot-Logo 修改文档(第十七天)
01 Uboot 修改 首先我们在 home 目录下新建一个文件夹 imx6ull,然后打开 i.MX6ULL 终结者光盘资料\05_uboot linux源码,在 window 下解压下图箭头所指的压缩包,解压后分别得到 linux-imx-rel_imx_4.1.15_2.1.0_ga_20200323.tar.gz 和 uboot-imx-rel_imx_4.1.15_2.1.0_…...
数字孪生概念
数字孪生(Digital Twin) 是指通过数字技术对物理实体(如设备、系统、流程或环境)进行高保真建模和实时动态映射,实现虚实交互、仿真预测和优化决策的技术体系。它是工业4.0、智慧城市和数字化转型的核心技术之一。 1. …...
c++STL-string的使用
这里写自定义目录标题 string的使用string写成类模板的原因string的版本举例构造、析构函数和赋值重载构造函数和析构函数operator Iterators迭代器begin和endrbegin和rendcbegin和cend,crbegin和crend(c11) capacity容量有关函数不同编译器下…...
总结C/C++中程序内存区域划分
C/C程序内存分配的⼏个区域 1..栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的指令集中,效率很⾼,…...
C# 方法(方法重载)
本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 方法重载 一个类中可以有多个…...
Dockerfile 完全指南:从入门到最佳实践
Dockerfile 完全指南:从入门到最佳实践 1. Dockerfile 简介与作用 Dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像的指令。它允许开发者通过简单的指令定义镜像的构建过程,实现自动化、可重复的镜像构建。 主要作用…...
DEEPPOLAR:通过深度学习发明非线性大核极坐标码(2)
目录 2.问题的提出和背景 2.1 信道编码 2.2.极化码 极坐标编码 极坐标解码 原文:《DEEPPOLAR: Inventing Nonlinear Large-Kernel Polar Codes via Deep Learning》 2.问题的提出和背景 2.1 信道编码 信道编码是一种为传输添加冗余的技术,使其对…...
ESP32-S3 学习笔记(1)
ESP32-S3 学习笔记(1) 背景环境添加工程文件材料准备轻触开关的正负极 背景 闲来无事,看到立创论坛上有许多大佬开源的项目,甚是厉害,于是决定自己也来搞一搞,同时可以做一些技术积累,看了很…...
Python Cookbook-7.9 访问 MySQL 数据库
任务 想访问一个 MySQL 数据库。 解决方案 MySQLdb 模块正是为这种任务而设计的: import MySQLdb #创建一个连接对象,再用它创建游标 con = MySQLdb.connect(host = "127.0.0.1", port = 3306, user = "joe",<...
docker安装superset实践
1、拉取docker镜像 docker pull apache/superset:latest 2、安装superset容器 mkdir /usr/local/develop/docker/superset/ -p touch /usr/local/develop/docker/superset/superset_config.py superset_config.py配置文件如下: SQLALCHEMY_DATABASE_URI mysql:…...
Web开发—Vue工程化
文章目录 前言 Vue工程化 一、介绍 二、环境准备 1.介绍create-vue 2.NodeJS安装 3.npm介绍 三,Vue项目创建 四,项目结构 五,启动项目 六,Vue项目开发流程 七,API风格 前言 Vue工程化 前面我们在介绍Vue的时候&#…...
什么是硬件中断请求号?什么是中断向量号?
一、硬件中断请求号(IRQ,Interrupt Request Number) 定义: 硬件中断请求号(IRQ)是硬件设备向CPU发送中断请求时使用的唯一标识符,用于区分不同的中断源。例如,键盘、硬盘等外设…...
[Java实战]Spring Boot 定时任务(十五)
[Java实战]Spring Boot 定时任务(十五) 一、定时任务的应用场景 数据同步:每日凌晨同步第三方数据状态检查:每5分钟扫描订单超时未支付资源清理:每小时清理临时文件报表生成:每月1号生成财务统计报表通知…...
OpenWrt开发第7篇:OpenWrt配置支持Web界面
文/指尖动听知识库-谷谷 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:Openwrt开发-基于Raspberry Pi 4B开发板 OpenWrt的luci是一个基于Web的图形化管理界面,为用户提供了直观的操作方式,无需命令行即可完成大部分功能的配置。 1.在终端输入ma…...
【多模态】IMAGEBIND论文阅读
every blog every motto: Although the world is full of suffering, it is full also of the overcoming of it 0. 前言 IMAGEBIND 多模态论文梗概 IMAGEBIND是一种夸模态的神经网络,以图片为中心,联合六中模态的网络(图片、文…...
【C语言干货】二维数组传参本质
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、二维数组的内存布局 1.二维数组的实质2.二维数组的地址关系 二、二维数组传参的本质 1.参数传递的退化机制2.三种等效的函数声明方式 总结 前言 提示&#…...
基于SpringBoot的抽奖系统测试报告
一、编写目的 本报告为抽奖系统测试报告,本项目可用于团体抽奖活动,包括了用户注册,用户登录,修改奖项以及抽奖等功能。 二、项目背景 抽奖系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据&…...
Go语言从零构建SQL数据库(9)-数据库优化器的双剑客
数据库优化器的双剑客:谓词下推与列裁剪 在数据库查询优化的世界里,有两位特别重要的"超级英雄":谓词下推和列裁剪。这两种优化技术虽然简单,却能带来惊人的性能提升。今天,我们就来揭开它们的神秘面纱&…...
C++中什么是函数指针?
在C中,函数指针是一个指向函数的指针变量。通过函数指针,我们可以像使用函数一样调用它所指向的函数,常用于实现回调函数、函数指针数组等功能。 以下是一个简单的C代码示例,展示了函数指针的使用: cpp #include <…...
Python工具链UV整合环境管理
Python工具链UV整合环境管理 终极Python工具链UV:从依赖管理到项目开发的全维度解析一、引言:重新定义Python开发的大一统时代二、深度安装指南:多场景适配方案1. 官方独立安装器(推荐方案)2. 进阶安装方式3. 安装验证…...
RuoYi-v4.7.8 jar/war部署
准备条件 jdk-8u73-windows-x64.exe mysql5.7 apache-tomcat-9.0.60 apache-maven-3.8.1 RuoYi-v4.7.8.zip (官网 RuoYi) 登录gitee,选择标签要下载的版本好,点击克隆下载zip压缩文件 安装maven Apache Archive Distribution Directory…...
基于SpringBoot的小区停车位管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
张量并行优质博客
必读图解系列1 比较全面的相关文献总结博客,可以重点看一下其中的行列切分算子2 # 图解大模型训练之:张量模型并行(TP),Megatron-LM ↩︎ # 大规模分布式 AI 模型训练系列——张量并行 ↩︎...
汽车诊断简介
历史 20世纪80年代,由于美国西海岸严重的雾霾问题,CARB(加州空气资源委员会)通过了一项法律,要求对机动车辆进行车载监测诊断。这推动了OBD-I的引入,并在1990年代被OBD II取代。与此同时,欧洲也…...