网易视频云:hbase–并发控制机制解析

网易视频云:hbase–并发控制机制解析

ID:35451065

大小:87.27 KB

页数:6页

时间:2019-03-24

网易视频云:hbase–并发控制机制解析_第1页
网易视频云:hbase–并发控制机制解析_第2页
网易视频云:hbase–并发控制机制解析_第3页
网易视频云:hbase–并发控制机制解析_第4页
网易视频云:hbase–并发控制机制解析_第5页
资源描述:

《网易视频云:hbase–并发控制机制解析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、网易视频云:HBase-并发控制机制解析网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,为客户提供稳定流畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的PaaS服务。在线教冇、远程医疗、娱乐秀场、在线金融等各行业及企业用户貝需经过简单的开发即可打造在线音视频平台。现在,网易视频云与大家分享一下HBase-并发控制机制解析.作为一款优秀的非内存数据弃,HBase和传统数据庫一样提供了爭务的概念,只是HBase的事务是行级事务,可以保证行级数据的原子性、一致性、隔离性以及持久性,即通常所说的ACID特性。为了实现事务特性,HBase采用了各种并发

2、控制策略,包括各种锁机制、MVCC机制等。本文首先介绍HBase的两种基于锁实现的同步机制,再分別详细介绍行锁的实现以及各种读写锁的应用场景,最后重点介绍MVCC机制的实现策略。HBase同步机制HBase提供了两种同步机制,一种是基于CountDownLatch实现的互斥锁,常见的使用场景是行数据更新时所持的行锁。另一种是基于ReentrantReadWriteLock实现的读写锁,该锁可以给临界资源加上read-lock或者write-lock。其小read-lock允许并发的读取操作,血write-lock是完全的互斥操作。CountDownLatchJava中,CountDown

3、Latch是一个同步辅助类,在完成一组其他线程执彳了的操作Z前,它允许一个或多个线程阻塞等待oCountDownLatch使用给定的计数初始化,核心的两个方法是countDown()>fllawait(),前者可以实现给定计数倒数一次,后者是等待计数倒数到0,如果没冇到达0,就一•直阻塞等待。结合线程安全的map容器,基于test-and-set机制,CountDownLatch可以实现基本的互斥锁,原理如下:1.初始化:CountDownLatch初始化计数为12.testitS:线程首先将临界资源作为key,latch作为value尝试插入线程安全的map中。如果返回失败,表示其他线

4、程已经持有了该锁,调用await方袪阻塞到该latch±,等待其他线程释放锁;3.seta程:如果返回成功,就表示已经持冇该锁,其他线程必然插入失败。持冇该锁之后执行各种操作,执行完成Z后释放锁,释放锁首先将map中对应的KeyValue移除,再调用latch的countDown方法,该方法会将计数减1,变为0之后就会唤醍其他阻塞线程。ReentrantReadWriteLock读写锁分为读锁、写锁,和互斥锁相比可以提供更高的并行性。读锁允许多个线程同时以读模式占有锁资源,而写锁只能由一个线程以写模式占冇。如果读写锁是写加锁状态,在锁释放z前,所冇试图对该锁占有的线程都会被阻塞;如果是读

5、加锁状态,所有英他对该锁的渎请求都会并行执行,但是写请求会被阻塞。显而易见,读写锁适合丁•读多写少的场景,也因为读锁可以共享,写锁只能某个线程独占,读写锁也被称为共享一独占锁,即经常见到的S锁和X锁。Java中,ReentrantReadWriteLock是读吗锁的实现类,该类中冇两个方法readLock()和writeLock()分別用來获取读锁和写锁。HBase中行锁的具体实现HBase采用行锁实现更新的原子性,要么全部更新成功,要么失败。所冇对HBase行级数据的更新操作,都需要首先获取该行的行锁,并口在更新完成Z后释放,等待其他线程获取。因此,HBase中对同一行数据的更新操作都

6、是串行操作。行锁相关数据结构RowLockContextRowLockbooleanreleaseRowLockContextcontextHashedBytesrowCountDownLatchlatchThreadthread如上图所示,HBase中行锁相关的主要结构冇RowLock和RowLockContext两个类,其屮RowLockContext类存储行锁相关上下文信息,包括持锁线程、被锁对彖以及可以实现互斥锁的CountDownLatch对彖等等,RowLockContext是RowLock的一个属性,除此Z外,RowLock还包含表征行锁是否已经释放的release字段。具

7、体字段如下图所示:RowLock核心字段字段字段类型说明releaseboolean行锁是否释放contextRowLockContext行锁对应上下文RowLockContext核心字段字段字段类型说明rowHashBvtesJ行锁对应的行键值lacthCountDownLatch初始化为1的CountDownLatchthreadTread持有行锁的线程更新加锁流程1.首先使用rowkey以及自身线程对象生成彳了锁上下文RowL

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。