分布式锁用于hbase存储系统
实际开发场景中,我们会对hbase操作进行分布式锁,hbase作为一款优秀的非内存数据库,传统数据库一样提供了事务的概念,只是HBase的事务是行级事务,可以保证行级数据的原子性、一致性、隔离性以及持久性,即通常所说的ACID特性 。为了实现事务特性,HBase采用了各种并发控制策略,包括各种锁机制、MVCC机制等 。因为hbase只支持行级事物,当业务需要并发操作两行甚至多行记录时,hbase本身就无法提供ACID的支持了 。
数据库访问量过大除了主从还能如何负载压力?
【一句话说清分布式锁,进程锁,线程锁】数据库会为客户端的每一个请求创建一个线程,这些线程针对特定行数据修改必须获得该行的行锁,而其他客户端线程要想修改该数据的话,必须等待前面的线程释放锁后才被允许 。如果客户端很多线程都要修改某行数据的话,没有拿到锁的线程都会在数据库端机器上不断轮询,增大数据库端的压力 。
我们可以使用分布式锁,把对数据库行锁的等待获取的轮询放到每一个客户端机器上去实现,这样可以避免数据库端线程的不断轮询 。比如,客户端在要发送对数据库的某行数据的操作请求前,在客户端机器上进行锁的争抢,没有获取到锁,就不会像数据库端发送操作请求,这样数据库端就没有了轮询的压力 。当然分布式锁的引入一定要结合业务的需求来进行设计,不然会出现锁id的命名不全导致读取的数据不一致,数据过期失效等问题 。
使用那种第三方介质存放分布式锁?
目前流行的是zookeeper和redis,两者各有好处,redis流行的内存缓存,且能进行水平扩容同时还能提高请求负载,面对高并分布式锁数据的读写请求能高速响应,同时有aof,哨兵机制可以防止某台宕机分布式锁数据丢失带来的问题 。
zookeeper我是比较喜欢,因为他是分布式一致性算法paxos算法的实现,面对高负载请求毫无压力,同时某一台宕机毫不影响分布式锁数据一致性,且附带了监听机制,当某一程序释放某一个锁后,其他程序可以及时得到通知来获得对该分布式锁的控制权,这里的轮询实现不需要我们去开发了 。
关于分布式锁与线程锁的介绍从一年前就在编辑中,一直没有时间以一种通俗明了的方式介绍给大家 。本人在很多论坛中发现很多刚入大数据领域的新人都会提到分布式锁,但是并没有深刻明白分布式锁和线程锁的场景,以至于很多情况下明明线程锁就可以搞定的却引入了分布式锁,让整个系统设计的更加复杂了 。
推荐阅读
- 生男生女2022年的清宫表 2022年生男生女清宫图表最准确版
- 春季养肝护肝喝什么茶最好 春季养肝护肝喝什么茶
- 清炖鸡怎么做好吃 清炖鸡怎么做
- 茶垢含多种致癌物 应及时清洗
- 烧黑了的不锈钢锅怎么样清洗 不锈钢锅烧黑瞬间干净
- 购房要付的“四金”你弄清楚了吗?
- |晚清 和田玉 麒麟送子把件
- 九阳料理机价格清单
- 塑钢门窗价格清单
- 疫情期间手套清洗前先用什么浸泡 手套清洗前先用什么浸泡
