当前位置:   article > 正文

【HDFS】 双Buffer数据结构:EditsDoubleBuffer

【HDFS】 双Buffer数据结构:EditsDoubleBuffer

缓冲(Buffer)机制是对数据持久化的延迟,以减少不必要的IO,从而提高数据落盘的效率。
一般需要使用双缓冲区的地方都是由于“生产者”和“消费者”供需不一致所造成的。
两个缓冲区可以交换,互相变成对方的角色。

HDFS引入双Buffer的背景及带来的收益

每次客户端的RPC请求NameNode修改一条元数据,都要写edits log。
为了保证元数据的可靠性,防止在断电的时候元数据错乱。HDFS会把edits log持久化到后端存储设备后才给客户端返回RPC响应。

另外HDFS NameNode的设计目标是能够高并发地处理来自客户端RPC请求。因此一定会有多线程同时操作共享资源,那这里就会涉及到线程安全问题。

NameNode在写edits log时,需要保证每条edits log都有一个全局顺序递增的transaction Id(简称为txid),这样才可以识别每一条edits log的先后顺序。要保证每条edits log的txid都是递增的,就必须得加锁。

多个线程修改了元数据,要写描述自己操作的edits log的时候,都必须排队获取锁后,生成一个递增的txid,代表这次要写的edits log的序号。

试想一下,如果每次都在一个加锁的代码块里做下面的操作,那性能会有多糟糕:

synchronized(xxx) {
   
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/568211
推荐阅读
相关标签
  

闽ICP备14008679号