分布式问题杂谈

RPC

rpc
1.服务的地址怎么知道?注册中心
2.一个服务可能有多台机器可以调用?负载均衡算法
3.怎么调用?io模型和线程模型和序列化协议和同步异步
4.调用失败怎么办?容错策略比如重试或者选择其他机器掉调用

分布式ID

分库分表后,表的全局id
1)数据库自增id,适合并发不高,数据量大的场景;
2)UUID,适合文件名,编号;
3)时间戳+用户id+业务编号:可能会重复
4)snowflake雪花算法:twitter 0|时间|机房id|机器id|同机房同机器同时间会自增,极限值与cpu性能有关(位运算),独立服务部署,时钟回拨问题
5)时间戳+Redis incr id

分布式会话

1)Token JWT
2)tomcat+session:与tomcat耦合,如果换成其他Web服务器比如jetty不行
3)springsession

分布式事务

刚性事务:强一致性,支持ACID
柔性事务:最终一致性,隔离性不完全保证,BASE理论的产物

刚性事务:2PC、3PC
柔性事务:补偿型事务和通知型事务

补偿型事务(同步事务):TCC和Saga
通知型事务(异步事务):最大努力通知事务和事务消息

事务消息:基于MQ自身的事务消息方案和基于DB的本地事务消息表方案
最大努力通知事务:基于事务消息的最大努力通知事务和基于DB消息表的最大努力通知事务

RocketMQ实现分布式事务
在这里插入图片描述
分布式限流

计数器 redis字符串带过期时间
固定窗口
滑动窗口
漏桶算法
令牌桶算法

分布式协议与算法
在这里插入图片描述
分布式锁

谈谈zk与redis分布式锁的区别
1、获取锁的方式:redis不断尝试,死循环;zk获取不了锁注册监听器;
2、客户端挂了:redis需要等待超时时间;zk知道客户端挂了,删除节点;
3、redis是AP,zk是CP,redis实现分布式锁有bug,单点不现实,如果主从复制当主节点挂了,加锁的key还没同步到从节点,其他客户端就加锁成功了

怎么实现redis分布式锁

加锁:
setnx命令
当一个key不存在时 ,才能设置成功

释放锁:
del key

ex秒 px毫秒
为了防止客户端挂了不能删除锁,所以要给锁设置超时时间

可能锁已经超时了自动删除但是客户端还没有执行完加锁代码,所以客户端要给锁续约,比如redisson的看门狗

公平锁实现原理
重入锁实现原理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值