《分布式缓存》读书笔记二
如果一个锁守护多个相互独立的状态变量,可以通过分拆锁,使每一个锁守护不同的变量,从而改进可伸缩性
分拆锁有时候可以被扩展,分成若干加锁块的集合,并且使他们归属于相互独立的对象,这样的情况就是分离锁
系统提倡服务无状态,分布式环境中任何节点也是无状态的,可以随意重启和替代,便于做扩展
考虑幂等性设计
C:任何的读写都应该看起来是“原子”的,或串行的,所有的读写请求都好像被全局排序
A:对任何非失败节点都应该在有限时间内给出请求的回应
P:允许节点之间丢失任意多的消息
Paxos 理论简介
Prepare 阶段:
1.Proposer 发送 Prepare,生成全局唯一且递增的提案ID,向Paxos 集群的所有机器发送请求
2.Acceptor 应答 Prepare
Accept 阶段:
1.Proposer 发送 Accept(Prepare阶段多数派返回值,就是超过 n/2+1,n为机器数)
2.Acceptor 应答 Accept
2PC:
1.提交请求阶段确定相关参与者对于事务处理是否准备就绪
2.提交阶段基于投票结果,由协调器决定提交事务或者是退出事务处理
3PC在2PC的基础上增加了一次交互,既preCommit 预提交,只要预提交成功,则一定保证doCommit提交成功
Raft角色类型:
领导者:处理所有客户端交互,日志复制等动作
选民:完全被动的角色,等待被通知投票
候选人:选举过程中提名自己的实体,一旦选举成功,则成为领导者
Gossip 去中心化分布式协议
心跳检测:收到心跳可以确认节点正常,但是收不到心跳却不能确认该节点已经死亡
缓存的结果为空也要进行缓存
snowflake 优缺点
优点:
基于内存,很快快。
没有什么依赖,实现也特别简单。
可以根据实际情况调整各各位段,方便灵活。
缺点:
只能趋势递增。(有些也不叫缺点,网上有些如果绝对递增,竞争对手中午下单,第二天在下单即可大概判断该公司的订单量,危险!!!)
依赖机器时间,如果发生回拨会导致可能生成 id 重复。
LRU核心思想是如果数据最近被访问过,那么将来被访问的概率也更高