分布式系统
一、分布式系统概述
1.1 为什么需要分布式系统?
核心驱动力:
- 性能需求:单机性能受物理限制(CPU/内存/IO),分布式系统通过并行计算突破瓶颈
- 可扩展性:水平扩展(增加节点) vs 垂直扩展(升级硬件),前者更具经济性
- 容错性:通过冗余防止单点故障(SPOF),典型案例如金融交易系统多活架构
典型场景:
- 电商大促流量削峰(Kubernetes自动扩缩容)
- 社交网络实时消息推送(边缘计算节点)
- 大数据分析(Hadoop/Spark集群)
https://via.placeholder.com/600x400?text=Distributed+System+Advantages
二、核心理论问题
2.1 两将军问题(Two Generals' Problem)
核心矛盾:
- 不可靠通信信道下无法达成确定性共识
- TCP协议无法解决(ACK丢失导致状态不一致)
工程实践启示:
- 通过冗余通信(发送100个信使)提升容错性
- 实际系统需在可靠性与效率间权衡
2.2 CAP定理
三大要素:
- Consistency(强一致性)
- Availability(可用性)
- Partition Tolerance(分区容错性)
权衡原则:
- CA系统(传统单机数据库)
- CP系统(如Redis集群)
- AP系统(如Cassandra)
三、关键技术与协议
3.1 RPC语义
四种语义模型:
- At-least-once(至少一次)
- 适用场景:幂等操作(如支付扣款)
- 实现:客户端重试 + 服务端去重
- At-most-once(至多一次)
- 适用场景:非关键操作(如浏览记录)
- 实现:UDP协议/客户端超时放弃
- Exactly-once(精确一次)
- 理论不可行,工程近似实现:
- 生产端:唯一ID + 重试控制(Kafka事务)
- 消费端:Offset提交事务
- 理论不可行,工程近似实现:
典型问题:
- TCP协议为何不保证Exactly-once?
- 答:无法解决ACK丢失导致的重传不确定性
3.2 分布式一致性模型
主要类型:
- 强一致性(Linearizability)
- 特性:操作按真实时间顺序执行
- 实现:ZooKeeper、etcd
- 弱一致性(Eventual Consistency)
- 特性:最终达成一致,允许短暂不一致
- 实现:DynamoDB、Cassandra
- 因果一致性(Causal Consistency)
- 特性:维护因果关系的操作顺序
- 应用:评论系统的时间线排序
对比分析:
模型 | 一致性强度 | 适用场景 | 典型系统 |
---|---|---|---|
顺序一致性 | 强 | 银行交易系统 | Google Spanner |
最终一致性 | 弱 | 社交网络/IoT日志 | Cassandra |
因果一致性 | 中等 | 协作编辑文档 | Google Docs |
四、容错与复制机制
4.1 主从复制(Primary-Backup)
核心流程:
- 客户端请求发送至主节点
- 主节点执行操作并记录日志(Binlog/Redo Log)
- 日志异步复制到备份节点
- 备份节点确认后主节点返回结果
故障处理:
- 主节点宕机:视图服务器(View Server)选举新主
- 备份节点宕机:提升其他备用节点
潜在问题:
- 脑裂(Split-brain):网络分区导致多个主节点
- 解决方案:引入Quorum机制(多数派投票)
4.2 状态机复制(State Machine Replication)
核心思想:
- 将分布式系统视为确定性状态机
- 所有节点按相同顺序执行操作序列
实现方式:
- 主动复制:主节点下发命令
- 被动复制:状态机自主决策
典型应用:
- 区块链(比特币UTXO模型)
- 分布式数据库(CockroachDB)
五、共识算法
5.1 Paxos算法
核心角色:
- 提议者(Proposer)
- 接受者(Acceptor)
- 学习者(Learner)
执行流程:
- Prepare阶段:提议者发送提案编号
- Accept阶段:接受者承诺不再接受更低编号提案
- Learn阶段:学习者同步最终决议
优化方向:
- Fast Paxos:减少消息往返次数
- Multi-Paxos:连续提案优化
5.2 Raft协议
简化设计:
- 领导者选举(Leader Election)
- 日志复制(Log Replication)
- 安全性保障(Safety)
关键机制:
- 任期(Term)概念
- 心跳机制(Heartbeat)
- 日志一致性检查
应用场景:
- Kubernetes集群管理
- Redis集群模式
六、分布式事务
6.1 两阶段提交(2PC)
执行流程:
- Prepare阶段:协调者询问参与者是否可提交
- Commit阶段:协调者下发最终指令
缺陷分析:
- 同步阻塞问题
- 单点故障风险(协调者宕机)
- 脑裂场景处理困难
改进方案:
- 三阶段提交(3PC)
- Saga模式(补偿事务)
6.2 BASE理论
核心思想:
- Basically Available(基本可用)
- Soft State(软状态)
- Eventually Consistent(最终一致性)
适用场景:
- 电商购物车(允许短暂超卖)
- 社交网络点赞计数
七、高级主题
7.1 拜占庭容错(BFT)
挑战:
- 恶意节点伪造消息
- 网络可被敌手控制
解决方案:
- Practical Byzantine Fault Tolerance (PBFT)
- 区块链共识机制(PoW/PoS)
7.2 分布式存储系统
典型架构:
- 对象存储(Amazon S3)
- 块存储(Ceph RBD)
- 文件存储(GlusterFS)
关键技术:
- 数据分片(Sharding)
- 副本策略(Replication)
- 纠删码(Erasure Coding)
八、总结与展望
8.1 核心挑战
- 时钟同步(Logical Clocks/Lamport Timestamps)
- 网络分区(Partition Tolerance)
- 安全威胁(DDoS/中间人攻击)
8.2 未来趋势
- Serverless架构(AWS Lambda)
- 边缘计算(MEC)
- 量子通信(抗量子加密算法)
相关文章:
分布式系统
一、分布式系统概述 1.1 为什么需要分布式系统? 核心驱动力: 性能需求:单机性能受物理限制(CPU/内存/IO),分布式系统通过并行计算突破瓶颈可扩展性:水平扩展(增加节点&#x…...
前端开发学习路线完整指南
前端开发学习路线完整指南 前端开发是一个不断发展的领域,涉及多个技术栈。本文将为你提供一条系统的前端学习路线,帮助你从零基础到熟练掌握前端开发技能。 1. 前置知识 在学习前端之前,了解一些基础知识会对你的学习过程有很大帮助。 计…...
Sa-Token核心功能解剖二( Session会话、 持久层Redis扩展 、全局侦听器 、全局过滤器、多账号体系认证、单点登录)
文章目录 概要功能结构图5.Session会话6.持久层扩展7.全局侦听器8.全局过滤器9.多账号体系认证10.单点登录 概要 Sa-Token核心功能解剖(二),主要有: Session会话 —— 全端共享Session,单端独享Session,自定义Session,方便的存取…...
C++搜索
功能扩展说明: 图类封装:将图数据结构封装为类,提高代码复用性 最短路径查找:基于BFS实现未加权图的最短路径查找 路径重构:通过parent数组回溯构建完整路径 异常处理:当路径不存在时返回空向量 复杂度分析…...
NC,GFS、ICON 数据气象信息可视化--降雨量的实现
随着气象数据的快速发展和应用,气象信息的可视化成为了一项不可或缺的技术手段。它不仅能帮助气象专家快速解读数据,还能为公众提供直观的天气预报信息。今天,我们将从降雨量的可视化出发,带大家一起了解如何实现气象数据的可视化…...
Android SystemUI深度定制实战:QSPanel下拉状态栏动态日期显示全解析
一、需求背景与实现思路 在Android系统定制化开发中,SystemUI的下拉状态栏(Quick Settings Panel,QSPanel)是用户高频交互的核心模块。近期某产品需求提出:在下拉展开状态栏时,需在QSPanel的顶部区域动态显…...
Linux 部署 rocketmq centos7
mq部署方案 1、rocketmq 顺序消费记录 一个master ,一个 brocker ,多个group ,多个topic,采用集群消费模式。 注意 一个group 对应一个 topic。 生产者 和 消费者 可以有多个,但是 主题和分组 都是一对一的。这样保证…...
02_MySQL安装及配置
文章目录 一、下载二、安装及配置2.1、选择安装类型2.2、检查需要的依赖2.3、安装2.4、配置2.4.1、配置类型和网络2.4.2、配置账户和角色2.4.3、配置Windows服务2.4.4、让配置生效 2.5、验证是否安装成功 三、卸载3.1、运行MySQL安装工具3.2、卸载及清理3.3、卸载之后的检查工作…...
银行的压力测试如何进行?
为什么要进行压力风险测试? 压力风险测试的最终目的是测试银行在极度恶劣的市场环境中是否有足够的资本维持运转。 题主链接中的一级资本充足率(Tier 1 capital ratio) 亦即衡量标准,这个数字越大,表明银行资本约充裕,可以在停止…...
7、Linux C 进程通信
一、无名管道(pipe) 1. 函数介绍 #include <unistd.h> int pipe(int pfd[2]); 参数:pfd是一个包含两个整数的数组,pfd[0]为读描述符,pfd[1]为写描述符。 返回值:成功时返回0,失败时…...
Android Framework 层 Hook 技术详解
目录 Hook 技术概述 什么是 Hook 技术? Hook 技术的核心原理 Hook 技术的进化与创新 Hook 技术的魅力与局限 Android Framework 层结构 Framework 层在 Android 中的位置 Framework 层的核心组件 为什么 Framework 层适合 Hook? 常用 Hook 方法 方法替换:换个 “芯…...
java接口中 使用@RequestParam和@RequestPart区别
1. 介绍 这两个注解都是spring注解。 RequestParam通常用于获取请求参数,这些参数可以是URL中的查询参数,也可以是表单数据中的字段。而RequestPart则是用于处理多部分(multipart)请求中的部分,特别是当上传文件或处理…...
CentOS-7.0系统基础操作
配置ip地址 编辑网卡文件: vi etc/sysconfig/network-scripts/ifcfg-ens33 在网卡文件里参照如下设置: BOOTPROTO"static" IPADDR192.168.61.233 GATEWAY192.168.61.2 NETMASK255.255.255.0 ONBOOT"yes" 防火墙管理 开启防火墙&am…...
全星研发管理APQP软件系统:驱动汽车产品研发全周期,打造高效合规的质量管理引擎
全星研发管理APQP软件系统:驱动汽车产品研发全周期,打造高效合规的质量管理引擎 在汽车、电子、医疗器械等高度依赖质量管理的行业中,APQP(先期产品质量策划)作为国际通用的产品开发管理框架,是确保产品从…...
Maven 的下载与安装
背景 为什么要建立本地Maven ,idea 默认的maven 仓库是放在系统盘的,依赖每次都存在系统盘用就了C盘就爆炸了,所有我们可以在本地其他盘安装maven 建立仓库。 idea 默认的依赖拉取地址是maven 官网,我们建立本地仓库,…...
26考研——排序_插入排序(8)
408答疑 文章目录 二、插入排序基本概念插入排序方法直接插入排序算法描述示例性能分析 折半插入排序改进点算法步骤性能分析 希尔排序相关概念示例分析希尔排序的效率效率分析空间复杂度时间复杂度 九、参考资料鲍鱼科技课件26王道考研书 二、插入排序 基本概念 定义&#x…...
Mem0 Prompt优化
在使用mem0的时候,系统中自带的提取事件的Prompt, 效果很差,我们可以按照我们的需求修改 from datetime import datetime, timedeltacustom_fact_extraction_prompt f"""你是一位个人信息整理专家,专注于准确存…...
C++ STL常用算法之常用算术生成算法
常用算术生成算法 学习目标: 掌握常用的算术生成算法 注意: 算术生成算法属于小型算法,使用时包含的头文件为 #include <numeric> 算法简介: accumulate // 计算容器元素累计总和 fill // 向容器中添加元素 accumulate 功能描述: 计算区间内容器元素…...
Kubernetes Webhook必要知识点:原理、配置与实践
#作者:邓伟 文章目录 1. 什么是 Kubernetes Webhook?2. Webhook 的工作原理2.1 准入控制器(Admission Controller)2.2 Webhook 类型 3. Webhook 的配置3.1 Webhook 配置文件3.2 配置字段说明 4. Webhook 的开发与部署4.1 开发 We…...
IGS 转 STL 全攻略:迪威模型在线转码助力 3D 建模
在 3D 建模与制造业领域,不同文件格式之间的转换是经常面临的重要任务。IGS 和 STL 作为其中两种常用格式,前者凭借出色的曲面表达能力,在 CAD 领域广泛应用;后者凭借简单的三角网格结构,成为 3D 打印、快速成型的行业…...
【Bug】记录2025年遇到的Bug以及修复方案
--------------------------------------------------------分割线 2025.3.25-------------------------------------------------------windows环境下通过命令行终端(必须是命令行下,直接赋值传递,代码正常)的形式传递字符串时&a…...
Unity UGUI - 六大基础组件
目录 一、Canvas上 1. Canvas:复制渲染子UI控件 2. ✨Canvas Scaler✨:画布分辨率自适应 3. Graphics Raycaster:射线事件响应 4. ✨Rect Transform✨:UI位置锚点对齐 二、Event System上 5. Event System 6. Standalone …...
TCP网络编程与多进程并发实践
一、引言 在网络编程中,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。而多进程并发则是一种提高服务器处理能力的有效手段,允许服务器同时处理多个客户端的请求。本文将详细介绍如何使用 TCP 协议进…...
IM腾讯Trtc与vod云点播:实现合流录制并上传,根据参数返回视频地址
全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 文档传送门 2. java基础使用2.1 准备工作2.1.1 云控制台获取(密钥和密钥secret)2.1.2 找到trtc控制台2.1.3 vod云点播控制台 2.2 使用准备的数据进行操作2.2.0 引入依赖2.2.1 创建TrtcUtils工具类2.2.2 TrtcReqDTO 录制请求dt…...
HTTP协议手写服务器
目录 一、请求的是Web根目录 二、GET方法通过URL传参 三、根据资源类型对应出Content-Type值 四、Http代码 项目完整源代码:Http 周不才/cpp_linux study - 码云 - 开源中国 一、请求的是Web根目录 如果URL中请求的资源是Web根目录,则自动跳转到主…...
Uni-app入门到精通:subPackages节点为小程序的分包加载配置
subPackages节点用于为小程序的分包加载配置。因小程序有体积和资源加载限制,各小程序平台提供了分包方式,以加快小程序的下载和启动速度。主包用于放置默认启动页面、babBar页面,以及一些所有分包都会用到的公共资源或JS脚本;而分…...
DeepSeek本地部署(linux)
一、下载并安装Ollama 1.下载Ollama Ollama官网:Ollama 点击"Download",会跳转至下载页面。 1.1在线下载安装 可复制此命令到Linux服务器进行在线下载,如下载速度过慢,可选择离线下载安装。 curl -fsSL https://ollama.com/install.sh | sh1.2离线下载安装 …...
工具——(常用的软件)视频编辑器
软件工具 1、视频编辑器:filmora 9 2、图标无损放大:oCam 或者 Adobe Illustrator CS6 3、图片编辑:Photoshop CS6 4、截图置顶工具:Snipaste 或者 PixPin 5、抢票:Bypass 6、文本日志工具:N…...
Kafka 多线程开发消费者实例
目前,计算机的硬件条件已经大大改善,即使是在普通的笔记本电脑上,多核都已经是标配了,更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序依然是单线程架构,那实在是有点暴殄天物了。不过,Kafka …...
org.apache.maven.surefire:surefire-junit-platform:jar:2.22.2 Maven打包失败
org.apache.maven.surefire:surefire-junit-platform:jar:2.22.2 解决办法 勾上这个,打包时跳过测试代码...
在Ubuntu中固定USB设备的串口号
获取设备信息 lsusb # 记录设备的Vendor ID和Product ID(例如:ID 0403:6001)# 获取详细属性(替换X和Y为实际设备号) udevadm info -a /dev/ttyUSBX 结果一般如下 创建udev规则文件 sudo gedit /etc/udev/rules.d/us…...
Java后端开发: 如何安装搭建Java开发环境《安装JDK》和 检测JDK版本
文章目录 一、JDK的安装1、 打开 Oracle 官方网址2、点击产品 二、检测JDK是否安装成功以及JDK版本的查看1. 打开命令行窗口检测是否安装成功查看 JDK 版本 一、JDK的安装 1、 打开 Oracle 官方网址 Oracle官网地址:https://www.oracle.com/cn/ 2、点击产品 打开下载的JDK文件…...
AudioFlinger与AudioPoliceManager初始化流程
AF/APF启动流程 在启动AudioSeriver服务的过程中会对启动AF/APF。main_audioserver.cpp有如下代码: AudioFlinger::instantiate();AudioPolicyService::instantiate();AF初始化流程 1.AudioFlinger::instantiate() 1.1 AudioFlinger构造函数 void AudioFlinger:…...
Keepalive+LVS+Nginx+NFS高可用架构
KeepaliveLVSNginxNFS高可用架构 1. NFS 业务服务器(192.168.98.138)2. Web服务集群(搭建RS服务器)开机自启动自动挂载配置nginx(为了区分Web1与Web2访问的文件内容) 3. LVS主机(Keepalivedlvs&…...
SpringBoot分布式项目订单管理实战:Mybatis最佳实践全解
一、架构设计与技术选型 典型分布式订单系统架构: [网关层] → [订单服务] ←→ [分布式缓存]↑ ↓ [用户服务] [支付服务]↓ ↓ [MySQL集群] ← [分库分表中间件]技术栈组合: Spring Boot 3.xMybatis-Plus 3.5.xShardingSpher…...
ctfshow WEB web8
首先确定注入点,输入以下payload使SQL恒成立 ?id-1/**/or/**/true 再输入一下payload 使SQL恒不成立 ?id-1/**/or/**/false 由于SQL恒不成立, 数据库查询不到任何数据, 从而导致页面空显示 由以上返回结果可知,该页面存在SQL注入,注入点…...
当AI代写作业成为常态:重构智能时代的教育范式
2023年春季,某重点高中教师发现全班35%的作文呈现相似AI生成特征;同年国际数学竞赛中,参赛选手使用AI解题引发伦理争议。当GPT-4在SAT考试中取得1520分,当Claude3能撰写专业学术论文,教育领域正面临百年未有之大变革。这场技术革命倒逼我们重新思考:在AI能完成知识性任务…...
基于杜鹃鸟鲶鱼优化(Cuckoo Catfish Optimizer,CCO)算法的多个无人机协同路径规划(可以自定义无人机数量及起始点),MATLAB代码
一、杜鹃鸟鲶鱼优化算法 杜鹃鸟鲶鱼优化(Cuckoo Catfish Optimizer,CCO)算法模拟了杜鹃鸟鲶鱼的搜索、捕食和寄生慈鲷行为。该算法的早期迭代侧重于执行多维包络搜索策略和压缩空间策略,并结合辅助搜索策略来有效限制慈鳔的逃逸空…...
Ubuntu 22.04.5 LTS 设置时间同步 ntp
提示:文章为操作记录,以备下次使用 文章目录 前言一、设置ntp1.1替换国内源1.2 更新源&安装1.3 验证 前言 设置时间同步,环境版本 # cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.5 LTS" NAME"Ubuntu" VERSION_…...
搭建前端环境和后端环境
搭建前端环境 ①、安装vscode,并安装相应的插件工具 ②、安装node.js,可以选择当前版本,或者其他版本 ③、创建工作区 创建一个空文件夹,然后通过vscode工具打开,保存为后缀名为.code-workspace ④、从gitee…...
【VirtualBox 安装 Ubuntu 22.04】
网上教程良莠不齐,有一个CSDN的教程虽然很全面,但是截图冗余,看蒙了给我,这里记录一个整洁的教程链接。以备后患。 下载安装全流程 UP还在记录生活,看的我好羡慕,呜呜。 [VirtualBox网络配置超全详解]&am…...
好用的Markdown阅读编辑器Typora破解记录
Typora破解 一、下载Typora二、安装Typora三、破解Typora 😀 记录一下Typora破解记录,怕不常用忘记咯,感觉自己现在的脑子就像我的肠子一样,刚装进去就么得了。。。😔 Typroa算是用起来很舒服的Markdown阅读器了吧&am…...
系统与网络安全------Windows系统安全(1)
资料整理于网络资料、书本资料、AI,仅供个人学习参考。 用户账号基础 本地用户账号基础 用户账号概述 用户账号用来记录用户的用户名和口令、隶属的组等信息 每个用户账号包含唯一的登录名和对应的密码 不同的用户身份拥有不同的权限 操作系统根据SID识别不同…...
使用 Docker Compose 在单节点部署多容器
Docker Compose 是什么 Docker Compose 是一个用于运行多容器应用的工具, 通过一个docker-compose.yml文件, 配置应用的服务、网络和卷,然后使用简单的命令启动或停止所有服务 为什么需要 Docker Compose 当你有一个包含多个相互依赖的容器应用时,手动…...
CSS中的em,rem,vm,vh详解
一:em 和 rem 是两种相对单位,它们常用于 CSS 中来设置尺寸、字体大小、间距等,主要用于更灵活和响应式的布局设计。它们与像素(px)不同,不是固定的,而是相对于其他元素的尺寸来计算的。 1. em …...
MQTT之重复消息(5、TCP重连和MQTT重连)
目录 1. TCP 协议层的重传(原生机制) 2. 触发 TCP 重传的具体场景 3、TCP 重传的关键参数(了解) 第一、重传超时(RTO - Retransmission Timeout) 第二、重传次数 第三、累计时间 vs 本次 RTO 的区别 第四.常见问题解答 第…...
Ground Truth(真实标注数据):机器学习中的“真相”基准
Ground Truth:机器学习中的“真相”基准 文章目录 Ground Truth:机器学习中的“真相”基准引言什么是Ground Truth?Ground Truth的重要性1. 模型训练的基础2. 模型评估的标准3. 模型改进的指导 获取Ground Truth的方法1. 人工标注2. 众包标注…...
Android学习总结之通信篇
一、Binder跨进程通信的底层实现细节(挂科率35%) 高频问题:“Binder如何实现一次跨进程方法调用?” 候选人常见错误: 仅回答“通过Binder驱动传输数据”,缺乏对内存映射和线程调度的描述混淆Binde…...
自动化发布工具CI/CD实践Jenkins部署与配置教程
1. 前言背景 其实一直想把jenkins 的笔记整理下,介于公司这次升级jenkins2.0 ,根据自己部署的一些经验,我把它整理成笔记。 之前我们的jenkins1.0 时代 还一直停留在 free style 或者 maven 风格的项目,随着项目的日益增多&#x…...
kubernet在prometheus+alertmanager+grafana框架下新增部署loki模块
整个框架拓扑图 #mermaid-svg-OK7jgNZ2I7II8nJx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OK7jgNZ2I7II8nJx .error-icon{fill:#552222;}#mermaid-svg-OK7jgNZ2I7II8nJx .error-text{fill:#552222;stroke:#552…...