分布式

Zookeeper实现分布式锁
- 核心流程:
- 创建临时顺序节点node_n
- 获取所有子节点并比较
- 判断node_n是否是节点编号最小的节点
- 监听比node_n次小的node_n-1节点
- node_n-1节点删除则再次获取所有子节点比较
- 节点的监听机制可以保证占有锁的方式有序且高效。
- 避免羊群效应(节点挂掉时,所有节点监听)。
- C
AP原则
Redis实现分布式锁
- Redisson框架中的类库实现,性能较高。
- setnx [key] [value]实现分布式锁
- 通过设置过期时间expire解决setnx长期有效的问题(原子性得不到满足)
- set [key] [value] [EX seconds] [PX milliseconds] [NX|XX]:NX键不存在时操作;XX键存在时操作
- 机制:加载锁(锁不存在则加锁);锁互斥(不包含客户端id则循环等待);watch dog自动延期;可重入加锁;释放锁。
CAP原则
分布式锁特点
- 互斥性:任意时间只能有一个客户端获取锁。
- 安全性:锁不能由其他客户端删除。
- 死锁:机制避免。
- 容错:宕机时仍能释放和获取锁。
分布式系统的CAP原则
- Consistency:一致性,更新复制到整个分布式系统,以保证数据的最终一致。
- Availablity:可用性,服务一直可用
- Partiton Torerant:分区容错性,分布式系统在遇到某节点或网络分区故障时,能够对外提供一致性或可用性的服务。
2pc和3pc
- 2pc(阻塞,协调者单点问题):提交请求阶段,参与者将结果通知协调者;提交阶段,协调者根据反馈决定是否提交。
- 3pc(降低阻塞范围,避免了协调者单点问题):CanCommit阶段,询问是否可以提交;PreCommit,可以则预提交,否则中断事务;Do Commit,提交。
分布式Session
- 客户端存储不敏感信息。
- session复制:局域网发送广播异步同步session。
- session绑定:Nginx通过ip-hash绑定客户端和服务器。
- 基于redis存储session。
分布式ID
- 数据库自增。
- UUID。
- snowflake:划分命名空间生成ID。
- Leaf-segment数据库方案:批量获取id,业务不同的发号用biz_tag字段区分。
- 双buffer优化解决数据波动过大的问题。
- Leaf-snowflake服务,连接zookeeper检查是否注册过节点:时钟回拨时返回error_code。
你知道的越多,你不知道的越多。

将一个系统的各个组件分布在网络上的各台主机, 并且各组件之间仅通过消息传递来通信并协调工作。
浙公网安备 33010602011771号