这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
1.三阶段提交缓和两阶段提交的哪两个问题?
三阶段提交的优点是解决了二阶段提交方法同步阻塞的问题,改善了二阶段提交的数据不一致性的问题。
2.什么场景适合乐观锁?什么场景适合悲观锁?
乐观锁认为自己在修改数据时,不会有别的线程修改数据,所以不会添加锁,只会在更新数据的时候会判断有没有别的线程修改当前的数据,如果当前的数据没有被更新,则会成功的讲数据写入,如果数据已经被别的线程更新,则会根据不同的实现方式执行不同的操作:报错,自动重试.悲观锁,他就很悲观,每次拿数据的时候都会认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想拿到这个数据的时候就会一直等待,直到他拿到锁.
- 悲观锁适合写操作,先加锁,保证写入时,数据正常.
- 乐观锁适合读操作,不加锁的特点能使其读操作的性能大幅提升.
3.RAFT协议中,Stale读是如何产生的?该如何解决Stale读的问题?
旧Leader在响应没有同步的日志, 1. 只响应已提交的日志, 2. Leader重启后必须经过心跳包后才响应客户端, 可以通过心跳包判断是否有新Leader产生.
待续...
在共识协议中,为什么说允许数据被覆盖会带来数据一致性问题? RAFT协议中,Leader写成功日志Log20但未同步给Followers后宕机,Follower重新选举后产生一条新日志Log20,这时Leader重启,整个系统发现两种不一样的Log20的记录,请问如何区分并拒掉前面的Log20?