avatar
文章
377
标签
447
分类
12
首页
留言板
知识库
归档
标签
分类
关于
Dai Wei
搜索
首页
留言板
知识库
归档
标签
分类
关于

Dai Wei

一致性哈希算法详解:哈希环、虚拟节点、数据倾斜与分布式缓存应用
发表于2023-06-27|分布式系统
普通取模扩缩容会大规模迁移 key。一致性哈希把变动控制在相邻节点,是 Memcached、Redis Cluster 等方案的常用思路之一。 要解决什么问题分布式缓存或分片集群增删节点时,hash(key)%N 会导致几乎所有 key 重映射,引发缓存击穿和迁移风暴。大促前扩容若未预估迁移量,可能拖垮后台 DB。需要扩缩容只影响环上局部区间。 核心原理哈希值映射到环,key 顺时针找第一个节点负责。新增节点只接管一部分 key;删除节点将其 interval 交给后继。虚拟节点:每物理机多个环上点,改善负载均衡。Jump Hash、Maglev 等是替代方案,实现和倾斜特性不同。 方案权衡一致性哈希不保证绝对均匀,虚拟节点数需调优(常见 100~200/物理节点)。Redis Cluster 16384 slot 是固定槽位变体,迁移按 slot 进行。范围分片利于范围查询但易热点;取模简单但扩缩容代价高。按访问模式选型。 落地要点监控各节点 key 数与 QPS;扩缩容前预热;结合副本提高可用;客户端缓存拓扑视图并处理 moved/ask。测试 ske...
分布式协调详解:Leader、Quorum、Lease、Fencing Token 与 Gossip
发表于2023-06-17|分布式系统
分布式协调回答两件事:谁做决定,状态怎么同步。本文对比 Leader+Quorum 与 Gossip 等模式,并说明 Lease 和 Fencing 如何防止旧主捣乱。 要解决什么问题多节点需选主写元数据、抢锁、避免脑裂。无协调则各自为政;协调不当则单点或分裂。Lease 过期后旧 Leader 仍可能写存储;没有 fencing 的锁在 TTL 场景下无法阻止迟到写覆盖新主的数据。 核心原理中心化:Leader 串行化写,Follower 复制;Quorum (N/2+1) 决定 commit。Lease 授予带时限的权威,过期需重新获取。Fencing Token 单调递增,存储层拒绝旧 token。去中心化:Gossip pairwise 传播,最终一致,适合 membership 和 Cassandra 反熵,不保证即时一致写。 方案权衡中心化一致性强、路径清晰(ZK/Raft);Gossip 扩展性好但冲突解决复杂、收敛有时间。脑裂防护需 Quorum 或 fencing,不能仅靠”我觉得我还是主”。选模式看一致延迟要求、节点规模和网络拓扑。 ...
CAP 定理与 BASE 理论详解:一致性、可用性、分区容错与最终一致性
发表于2023-06-07|分布式系统
CAP 被误读为”三选二”太久了。本文按分区场景重新解释 C、A、P 及 BASE 实践含义,并引入 PACELC 补充无分区时的延迟权衡。 要解决什么问题分布式系统网络分区不可避免。分区发生时,系统要么拒绝部分请求保线性一致,要么继续服务但允许读到旧值——这是架构选型的根本分歧。业务方常问”能不能既要又要”,需要工程师用 CAP/PACELC 语言解释物理约束而非简单拒绝。 核心原理CAP 中 C 指 linearizability,A 指非故障节点必须响应,P 指网络分区容忍。分区时只能在 C 与 A 间取舍;CA 仅单机无分区模型可行。BASE:基本可用、软状态、最终一致,是 AP 方向的工程化落地。PACELC:无分区时在 Latency 与 Consistency 间权衡,如 MySQL 异步复制 vs 半同步。 方案权衡ZK/etcd 偏 CP,选举期间可能拒绝写;Eureka/Cassandra 偏 AP,允许注册信息短暂不一致。同一系统不同操作可能 CP 或 AP——读 Follower 可能是 AP,写 Leader 是 CP。...
拜占庭将军问题详解:分布式共识、3m+1 节点与 BFT 容错
发表于2023-05-28|分布式系统
Raft 假设节点故障但不作恶。拜占庭模型把”撒谎的节点”也纳入考量,是区块链与开放联盟链的理论基础之一。 要解决什么问题Crash-stop 故障下 Raft 够用;若节点被入侵、伪造消息或双重投票,简单多数派无法保证安全。跨组织联盟链、部分许可链需要在不可信参与者间达成共识,成本远高于公司内部 etcd 集群。 核心原理拜占庭将军问题:n 个将军需一致行动,存在叛徒传假消息。经典结论:3f+1 节点最多容忍 f 个拜占庭节点。PBFT 等 BFT 算法通过 pre-prepare/prepare/commit 多轮交互和签名验证达成一致,消息复杂度 O(n²) 级别,延迟显著高于 Raft。 方案权衡BFT 安全强但性能开销大,一般企业内部系统用 CP 的 Raft/ZAB 即可,假设节点非恶意但会 crash。区块链因开放参与和经济激励才广泛用 BFT 变体(PoW/PoS 等是另一种威胁模型)。威胁模型驱动算法选择,不要过度设计。 落地要点内部微服务用 mTLS 和审计降低恶意风险;评估是否真需要 BFT 往往答案是否。了解 P...
分布式事务解决方案详解:XA、AT、TCC、Saga、本地消息表与事务消息
发表于2023-05-18|分布式系统
跨库跨服务时本地事务不够用了。本文梳理分布式事务方案谱系及边界,强调”先减少分布式事务,再选对一致性级别”的工程思路。 要解决什么问题微服务各用独立数据库,下单涉及订单库、库存库、支付库,任一环节失败需整体回滚或补偿。单机 ACID 无法跨进程;分库分表后即使同一业务也可能跨物理库。若强行 2PC,锁持有时间长、吞吐下降,且协调者单点风险高。 核心原理2PC/XA 强一致但阻塞;Seata AT 基于 undo log 自动回滚,对业务侵入低;TCC 业务层 Try/Confirm/Cancel,灵活但编码和幂等成本高;Saga 长流程正向链+补偿链;本地消息表与 RocketMQ 事务消息通过”先落库再异步确认”实现最终一致。BASE 是大多数互联网业务的真实选择。 方案权衡强一致适合短事务、高价值金融场景;最终一致适合订单、积分、通知等可补偿场景。没有银弹——选方案看一致性要求、开发成本、运维成熟度。能合并服务或单库事务就尽量合并,是成本最低的”分布式事务解决方案”。 落地要点Outbox 模式保证消息与本地写同事务落库;TCC Confir...
ZooKeeper 进阶详解:ZAB 协议、Leader 选举、集群部署与会话机制
发表于2023-05-08|分布式系统
理解 ZK 内部,关键是 ZAB 如何在崩溃后恢复一致并选出 Leader。本文整理广播、恢复两阶段与 session 机制,便于与 Raft 对照学习。 要解决什么问题协调服务自身必须高可用。节点宕机、网络分区时,谁有权写入、如何保证已提交事务不丢,是 ZAB 要解决的问题。运维还需面对 epoch 变更期间的服务短暂不可用、Follower 落后过多时的同步耗时等现实问题。 核心原理ZAB 分崩溃恢复(选举+同步)和消息广播(类似 quorum ack)。Epoch 标识 Leader 任期;zxid 高 32 位 epoch 低 32 位计数。选举比较 zxid 和 myid,最大者胜出。Follower 收到提案 ACK 过半 Leader 即可 commit。Session 心跳维持临时节点;超时则认为客户端死亡并删除临时 ZNode。 方案权衡写必须走 Leader,读可从 Follower 但可能 stale;选举期间不服务写。与 Raft 相似度 high 但术语和实现细节不同,面试常要求对比。Observer 节点扩展读不参与投票,适合跨机房读扩展但写路径仍...
分布式锁入门:为什么需要分布式锁、锁粒度、超时续约与应用场景
发表于2023-04-29|分布式系统
本地锁管不住跨进程竞争。本文厘清何时需要分布式锁、锁该具备什么语义,以及哪些场景其实用 DB 条件更新或幂等就能解决,避免锁滥用拖垮吞吐。 要解决什么问题秒杀库存、定时任务互斥、分布式资源协调等场景,多个服务实例同时修改共享资源。JVM 内 synchronized 无法跨进程,可能出现超卖或 cron 重复执行。若只锁”查询库存”而不锁”扣减+写订单”整段临界区,仍然会在并发写路径上出错。 核心原理分布式锁把互斥状态存到所有进程可访问的外部系统(Redis/ZK/DB/etcd)。基本条件:互斥、高可用防死锁(TTL/会话)、安全释放(只删自己的锁)。进阶语义包括可重入、阻塞/tryLock 语义、看门狗续约,以及 Fencing Token——下游存储只接受更大 token 的写,拦截锁过期后的迟到写。锁与 Leader 选举、Quorum 同属协调问题家族。 方案权衡锁降低并发度,能用 DB 条件更新(where count>0)、唯一索引、乐观锁、MQ 串行消费的场景不必上锁。Redis 锁高性能适合短临界区;Z...
分布式 ID 设计实战:订单号、优惠券、一码付与业务 ID 生成策略
发表于2023-04-19|分布式系统
技术方案要落到业务语境才有意义。本文从订单号、券码、支付码等场景梳理 ID 设计的额外约束,说明如何在通用算法之上叠加业务编码规则。 要解决什么问题纯技术 ID 方案未考虑业务可读性、防猜测、对账需要和渠道编码。订单号可能要带日期和业务线便于客服查询;优惠券要短且难爆破;一码付二维码需固定长度便于扫码设备解析。若直接暴露 DB 自增 ID,还存在竞对估算销量和恶意遍历的风险。 核心原理业务 ID 常在 Snowflake/号段之上叠加:时间分段(按日分库分表)、业务前缀(区分订单类型与渠道)、随机盐(防遍历)、校验位(防手工输错)。订单号可用”日期+序列+分片位”组合;短码用 Base62 压缩并剔除易混淆字符;支付码绑定用户/session 并设 TTL,消费后立即失效。 方案权衡可读性 vs 安全性:纯递增易猜测,需加随机段或哈希;长度 vs 容量:短码用户友好但熵空间小,要监控使用率;中心化发号易管控但增加依赖,本地生成低延迟但 workerId 治理复杂。对外 ID 与对内 surrogate key 分离是常见折中:内部仍用 bigint,对外展...
分布式 ID 生成方案详解:UUID、Snowflake、号段模式、Leaf 与 Tinyid 对比
发表于2023-04-09|分布式系统
订单号、消息 ID、分库分表主键都需要”全局唯一且可用”。本文对比常见生成方案及选型维度,帮助在性能、有序性和运维复杂度之间做理性取舍。 要解决什么问题多节点并发生成 ID 时,数据库单表自增成为瓶颈且暴露业务量;UUID 虽唯一但无序,B+ 树索引插入性能差,也不利于按时间范围排查。业务还可能要求趋势递增、固定长度、不含敏感信息或便于客服口述,单一技术方案往往无法同时满足所有维度。 核心原理评估维度包括:唯一性、吞吐、趋势递增、信息安全、高可用与运维成本。UUID 本地生成无中心瓶颈但无序;Snowflake 用时间戳+机器号+序列号,趋势递增但依赖时钟与 workerId 分配;号段模式从 DB 批量取号,降低 DB 压力;Leaf、Tinyid 等在 Snowflake 或号段思路上做双 buffer、缓存优化等工程增强。 方案权衡UUID 适合日志 traceId 等无排序场景;Snowflake 适合高并发订单号;号段适合可容忍预分配、希望减少 DB 访问的场景;Redis INCR 实现简单但需考虑持久化、主从切换时的重复风险。不要用一种方案套所有业务——对外订单...
分布式配置中心详解:Apollo、Nacos、Spring Cloud Config 与 K8s ConfigMap 对比
发表于2023-03-30|分布式系统
配置散落在各服务里时,改一个开关要发版十几次。配置中心解决的是”配置如何集中发布、审计与热生效”,本文对比主流方案并给出落地注意事项。 要解决什么问题微服务实例众多,数据库连接串、功能开关、限流阈值分散在本地文件或环境变量中。变更常需重启或重新打包,缺乏审计、灰度和一键回滚,还易出现测试与生产配置漂移。事故复盘里常见的”配置改错一台没改全”本质上是缺乏单一可信源和推送机制。 核心原理配置中心提供集中存储、版本管理、推送或长轮询、权限与变更审计。客户端启动拉取全量配置,运行中订阅变更并热更新到 Spring Environment 或等价机制。与注册中心的职责边界:配置中心管参数与开关,注册中心管实例地址与健康状态。Nacos 两者兼有,但概念上仍应分开设计命名空间与权限模型。 方案权衡Apollo 功能完整,灰度发布、权限、审计成熟,适合大型 Java 团队;Nacos 配置+注册一体化,运维组件少;Spring Cloud Config 依赖 Git 作为后端,适合配置即代码但实时性偏弱;K8s ConfigMap/Secret 适合容器原生部署,但缺少细粒度 U...
1…111213…38
avatar
Dai Wei
软件开发者,记录技术探索与实践
文章
377
标签
447
分类
12
Follow Me
公告
分享软件开发、工程实践与持续学习中的思考。
最新文章
Trae + MiniMax 多场景实战:Redis 故障排查与跨语言重构2026-08-28
Kimi K3 实战:全栈项目、Java 项目改造与 3A 游戏 Demo2026-08-23
测试开发学习路线(2026 最新版):AI 时代如何从测试走向质量工程2026-08-20
IDEA + Qoder 插件多场景实战:接口优化与代码重构2026-08-18
DeepSeek V4 + Claude Code 实战:代码能力深度测评2026-08-14
分类
  • AI 编程28
  • Java103
  • 人工智能39
  • 分布式系统26
  • 学习路线5
  • 开发工具11
  • 数据库42
  • 系统设计26
标签
线程优先级 DBMS 大模型 Java基础 命令 Top K 安全 Loop 计算机网络 Raft 贪心 修饰权限 TCC 最终一致性 召回 网络编程三要素 服务调用 分布式理论 知识体系 复杂度 红黑树 Unsafe 面试 Java26 BASE 内存管理 语音 redo log Kimi NoSQL Seata CAS 优化器 RDB 线程通信 面试题 IDE 死锁 ZAB 编排
归档
  • 八月 2026 7
  • 七月 2026 7
  • 六月 2026 6
  • 五月 2026 7
  • 四月 2026 6
  • 三月 2026 4
  • 二月 2026 5
  • 一月 2026 5
网站信息
文章数目 :
377
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2017 - 2026 By Dai Wei框架 Hexo 8.1.2|主题 Butterfly 5.7.0
搜索
数据加载中