加入收藏 | 设为首页 | 会员中心 | 我要投稿 信阳站长网 (https://www.0376zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

实战来了:大佬级别数据预处理方式

发布时间:2021-02-19 16:55:49 所属栏目:外闻 来源:互联网
导读:最近几个月,工作生活发生了巨大变化。迅速的数字化转型对于业务连续性至关重要,即使在这些充满挑战的时期也一直在推动增长。 当前的环境也给IT基础架构带来了巨大压力。随着全体员工转向在线应用,激活家庭Wi-Fi并最终在一夜之间成为远程员工,许多组织被

最近几个月,工作生活发生了巨大变化。迅速的数字化转型对于业务连续性至关重要,即使在这些充满挑战的时期也一直在推动增长。

当前的环境也给IT基础架构带来了巨大压力。随着全体员工转向在线应用,激活家庭Wi-Fi并最终在一夜之间成为远程员工,许多组织被迫完全调整其运营模式。

建立业务基础架构可能并没有考虑到病毒大流行,但是制定了明确概述的灾难恢复措施的企业应该能够更好地应对逆境。学习曲线很大,管理人员正在分析如何最好地支持客户和员工。

尽管人与健康是第一位的,但人们对服务水平和客户满意度仍然抱有很高的期望。这还包括安全考虑、业务保护和连续性以及减少资本支出。

 

Redisson实现

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还实现了可重入锁(Reentrant Lock)、公平锁(Fair Lock、联锁(MultiLock)、 红锁(RedLock)、 读写锁(ReadWriteLock)等,还提供了许多分布式服务。

Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。

Redisson 分布式重入锁用法

Redisson 支持单点模式、主从模式、哨兵模式、集群模式,这里以单点模式为例:


 

加锁代码分析

首先,set()加入了NX参数,可以保证如果已有key存在,则函数不会调用成功,也就是只有一个客户端能持有锁,满足互斥性。其次,由于我们对锁设置了过期时间,即使锁的持有者后续发生崩溃而没有解锁,锁也会因为到了过期时间而自动解锁(即key被删除),不会发生死锁。最后,因为我们将value赋值为requestId,用来标识这把锁是属于哪个请求加的,那么在客户端在解锁的时候就可以进行校验是否是同一个客户端。

解锁代码分析

将Lua代码传到jedis.eval()方法里,并使参数KEYS[1]赋值为lockKey,ARGV[1]赋值为requestId。在执行的时候,首先会获取锁对应的value值,检查是否与requestId相等,如果相等则解锁(删除key)。

存在的风险

如果存储锁对应key的那个节点挂了的话,就可能存在丢失锁的风险,导致出现多个客户端持有锁的情况,这样就不能实现资源的独享了。

  1.  客户端A从master获取到锁
  2.  在master将锁同步到slave之前,master宕掉了(Redis的主从同步通常是异步的)。

  主从切换,slave节点被晋级为master节点

    3.  客户端B取得了同一个资源被客户端A已经获取到的另外一个锁。导致存在同一时刻存不止一个线程获取到锁的情况。

redlock算法出现

这个场景是假设有一个 redis cluster,有 5 个 redis master 实例。然后执行如下步骤获取一把锁:

  1.  获取当前时间戳,单位是毫秒;
  2.  跟上面类似,轮流尝试在每个 master 节点上创建锁,过期时间较短,一般就几十毫秒;
  3.  尝试在大多数节点上建立一个锁,比如 5 个节点就要求是 3 个节点 n / 2 + 1;
  4.  客户端计算建立好锁的时间,如果建立锁的时间小于超时时间,就算建立成功了;
  5.  要是锁建立失败了,那么就依次之前建立过的锁删除;
  6.  只要别人建立了一把分布式锁,你就得不断轮询去尝试获取锁。


(编辑:信阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读