《分布式缓存》读书笔记二

如果一个锁守护多个相互独立的状态变量,可以通过分拆锁,使每一个锁守护不同的变量,从而改进可伸缩性

分拆锁有时候可以被扩展,分成若干加锁块的集合,并且使他们归属于相互独立的对象,这样的情况就是分离锁

系统提倡服务无状态,分布式环境中任何节点也是无状态的,可以随意重启和替代,便于做扩展

考虑幂等性设计

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


1617662-14ba39504996a048.jpg

 2PC:

1.提交请求阶段确定相关参与者对于事务处理是否准备就绪

2.提交阶段基于投票结果,由协调器决定提交事务或者是退出事务处理

3PC在2PC的基础上增加了一次交互,既preCommit 预提交,只要预提交成功,则一定保证doCommit提交成功

Raft角色类型:

领导者:处理所有客户端交互,日志复制等动作

选民:完全被动的角色,等待被通知投票

候选人:选举过程中提名自己的实体,一旦选举成功,则成为领导者

 Gossip 去中心化分布式协议

心跳检测:收到心跳可以确认节点正常,但是收不到心跳却不能确认该节点已经死亡

缓存的结果为空也要进行缓存

snowflake 优缺点

优点:

基于内存,很快快。

没有什么依赖,实现也特别简单。

可以根据实际情况调整各各位段,方便灵活。

缺点:

只能趋势递增。(有些也不叫缺点,网上有些如果绝对递增,竞争对手中午下单,第二天在下单即可大概判断该公司的订单量,危险!!!)

依赖机器时间,如果发生回拨会导致可能生成 id 重复。

LRU核心思想是如果数据最近被访问过,那么将来被访问的概率也更高

猜你喜欢

转载自blog.csdn.net/weixin_34321977/article/details/87585239