深入理解 ZAB:ZooKeeper 原子广播协议的工作原理
目录
- ZAB 协议:ZooKeeper 如何做到高可用和强一致?🔒
- ZAB 协议的核心目标 🎯
- ZAB 协议的关键概念 💡
- ZAB 协议的运行阶段 🎬
- 阶段一:Leader 选举 (Leader Election) 🗳️
- 阶段二:发现与同步 (Discovery and Synchronization) 📡🤝
- 阶段三:广播 (Broadcast) 📢✅
- ZAB 协议如何保证一致性?🔒
- 总结:可靠的分布式协调基石 💎
🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
其他优质专栏: 【🎇SpringBoot】【🎉多线程】【🎨Redis】【✨设计模式专栏(已完结)】…等
如果喜欢作者的讲解方式,可以点赞收藏加关注,你的支持就是我的动力
✨更多文章请看个人主页: 码熔burning
ZAB 协议:ZooKeeper 如何做到高可用和强一致?🔒
在使用 Apache ZooKeeper 时,我们知道它是一个分布式协调服务,常用于配置管理、命名服务、分布式同步(如分布式锁)、组服务等。ZooKeeper 能够提供高可用和一致性的服务,其核心秘诀就在于它内部实现的ZAB (ZooKeeper Atomic Broadcast) 协议。
ZAB 协议是专为 ZooKeeper 设计的一种崩溃可恢复的原子广播协议。它的主要目标是确保 ZooKeeper 服务的所有副本(称为 Peer
,包括 Leader 和 Follower)之间保持状态的一致性,并且所有对状态的更新(事务)都能够按照全局唯一的顺序被处理。
简单来说,ZAB 协议就是要解决如何在分布式环境中,让大家(ZooKeeper 的各个节点)对同一个事情(数据更新)达成一致意见,并且这个过程是可靠的,即使有节点崩溃了也能恢复。🤝
ZAB 协议的核心目标 🎯
ZAB 协议主要确保以下两点:
- 一致性 (Consistency): 保证所有正确的 ZooKeeper 节点都具有相同的系统状态副本。无论客户端连接到哪个节点,都能看到相同的数据。
- 全局有序性 (Global Ordering): 所有修改 ZooKeeper 状态的事务都会被赋予一个全局唯一的序列号,并且所有节点都会按照这个序列号的顺序来处理这些事务。
ZAB 协议的关键概念 💡
理解 ZAB 协议,需要先掌握几个核心概念:
- 原子广播 (Atomic Broadcast): ZAB 协议的核心思想。它保证了任何一个事务(对 ZooKeeper 状态的修改操作)要么被 ZooKeeper 集群中的所有节点都接受并处理,要么一个节点都不处理。并且,所有节点处理这些事务的顺序是完全一致的。想象一下电视直播,所有观众看到的画面内容和顺序都是一样的。📺
- 角色 (Roles): 在 ZooKeeper 集群中,节点主要有三种角色:
- Leader (领导者): 集群中只有一个 Leader,负责处理所有的写请求(状态修改)。它接收客户端的写请求,生成新的事务,并将事务广播给 Follower。📢
- Follower (跟随者): 负责同步 Leader 发来的事务,并将事务应用到自己的状态上。它处理客户端的读请求。👥
- Observer (观察者): 与 Follower 类似,也同步 Leader 发来的事务并应用到自己的状态上。但它不参与 Leader 选举和写请求的投票过程。主要用于扩展读性能。👀
- 事务 (Transaction): 对 ZooKeeper 状态的每一次修改操作都抽象为一个事务。例如,创建节点、删除节点、设置节点数据等都是事务。📝
- Zookeeper 事务 ID (ZXID): 每个事务都有一个唯一的 64 位数字标识,称为 ZXID。ZXID 是单调递增的,它保证了事务的全局顺序性。ZXID 的高 32 位通常代表 Leader 的周期(Epoch),低 32 位代表该 Epoch 内的事务序列号。🔢
- 周期 (Epoch): Leader 选举成功后,新的 Leader 会创建一个新的 Epoch。Epoch 是一个单调递增的数字,用来标识 Leader 的一个任期。每次发生 Leader 切换,Epoch 都会增加。Epoch 的作用是为了区分不同 Leader 任期内产生的事务。🗓️
- 过半机制 (Quorum): ZAB 协议基于过半机制来实现一致性和可靠性。任何一个写事务,都需要集群中半数以上的节点(包括 Leader 自己)成功接收并确认,Leader 才会提交这个事务。同样,Leader 的选举也需要获得过半节点的投票。🗳️
ZAB 协议的运行阶段 🎬
ZAB 协议的运行主要分为三个阶段:
阶段一:Leader 选举 (Leader Election) 🗳️
当 ZooKeeper 集群启动时,或者当前的 Leader 发生故障、网络中断时,集群会进入 Leader 选举阶段。
这个阶段的目标是从所有正常运行的节点中选举出一个新的 Leader。选举过程可能会比较复杂,但核心是基于某种规则(比如每个节点都会给自己投票,并向其他节点发送自己的投票信息,包括自己认为的 Leader 及其最新的事务 ID ZXID)进行协商,最终得票过半的节点成为新的 Leader。
新的 Leader 诞生后,会生成一个新的 Epoch,这个 Epoch 将作为后续事务 ZXID 的高 32 位。
阶段二:发现与同步 (Discovery and Synchronization) 📡🤝
新的 Leader 选举出来后,它并不知道其他 Follower 节点当前的状态是什么样的。有些 Follower 可能丢失了一些最新的事务,有些可能还停留在旧的 Leader 周期。
这个阶段的目标是让新的 Leader 和所有 Follower 达到一致的状态,特别是保证所有 Follower 都拥有 Leader 提议过的所有事务。
具体过程大致是:
-
新的 Leader 会与所有 Follower 建立连接。
-
Follower 会向 Leader 报告自己当前接收到的最新事务的 ZXID。
-
Leader 会根据 Follower 报告的 ZXID,找出 Follower 缺失的事务。
- 如果 Follower 的 ZXID 落后于 Leader,Leader 会将 Follower 缺失的事务发送给它进行同步。
- 如果 Follower 的 ZXID 甚至超前于 Leader (这在理论上不应该发生,但在某些极端情况下可能存在脏数据),Leader 会要求 Follower 回滚到 Leader 的最新状态。
-
Leader 需要等待过半的 Follower 完成同步,确保大多数节点的状态与 Leader 一致。
这个阶段非常重要,它保证了在开始处理新的写请求之前,集群中的大多数节点已经处于一个一致的、最新的状态。
阶段三:广播 (Broadcast) 📢✅
一旦过半的 Follower 与 Leader 完成同步,集群就进入了正常运行的广播阶段。
在这个阶段,Leader 开始接收客户端的写请求。对于每一个写请求,Leader 会执行以下操作:
- 生成新的事务: 将客户端的写请求转换为一个内部的事务对象,并分配一个新的、单调递增的 ZXID(新的 Epoch + 当前 Epoch 内的计数器)。
- 提议 (Propose): Leader 将这个新的事务提议给所有的 Follower。
- 广播 (Broadcast): Leader 将事务发送给所有连接的 Follower。
- 确认 (Acknowledge): Follower 收到事务提议后,会将其写入自己的事务日志,并向 Leader 发送一个确认 (ACK)。📝➡️👍
- 提交 (Commit): Leader 收到过半的 Follower 的确认后,认为这个事务已经被大多数节点接受, Leader 就会向所有 Follower 发送一个 Commit 命令。收到 Commit 命令的 Follower 会将事务应用到自己的内存状态中。Leader 自己也会将事务应用到自己的状态中。✨
整个广播过程是原子性的: 事务要么在所有节点上都提交,要么都不提交。并且,由于 ZXID 的全局有序性,所有节点都会按照 ZXID 的顺序来处理和应用事务,保证了状态的一致。
ZAB 协议如何保证一致性?🔒
ZAB 协议通过结合上述概念和阶段,保证了分布式环境下的数据一致性:
- Leader 选举和 Epoch: 每次 Leader 切换都引入新的 Epoch,保证了不同 Leader 周期产生的事务不会混淆。新的 Leader 会基于大多数节点的状态来确定从哪里开始新的 Epoch 和 ZXID,避免了脑裂问题导致的不同 Leader 提交冲突的事务。
- ZXID 的单调递增: 为每个事务提供了唯一的全局顺序标识,所有节点按序处理,保证了事务应用的顺序一致。
- 过半机制: 任何写操作的提交都依赖于过半节点的确认。这意味着如果一个事务被提交了,它就肯定存在于集群中至少过半的节点上。当发生故障需要选举新的 Leader 时,新的 Leader 一定是从拥有最新已提交事务(最高 ZXID)的节点中选出的,从而保证了新的 Leader 的状态包含了所有已提交的事务。即使旧的 Leader 提议了某个事务但未获得过半确认就崩溃了,新的 Leader 也不会提交那个未完成的事务。半数以下的节点崩溃不会影响服务的可用性。💪
总结:可靠的分布式协调基石 💎
ZAB 协议是 ZooKeeper 能够提供可靠的分布式协调服务的基石。它通过 Leader 选举、基于 Epoch 和 ZXID 的事务排序、以及原子广播和过半机制,巧妙地解决了分布式环境下的数据一致性和可靠性问题。
理解 ZAB 协议对于深入学习 ZooKeeper、设计和实现高可用的分布式系统都非常有帮助!虽然它的细节实现比较复杂,但掌握其核心思想和工作流程,能让你更好地理解 ZooKeeper 的行为和性能。😊
相关文章:
深入理解 ZAB:ZooKeeper 原子广播协议的工作原理
目录 ZAB 协议:ZooKeeper 如何做到高可用和强一致?🔒ZAB 协议的核心目标 🎯ZAB 协议的关键概念 💡ZAB 协议的运行阶段 🎬阶段一:Leader 选举 (Leader Election) 🗳️阶段二ÿ…...
Javascript本地存储的方式有哪些?区别及应用场景?(含Deep Seek讲解)
JavaScript本地存储方式的区别与适用场景 1. Cookie 特点: Cookie是一种较早的本地存储技术,主要通过HTTP协议在客户端和服务器之间传递数据。它的大小通常被限制为4KB以内,并且每次HTTP请求都会携带Cookie信息。缺点: 数据量有限制(最多4K…...
二元Logistic回归
二元Logistic回归 在机器学习领域,二元Logistic回归是一种非常经典的分类模型,广泛用于解决具有两类标签的分类问题。Logistic回归通过逻辑函数(Sigmoid函数)将预测结果映射到概率值,并进行分类。 一、Logistic回归 …...
Android framework 问题记录
一、休眠唤醒,很快熄屏 1.1 问题描述 机器休眠唤醒后,没有按照约定的熄屏timeout 进行熄屏,很快就熄屏(约2s~3s左右) 1.2 原因分析: 抓取相关log,打印休眠背光 相关调用栈 //具体打印调用栈…...
企业网站架构部署与优化 --web技术与nginx网站环境部署
一、Web 基础 本节将介绍Web 基础知识,包括域名的概念、DNS 原理、静态网页和动态网页的 相关知识。 1、域名和DNS 1.1、域名的概念 网络是基于TCP/IP 协议进行通信和连接的,每一台主机都有一个唯一的标识(固定的IP 地址),用以区别在网络上成千上万个用户和计算机。…...
Scala与Spark:原理、实践与技术全景详解
Scala与Spark:原理、实践与技术全景详解 一、引言 在大数据与分布式计算领域,Apache Spark 已成为事实标准的计算引擎,而 Scala 作为其主要开发语言,也逐渐成为数据工程师和后端开发者的必备技能。本文将系统梳理 Scala 语言基础…...
【聚类】层次聚类
层次聚类 文章目录 层次聚类1. 算法介绍2. 公式及原理3. 伪代码 1. 算法介绍 背景与目标 层次聚类(Hierarchical Clustering)是一类无需事先指定簇数的聚类方法,通过构造一棵“树状图”(dendrogram)来呈现数据的多层次…...
Windows环境安装LibreOffice实现word转pdf
前言:最近在工作中遇到了一个需求要实现word转pdf,本来我在上一个公司使用aspose.words工具使用的得心应手,都已经把功能点实现了,两句代码轻轻松松,但是被告知不能用商业版的东西,公司要求只能用开源的&am…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit (3)
1.问题描述: 通过CardRecognition识别身份证拍照拿到的照片地址,使用该方法获取不到图片文件,请问如何解决? 解决方案: //卡证识别实现页,文件名为CardDemoPage,需被引入至入口页 import { …...
【聚类】K-means++
K-means 文章目录 K-means1. 算法介绍2. 公式及原理3. 伪代码 1. 算法介绍 背景与目标 k-means 是 David Arthur 和 Sergei Vassilvitskii 于2007年提出的改进 k-means 初始化方法,其核心目标是: 在保证聚类质量的前提下,通过更合理地选择初始…...
Java实现PDF加水印功能:技术解析与实践指南
Java实现PDF加水印功能:技术解析与实践指南 在当今数字化办公环境中,PDF文件因其跨平台兼容性和格式稳定性而被广泛应用。然而,为了保护文档的版权、标记文档状态(如“草稿”“机密”等)或增加文档的可追溯性…...
【C#】用 DevExpress 创建带“下拉子表”的参数表格视图
展示如何用 DevExpress 创建带“下拉子表”的参数表格视图。主表为 参数行 ParamRow,子表为 子项 ChildParam。 一、创建模型类 public class ParamRow {public string Pn { get; set; }public string DisplayName { get; set; }public string Value { get; set; }…...
Go语言八股文之Mysql优化
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
学习记录:DAY29
项目开发日志:技术实践与成长之路 前言 回顾这几天的状态,热情总是比我想象中更快被消耗完。比起茫然徘徊的小丑,我更希望自己是对着风车冲锋的疯子。 今天继续深入项目的实际业务。 状态好点的时候,再看自己EMO时写的东西&…...
LLaMA-Factory:了解webUI参数
Finetuning method参数 full(全量微调) 更新模型全部参数,完全适配新任务 效果最好,但资源消耗最大适用于计算资源充足的场景存在过拟合的风险,需要大量数据支持 freeze(冻结微调) 固定底层参…...
【实战】GPT-SoVITS+内网穿透:3分钟搭建可公网访问的语音克隆系统
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
HTML向四周扩散背景
<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>扩散背景效果</title><style>body {…...
React 个人笔记 Hooks编程
作用 配合函数式编程,保证在不产生类的时候完成一个整体的组件 常用组件 useStateuseContextuseReduceruseEffectuseMemouseCallback 前三个值为自变量 后三者为因变量 前三者相当于其他编程函数的变量声明,而后三者相当于对变量进行了(if now ! pr…...
CSS- 4.6 radiu、shadow、animation动画
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看! 点…...
ngx_http_scgi_module 技术指南
一、快速上手示例 http {# 定义 SCGI 参数(标准 CGI 环境变量)include /etc/nginx/scgi_params;server {listen 80;location /app/ {# 将请求转发到本地 9000 端口的 SCGI 服务器scgi_pass localhost:9000;# 只转发非空的 HTTPS 参数scgi…...
NFT市场开发技术全解析:从架构设计到实现
NFT(非同质化代币)市场已成为区块链领域的热门应用场景,涵盖艺术品、游戏资产、虚拟地产等多个领域。本文将从技术栈选择、核心功能实现、开发流程、挑战与优化等方面,系统梳理NFT市场的开发要点,并结合实际案例与代码…...
第六十一篇 Java反射解析:用咖啡调配理解动态编程的艺术
引言:一杯咖啡引发的技术思考 在星巴克的收银台前,我们总能看到店员熟练地根据顾客需求调配不同口味的咖啡:美式、拿铁、卡布奇诺… 这让我联想到编程世界中的对象创建。如果每新增一种咖啡就要修改收银系统,这样的设计显然不够优…...
【android bluetooth 协议分析 01】【HCI 层介绍 7】【ReadLocalName命令介绍】
1. HCI_Read_Local_Name Read Local Name 是 HCI(Host Controller Interface)命令之一,属于 BR/EDR 控制器的 HCI Command 类别,其主要功能是 读取本地设备(Controller)的人类可读名称(Local N…...
window xampp apache使用腾讯云ssl证书配置https
下载腾讯云ssl证书: 编辑Apache根目录下 conf/httpd.conf 文件: #LoadModule ssl_module modules/mod_ssl.so和#Include conf/extra/httpd-ssl.conf,去掉前面的#号注释。 编辑Apache根目录下 conf/httpd-ssl.conf 文件: <Vi…...
企业开发工具git的使用:从入门到高效团队协作
前言:本文介绍了Git的安装、本地仓库的创建与配置,以及工作区、暂存区和版本库的区分。详细讲解了版本回退、撤销修改等操作,并深入探讨了分支管理,包括分支的创建、切换、合并、删除及冲突解决。此外,还介绍了远程操作…...
【git config --global alias | Git分支操作效率提升实践指南】
git config --global alias | Git分支操作效率提升实践指南 背景与痛点分析 在现代软件开发团队中,Git分支管理是日常工作的重要组成部分。特别是在规范的开发流程中,我们经常会遇到类似 feature/user-management、bugfix/login-issue 或 per/cny/dev …...
VR 互动实训与展示,借科技开启沉浸式体验新篇
对于企业而言,产品设计与展示是极为关键的环节,这直接关系到能否成功吸引客户,以及精准获取市场反馈。在当下科技飞速发展的时代,VR 互动实训为这一至关重要的环节注入了全新活力,带来了前所未有的体验。以某智能家居企…...
一文了解VR拍摄制作
虚拟现实(VR)技术通过计算机技术模拟环境,使用户能够身临其境地沉浸在虚拟世界中进行交互体验。 在VR拍摄中,主要利用这一技术来创建360度全景视频或图片,让观众能够全方位地感受拍摄场景。这种拍摄方式不仅改变了我们…...
【内测征集】LarkVR 播控系统上新:VR 应用一站式专业播控与管理工具
Paraverse平行云自主研发的LarkXR实时云渲染平台,作为行业领先的企业级云渲染解决方案,在国际市场占据重要地位。公司自2016年创立以来,始终引领3D/XR云化技术的创新发展,目前已在全球范围内为超过10,000名开发者和1,000家企业客户…...
Windows逆向工程提升之二进制分析工具:HEX查看与对比技术
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 十六进制查看工具 应用于逆向工程的知识点 编辑 二进制对比工具 应用于逆向工程的知识点 十六进制查看工具 十六进制查看器是逆向工程的基础工具,它可以以十六进制格式…...
电脑A和电脑B都无法ping通电脑C网络,电脑C可以ping通电脑A和B,使用新系统测试正常,排除硬件问题。
主要硬件:研华AIMB-705主板、i5-6500 C机在防火墙高级设置里启用以下两项规则后,A/B机可正常访问C机网络。(直接关闭防火墙也可解决此问题) 文件和打印机共享 (回显请求 - ICMPv4-In) 核心网络诊断 - ICMP 回显请求 (ICMPv4-In)…...
【VMware】虚拟机运行 Linux Ubuntu、MAC 安装和配置
文章目录 一、VMware Workstation Pro 下载二、VMware Workstation Pro 安装三、Ubuntu Linux虚拟机镜像下载安装与配置 1、Ubuntu系统镜像下载 2、创建虚拟机(VMware)及硬件配置 3、编辑虚拟机设置 4、安装Ubuntu系统及系统…...
遨游科普:三防平板是什么?有什么作用?
在数字化与智能化浪潮席卷全球的今天,电子设备的可靠性已成为衡量其价值的核心标准之一。三防平板,这一“硬核”的工业设备,正凭借其卓越的环境适应能力,从专业领域走向大众视野,成为极端场景下不可或缺的数字化工具。…...
电脑闪屏可能的原因
1. 显示器 / 屏幕故障 屏幕排线接触不良:笔记本电脑屏幕排线(屏线)松动或磨损,导致信号传输不稳定,常见于频繁开合屏幕的设备。屏幕面板损坏:液晶屏内部灯管老化、背光模块故障或面板本身损坏,…...
VR 互动实训的显著优势
(一)沉浸式学习,提升培训效果 在 VR 互动实训中,员工不再是被动的知识接受者,而是主动的参与者。以销售培训为例,员工戴上 VR 设备,就能置身于逼真的销售场景中,与虚拟客户进行面对…...
2025.05.19【Connectedscatter】连接散点图详解
How to add a legend to base R plot The legend() function allows to add a legend. See how to use it with a list of available customization. Image on the chart background The rasterImage function allows to add an image on the background of the chart. 文章目…...
C++之函数模板类模板
模板 1.泛型编程2. 函数模板函数模板概念函数模板的实例化模板参数的匹配原则 3.类模板类模板的定义格式类模板的实例化 4.模板的优缺点 C 模板是一种强大的泛型编程工具,它允许你编写与类型无关的代码,提高代码复用性。 1.泛型编程 先看一个我们之前经…...
《告别低效签约!智合同如何用AI重构商业“契约时代”》——解析智能合约技术的爆发与行业变革
在数字化浪潮奔涌的当下,合同作为商业活动的核心枢纽,正经历着智能化的深度变革。智合同-合同智能应用这一创新模式,犹如一颗璀璨的新星,在商业领域的天空中绽放出独特光芒,深刻改变着人们对合同管理与应用的认知和实践…...
Axure难点解决分享:垂直菜单展开与收回(4大核心问题与专家级解决方案)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:垂直菜单展开与收回 主要内容:超长菜单实现、展开与收回bug解释、Axure9版本限制等问题解…...
PCB设计教程【入门篇】——电路分析基础-基本元件(电阻电容电感)
前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理 目录 前言 1.PCB原理图的作用…...
909. 蛇梯棋
https://leetcode.cn/problems/snakes-and-ladders/description/?envTypestudy-plan-v2&envIdtop-interview-150思路:题目要求我们使用最小的步数走到终点(注意不能走回头路,传送不算),那我们的想法就很明确了&am…...
Redis学习打卡-Day4-Redis实现消息队列
Redis 基于阻塞队列实现秒杀的优化 新增秒杀优惠券的同时,将优惠券信息保存到 Redis 中。基于 Lua 脚本,判断秒杀库存、一人一单,决定用户是否抢购成功。如果抢购成功,将优惠券id和用户id封装后存入阻塞队列。开启独立线程任务&a…...
探索C++面向对象:从抽象到实体的元规则(上篇)
前引:在计算机科学的浩瀚星空中,面向对象编程(OOP) 无疑是照亮现代软件开发的核心范式。而 C 作为一门兼具高性能与抽象能力的系统级语言,其类与对象的语法设计更是开发者构建复杂系统的“元规则”。你是否曾困惑于 封…...
华为鸿蒙电脑发布,企业运营效率可以提高吗?
今日,科技圈迎来重磅消息,华为于19日在成都正式发布两款鸿蒙电脑,标志着鸿蒙操作系统首次登陆电脑端,这是中国国产操作系统的重大里程碑,更是中国电子信息产业自主可控进程中的关键一步。 鸿蒙操作系统作为首个统一移动…...
遨游科普:三防平板是什么?应用在什么场景?
在数字化转型的浪潮中,智能终端设备正从消费级市场向工业级场景深度渗透。传统平板电脑虽能满足日常需求,却难以应对极端环境下的挑战——暴雨、沙尘、震动、高温或低温等恶劣条件,往往成为数据采集、实时通讯和作业效率的“绊脚石”。在此背…...
图像中紫边出现原因
一、紫边 在实景调试中,我们经常会遇到高亮场景下的物体边缘分布有明显的紫边(purple fringe)现象, 就如下图所示: 对于紫边的成因,通常认为是镜头色差(镜头对不同光谱光线的折射程度不同,导致不…...
中服云生产线自动化智能化调度生产系统:打造智能制造新标杆
前言 在当今制造业竞争日益激烈的背景下,实现生产线的自动化与智能化已成为企业提升竞争力的关键。作为国内技术领先的工业物联网平台、数字孪生、自动控制技术厂商,中服云凭借其深厚的技术积累和创新能力,打造了一套完整的生产线自动化智能…...
【电动汽车充电系统核心技术全解:从can通讯高压架构到800V超充未来】
标题:电动汽车充电系统核心技术全解:从高压架构到800V超充未来 目录 前言:开篇暴击:中国电动车年产670万辆背后,充电技术如何破局一、充电系统架构解剖:四大核心模块如何“打配合”?二、CAN总线…...
uniapp-商城-62-后台 商品列表(分类展示商品的布局)
每一个商品都有类别,比如水果,蔬菜,肉,粮油等等,另外每一个商品都有自己的属性,这些都在前面的章节进行了大量篇幅的介绍。这里我们终于完成了商品类的添加,商品的添加,现在到了该进…...
在嵌入式系统中, 一般链路层断开多久,断开TCP为好
一、典型场景与推荐策略 1. 实时性优先(工业控制、自动化设备) 需求:快速释放资源,避免因等待重传浪费内存或阻塞任务。 策略: 立即断开:在lwip_netif_link_callback中检测到链路断开后直接关闭TCP连接&a…...