分布式

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号