HDFS Editlog写机制(双缓冲+分段锁)

HDFS Editlog写机制(双缓冲+分段锁)

在HA下,客户端的每一条事务都会首先写入缓冲区,然后近可能马上写入磁盘Editlog和journalNode(保证可靠性)。

即HDFS应该尽可能保证客户端写的写操作返回成功时,磁盘和JournalNode中Editlog中有该记录。

如何保证上述要求:

  1. 客户端将记录写入磁盘或网络后才返回成功。
  2. 客户端将记录写入内存后返回,后台线程将内存记录写入磁盘和网络。

在高并发环境下

​ 采用1:多线程对于共享资源(磁盘/网络)的互斥访问,和磁盘/网络本身速度较慢,导致客户端响应较慢。

​ 采用2:可能内存中数据还没有写入磁盘和/网络,但是返回写成功,导致数据不一致。

HDFS采用分阶段锁+双缓冲提高了高并发下的性能。

大体原理:

在这里插入图片描述

  • ​ 因为将记录互斥写入内存,等待时间较短,并且在写磁盘和网络时,不需要持有锁,不影响其他线程的互斥写内存。
  • ​ 在某线程写磁盘和网络时,其他线程只要判断出其对应的事务已经在被写出了,则可以直接返回。
  • ​ 两次获取到的锁是同一把锁,都是加在对象(FSEditLog)上的锁。第一次竞争锁为了互斥写缓冲,第二次竞争锁为了交换缓冲。
  • ​ 通过上述的双缓冲和对线程2阶段加锁,大大提高了性能,并且可以保证返回成功时,该事务已在被写入磁盘和网络;类似于使用一个缓冲区来ack整个缓冲区中的事务,而不是对事务一个接一个ack。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值