当前位置: 首页 > news >正文

从零开始学习JavaWeb-20


 ​​一、分布式一致性的理论基础​

​1. CAP 定理与一致性模型​
  • ​CAP 定理核心​​:

    ​特性​

    ​描述​

    ​业务场景​

    ​一致性 (C)​

    所有节点数据实时同步

    金融交易(支付状态强同步)

    ​可用性 (A)​

    每次请求均获响应(可能非最新数据)

    电商商品浏览(允许短暂延迟)

    ​分区容错性 (P)​

    网络分裂时系统继续运作

    跨机房部署(必须保障)

    ​实践启示​​:

    • ​CP 系统​​(如 ZooKeeper):牺牲可用性保障强一致性(如银行转账)。

    • ​AP 系统​​(如 Cassandra):牺牲一致性保障高可用(如实时推荐系统)。

  • ​一致性模型分类​​:

    • ​强一致性​​:写入后立即可读(线性一致性),通过 ​​Paxos/Raft​​ 实现(如 Etcd)。

    • ​最终一致性​​:无新写入后终态一致(如 DNS 系统),基于 Gossip 协议。


 ​​二、主流分布式一致性算法​

​1. Paxos 协议:理论基石​

​角色与两阶段流程​​:

sequenceDiagramProposer->>Acceptor: Prepare(n)Acceptor-->>Proposer: Promise(ignore <n)Proposer->>Acceptor: Accept(n, v)Acceptor-->>Proposer: Accepted(n, v)

​核心机制​​:

  • ​提案编号全局唯一​​:避免冲突(时间戳 + 节点 ID)。

  • ​多数派原则(Quorum)​​:需半数以上节点同意(故障容忍公式:f < N/2)。

    ​工程缺陷​​:实现复杂,多轮通信开销大(Google Chubby 团队曾称“理解需 6 个月”)。

​2. Raft 协议:工业级首选​

​角色状态机​​:

graph LRFollower -->|选举超时| CandidateCandidate -->|获多数票| LeaderLeader -->|故障| Follower

​核心流程​​:

  1. ​领导者选举​​:节点超时未收心跳 → 成为 Candidate → 获多数票成为 Leader。

  2. ​日志复制​​:

    • Leader 接收写请求生成 Log Entry。

    • 并行发送 AppendEntries RPC 至 Followers。

    • 多数节点持久化后提交日志。

      ​优势​​:逻辑清晰,易于实现(etcd、Consul 采用)。

​3. ZAB 协议:ZooKeeper 的引擎​

​与 Raft 关键差异​​:

​特性​

Raft

ZAB

​任期命名​

Term

Epoch

​心跳方向​

Leader → Follower

Follower → Leader

​写操作流程​

先广播后持久化

先本地持久化后广播

​崩溃恢复模式​​:选举最高 zxid 节点 → 数据同步 → 广播新 Leader。


 ​​三、分布式锁的实现方案​

​1. 三大实现方式对比​

​方案​

​核心原理​

​适用场景​

​性能​

​数据库锁​

唯一索引约束(INSERT ... ON DUPLICATE

低并发简单场景

​Redis 锁​

SETNX key uuid EX 30

高并发,允许偶尔失效

⭐⭐⭐⭐⭐

​ZooKeeper 锁​

临时顺序节点 + Watcher 监听

强一致性需求(如金融)

⭐⭐⭐

​Redis 锁避坑​​:

  • ​锁续期​​:Redisson 看门狗机制自动续期(默认 30 秒检测)。

  • ​误释放​​:Lua 脚本校验 UUID 再释放(if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]))。


 ​​四、分布式事务解决方案​

​1. Seata AT 模式​

​两阶段流程​​:

graph TBTM[事务管理器] --> TC[事务协调器]TC --> RM1[资源管理器]TC --> RM2[资源管理器]RM1 --> DB1[生成 undo_log]RM2 --> DB2[生成 undo_log]

​核心机制​​:

  • ​全局锁​​:SELECT FOR UPDATE防止其他事务修改数据。

  • ​回滚日志​​:记录数据修改前后的快照(SQL 反向补偿)。

​2. TCC 模式​

​三阶段操作​​:

  1. ​Try​​:预留资源(如冻结库存)。

  2. ​Confirm​​:实际提交(扣减库存)。

  3. ​Cancel​​:失败回滚(解冻库存),需业务幂等设计。

    ​适用场景​​:高一致性要求(如机票超卖后的退款补偿)。


 ​​五、工业级实战案例​

​1. 电商订单支付系统​

​高并发设计​​:

graph TB用户 -->|下单| 订单服务订单服务 -->|发送 MQ| 库存服务库存服务 --> Redis[预减库存]库存服务 --> DB[持久化库存]订单服务 -->|TCC| 支付服务

​关键保障​​:

  • ​库存预扣​​:Redis 原子操作防超卖(DECR stock_count)。

  • ​最终一致性​​:支付成功消息异步更新订单状态(MQ 重试机制)。

​2. 配置中心高可用(Nacos)​

​架构要点​​:

  • ​数据分片​​:配置按 Group 分片存储。

  • ​多级缓存​​:客户端内存缓存 + 服务端 Redis 缓存。

  • ​长轮询​​:配置变更实时推送(30 秒超时)。


 ​​六、算法选型与未来趋势​

​1. 一致性协议选型指南​

​特性​

Paxos

Raft

ZAB

​理解难度​

⭐⭐⭐⭐⭐

⭐⭐

⭐⭐⭐

​性能​

高(无 Leader 瓶颈)

中高(依赖 Leader)

​适用场景​

理论验证

通用系统(etcd)

协调服务(ZooKeeper)

​选型建议​​:

  • 快速落地 → Raft(etcd/Consul)。

  • 强协调服务 → ZAB(ZooKeeper)。

​2. 前沿趋势​
  • ​性能突破​​:RDMA 网络加速共识通信(延迟降低 80%)。

  • ​安全增强​​:抗量子计算签名算法集成(如 Dilithium)。

  • ​无主协议兴起​​:EPaxos 优化跨地域部署。


 ​​总结:分布式系统设计原则​

  1. ​故障是常态​​:默认节点会宕机、网络会分区(冗余副本 + 自动故障转移)。

  2. ​异步解耦​​:消息队列(Kafka)解耦耗时操作(如日志记录)。

  3. ​幂等性​​:所有操作支持重试(唯一请求 ID 防重复)。

  4. ​监控先行​​:分布式追踪(SkyWalking) + 日志聚合(ELK)。

​“分布式系统的本质是在不确定性中寻求确定性”​

​动手实践​​:

  1. 基于 Redisson 实现秒杀库存锁(对比 Redis 与 ZooKeeper 性能)。

  2. 模拟网络分区(iptables断网),观察 ZooKeeper 选举行为。

  3. 压测 Seata AT 模式与 TCC 模式的性能差异。

http://www.dtcms.com/a/355005.html

相关文章:

  • 架构评审:构建稳定、高效、可扩展的技术架构(上)
  • 刷题日记0828
  • AMGCL介绍和使用
  • Spark 安装教程与使用指南
  • Jetson(meta‑tegra)升级要点与 doflash.sh 组件清单
  • 嵌入式研发工程师成长路线图,基础入门 → 中级提升 → 高级进阶 → 专家方向
  • 基于 Spring AMQP 的 RabbitMQ 分布式消息系统实战
  • imx6ull-驱动开发篇47——Linux SPI 驱动实验
  • Java全栈工程师的实战面试:从基础到微服务的全面解析
  • 磁力计校准矩阵求解方法解析
  • go grpc使用场景和使用示例
  • python02
  • Codeforces Round 1043 (Div. 3) F. Rada and the Chamomile Valley
  • 02Shell的变量运算以及数据比较
  • 卷积神经网络(一):卷积神经网络基础
  • 基于卷积神经网络 (CNN) 的 MNIST 手写数字识别模型
  • 如果给我们直接创建的类加上索引?和len方法?
  • 深度学习篇---模型参数保存
  • 卷积神经网络实现mnist手写数字集识别案例
  • Apollo-PETRv1演示DEMO操作指南
  • 【Qt】QCryptographicHash 设置密钥(Key)
  • Deeplizard 深度学习课程(四)—— 模型构建
  • jwt原理及Java中实现
  • 海盗王64位dx9客户端修改篇之二
  • 学习Java29天(tcp多发多收)但是无解决客户端启动多个问题
  • ProfiNet 转 Ethernet/IP 柔性产线构建方案:网关技术保护新能源企业现有设备投资
  • LeetCode Hot 100 第7天
  • 第三十天:世界杯队伍团结力问题
  • EF Core 编译模型 / 模型裁剪:冷启动与查询优化
  • QT之双缓冲 (QMutex/QWaitCondition)——读写分离