江帅帅 | 奈学教育
江帅帅 | 奈学教育 - 架构师
实名认证 专业认证

性别: 北京 - 北京市 注册于 2020-06-15

擅长:Java,Python

向TA求助
21金币数
280 经验值
1个粉丝
主页被访问 90 次

最近动态

2020-06-22 11:28 发表了文章

2020-06-20 11:58 发表了文章

2020-06-17 14:52 回答问题

其实优化的点特别多,主要分为三个方面说吧 1.数据库设计和使用规范 2.根据SQL执行计划优化 3.读写分离 4.分库分表

2020-06-17 14:51 回答问题

1)互斥性 在任意时刻只有一个客户端可以获取锁。 2)防死锁 假如一个客户端在持有锁的时候崩溃了,没有释放锁,那么别的客户端无法获得锁,则会造成死锁,所以要保证客户端一定会释放锁。 我们在设置Redis key的同时我们也设置了ttl,如果客户端发生崩溃锁也会被释放 3)持锁线程解锁 也就是谁加的锁谁去释放锁,加锁和解锁必须是同一个客户端,客户端 A 的线程加的锁必须是客户端 A 的线程来解锁,客户端不能解开别的客户端加的锁。 4)可重入 当一个客户端获取对象锁之后,这个客户端可以再次获取这个对象上的锁。

2020-06-17 14:51 回答问题

一共分为4步 第一步1)首先利用 Redis 缓存的性质在 Redis 中设置一个 key-value 形式的键值对,key 就是锁的名称,然后客户端的多个线程去竞争锁,竞争成功的话将 value 设为客户端的唯一标识。 第二步2)竞争到锁的客户端要做两件事: 设置锁的有效时间也就是TTL,目的是防止死锁 (非常关键) 需要根据业务需要,不断的做压力测试来决定TTL有效期的合理时间。 分配客户端的唯一标识,目的是保证只有持锁人才能解锁(非常重要) 所以这里的 value 会设置成唯一标识 (比如 uuid)

2020-06-17 14:50 回答问题

首先说下分布式锁的作用,它是要解决多线程对共享资源的访问而产生的线程安全问题 我所知道的方案有 1、数据库的乐观锁; 2、redis; 3、zookeeper; 4、etcd 我们项目使用的是Redis实现的分布式锁,场景是多台机器同时抢购商品,通过synchronized 只能保证一个系统的线程安全,并不能保证分布式的线程安全。所以每个节点通过redis的set key的方式来做竞争锁,达到有序消费资源。

2020-06-17 14:50 回答问题

活动库存量扣减,订单重复下单。

2020-06-17 14:50 回答问题

当leader崩溃或者leader失去大多数的follower,这时zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态. 1.当Leader 挂了之后,余下的非Observer 服务器都会将自己的服务器状态变更为LOOKING ,然后开始进入Leader 选举流程。 2.每个Server 会发出一个投票。 在这个过程中,需要生成投票信息( myid, ZXID )。因为是运行期间,因此每个服务器上的ZXID 可能不同,我们假定Server1的ZXID 为

2020-06-17 14:50 回答问题

Zookeeper的选举机制原理是基于Paxos算法实现的,解决分布式系统中如何就某个决议达成一致的方案。 Leader选举分为两个情况,一种为集群启动时期,一种为集群运行期间。

2020-06-17 14:47 回答问题

欢迎大家积极回答问题,正确答案:ABC