分布式

分布式

Zookeeper实现分布式锁

  • 核心流程:
    • 创建临时顺序节点node_n
    • 获取所有子节点并比较
    • 判断node_n是否是节点编号最小的节点
    • 监听比node_n次小的node_n-1节点
    • node_n-1节点删除则再次获取所有子节点比较
  • 节点的监听机制可以保证占有锁的方式有序且高效。
  • 避免羊群效应(节点挂掉时,所有节点监听)。
  • CAP原则

Redis实现分布式锁

  • Redisson框架中的类库实现,性能较高。
  • setnx [key] [value]实现分布式锁
  • 通过设置过期时间expire解决setnx长期有效的问题(原子性得不到满足)
  • set [key] [value] [EX seconds] [PX milliseconds] [NX|XX]:NX键不存在时操作;XX键存在时操作
  • 机制:加载锁(锁不存在则加锁);锁互斥(不包含客户端id则循环等待);watch dog自动延期;可重入加锁;释放锁。
  • C AP原则

分布式锁特点

  • 互斥性:任意时间只能有一个客户端获取锁。
  • 安全性:锁不能由其他客户端删除。
  • 死锁:机制避免。
  • 容错:宕机时仍能释放和获取锁。

分布式系统的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。
posted @ 2020-08-09 08:52  樱空废宅  阅读(110)  评论(0)    收藏  举报