建设网站的风险6,做任务打字赚钱的网站,国家企业信息服务平台,在国内可以做国外的网站吗分布式锁
没有图形#xff0c;只通过大量文字进行说明。分布式锁#xff1a;redis分布式锁#xff0c; zk分布式锁#xff0c; 数据库做分布式锁
redis分布式锁 setnx key value ex 10 原子操作 AB两个线程减库存业务#xff0c;假设库存是10 A线程获取锁#xff0c;…分布式锁
没有图形只通过大量文字进行说明。分布式锁redis分布式锁 zk分布式锁 数据库做分布式锁
redis分布式锁 setnx key value ex 10 原子操作 AB两个线程减库存业务假设库存是10 A线程获取锁B线程等待此时A线程释放锁程序还未执行完成。此时B线程获取锁此时AB都将库存减到9与业务不符。 解决办法锁续期。 为了解决单机redis瓶进采用redis集群。一主一从线程A从主机获取锁此时主宕机线程B从从机也获取了锁 解决办法使用红锁 5奇数台redis集群没有主从概念假设编号为B1 B2 B3 B4 B5。请求依次执行,当一半以上加锁成功才算加锁成功此时A线程依次加锁成功B1 B2 B3即获取锁成功。 线程B 加锁B4 B5成功没有获取锁。此时还存在一个问题如果B3宕机马上重启成功。此时线程B 加锁B3 B4 B5成功也获取了锁这是红锁存在的问题。解决办法延时重启 其实实际中采用单机redis做分布式锁即可使用分布式框架redisson。 5.线程A获取锁此时 如果程序jvm线程stw, 会导致锁丢失。仍然想获取锁可以使用 zk节点数据库。线程A获取锁返回将锁存放在数据库中此时JVM stw, 线程b去获取锁修改锁与数据库已经存在的锁标识进行对比。
数据库做分布式锁
锁的id作为主键索引或者唯一索引
分布式事务
-----------程序A----------程序B--------------- | | | | DB DB AB两个串行执行的程序都有数据库操作程序A执行后程序B出现异常时数据库如何进行回滚
采用了协调者角色框架isoseateAT 两段式提交
投票阶段提交/回滚阶段
扩展三段式提交
提高高并发设计
程序请求后直接返回
自己手写mq监控程序定时任务web请求mq和操作数据库