文章目录

  • 前言
  • 高效WAL的实现方式
  • 高效WAL实现过程图

前言


在分布式存储系统的服务一致性实现中,WAL是其中经常被使用到的一个关键的数据文件。它可以有效地记录每一次的系统变更记录,而且还能够确保系统的异常退出恢复。不过本文笔者并不打算阐述WAL的与Master/Follower节点之间的合作原理,而是打算专门来聊聊WAL的写出方式。在通常的实现中,系统写WAL时为了避免每次的操作都执行一次写磁盘的操作,一般会采用增加缓冲区的方式。等缓冲区慢了,再执行一次flush磁盘的操作。笔者本文将要阐述一种更为高效的WAL写出方式。

高效WAL的实现方式

在Apache Ratis项目中,实现了一种更为高效的WAL机制,下面笔者结合其内部实现进行阐述。在保留写操作时缓冲区的设置外,主要在以下几点上做了优化设计:

  • 写WAL时进行了异步处理,而不是同步式的方式。异步式的方式可以缩短调用方的响应延时,有效提高WAL的throughput。在Apache Ratis的内部实现中,基于的原理是新增一个worker线程,一个FIFO的runnable执行队列,调用方在执行例如append log记录时,则会往这个队列里增加一个task任务。随后worker线程将会从队列拿到最新的task然后执行。在WAL文件的写入过程中,一个log文件的状态变化如下所示:

    Open(InProgress file) —(finalize operation)— > Close —> start new Open file

  • Log Cache的引入。Log Cache的作用是为了加速客户端对于WAL日志结果的查询操作。这里的Cache不仅仅只存储部分少数的Log记录,而还有有可能是整个Log file的记录数。这样可以有效避免频繁地进行WAL Log file的文件读取操作了。因此这里的Cache需要有自己的eviction policy来进行旧的或无人访问记录的清除。

高效WAL实现过程图


以下是高效WAL实现过程图:

上述图中apply log到StateMachine的步骤可以理解为是系统进行了实际的请求操作处理,进行了状态的更新,例如元数据更新了等等。

一种更为高效的WAL的实现方式相关推荐

  1. matlab变压器紧耦合,一种紧耦合高效llc谐振变压器的制造方法

    一种紧耦合高效llc谐振变压器的制造方法 [专利摘要]本发明公开了一种紧耦合高效LLC谐振变压器,包括磁芯不带气隙的环形主变压器,主变压器的初级线圈一端与输入辅助电感连接:主变压器的第二次级线圈两端分 ...

  2. 012-Java有几种文件拷贝方式?哪一种最高效?

    我在专栏上一讲提到,NIO 不止是多路复用,NIO 2 也不只是异步 IO,今天我们来看看 Java IO 体系中,其他不可忽略的部分. 今天我要问你的问题是,Java 有几种文件拷贝方式?哪一种最高 ...

  3. 一种相对高效的按键消抖方法

    按键软件消抖自我接触单片机开始就已经存在这个问题了,网上的办法无非是延时消抖和定时轮询.对于写裸机的我来说这两种方法都不可避免的会有资源浪费掉,今天突然有了灵感,想到了一种相对高效的办法来解决消抖问题 ...

  4. Java有几种文件拷贝方式?哪一种最高效?

    第12讲 | Java有几种文件拷贝方式?哪一种最高效? 我在专栏上一讲提到,NIO 不止是多路复用,NIO 2 也不只是异步 IO,今天我们来看看 Java IO 体系中,其他不可忽略的部分. 今天 ...

  5. 转52破解jiangwei212Android爆破应用签名的一种全新高效方式(Native+服务器验证)

    原文地址:Android爆破应用签名的一种全新高效方式(Native+服务器验证) http://www.52pojie.cn/thread-606272-1-1.html (出处: 吾爱破解论坛) ...

  6. 初中英语多词性单词怎么办_初中英语,两种轻松高效的记单词方法

    记忆英语单词有窍门?有!今天给大家总结,如何利用初中阶段所涉及到的词根和词缀记单词,以及例句记单词.学会了用好了,高中也受益. 一.词根词缀记忆. 其实英语单词和汉字一样,存在着很多的"偏旁 ...

  7. 高效的序列化/反序列化数据方式 Protobuf

    高效的序列化/反序列化数据方式 Protobuf github地址 目录 protocolBuffers 序列化 Int32 String Map slice 序列化小结 protocolBuffer ...

  8. Android高效的EPG界面实现方式

                                               Android高效的EPG界面实现方式        你现在没有在为怎么去实现EPG界面而烦恼呢?仔细研究下我这篇 ...

  9. 物联网设备是如何被破解的?分析一种篡改IoT固件内容的攻击方式

    随着智能硬件进入到人们的生活,人们的生活质量开始有逐步的提高,人们与智能硬件之间的联系更加紧密.同时,智能硬件的安全问题也必须引起高度重视,因为其直接影响到人身安全.社会安全和国家安全. 大家是否有想 ...

最新文章

  1. php java session共享_php 函数session_id()思考。实现同服务器下session共享
  2. 理解LSTM/RNN中的Attention机制
  3. 跨平台视频通信项目-OpenTok
  4. 详解java中Thread类,线程和进程的基本区别,多线程的好处,线程的五个生命周期,主线程和IDEA创建的Monitor Ctrl-Break守护线程;优雅地终止线程。死锁的产生
  5. CodeForces - 1425D Danger of Mad Snakes(容斥+组合数学)
  6. 360的服务器在哪个文件夹,如何卸载服务器上顽固的360
  7. 漫步数理统计十八——相关系数
  8. 中key的用途_Python中的函数定义与参数使用
  9. 【数据结构与算法】完结
  10. 现在有些公众号我真的看不惯
  11. Cesium笔记(3):基本控件简介—ImageryProvider地图瓦片地图配
  12. ai里怎么做阴影效果_使用ai制作出文字阴影效果的详细方法
  13. Arduino基础项目十三:通过开关控制风扇
  14. 【NVIDIA】ubuntu桌面版安装nvidia显卡驱动程序
  15. Lotus Notes 7.0找不到服务器路径
  16. win7系统技巧:设置共享打印机
  17. Fiddler 网页抓包
  18. Linux中查看各文件夹大小命令du -h --max-depth=1
  19. 关于zookeeper启动失败,个人解决经验
  20. window.prompt的确定和取消事件

热门文章

  1. 聚簇索引与非聚簇索引详解
  2. 小程序如何进行页面之前的传值
  3. 开源简史基础:CNCF的诞生
  4. 电脑重装oracle提示,电脑重装系统后怎样恢复ORACLE?
  5. Problem A: 实验四:计算重量
  6. 华尔街留下的指标之王(附代码展示)
  7. python覆盖数据库重复数据_Python操作MySQL数据库,插入重复数据
  8. 运行时异常和非运行时异常
  9. 2021年中国早教行业融资现状及行业发展趋势分析[图]
  10. Spring源码分析之getBean主流程分析