一种更为高效的WAL的实现方式
文章目录
- 前言
- 高效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的实现方式相关推荐
- matlab变压器紧耦合,一种紧耦合高效llc谐振变压器的制造方法
一种紧耦合高效llc谐振变压器的制造方法 [专利摘要]本发明公开了一种紧耦合高效LLC谐振变压器,包括磁芯不带气隙的环形主变压器,主变压器的初级线圈一端与输入辅助电感连接:主变压器的第二次级线圈两端分 ...
- 012-Java有几种文件拷贝方式?哪一种最高效?
我在专栏上一讲提到,NIO 不止是多路复用,NIO 2 也不只是异步 IO,今天我们来看看 Java IO 体系中,其他不可忽略的部分. 今天我要问你的问题是,Java 有几种文件拷贝方式?哪一种最高 ...
- 一种相对高效的按键消抖方法
按键软件消抖自我接触单片机开始就已经存在这个问题了,网上的办法无非是延时消抖和定时轮询.对于写裸机的我来说这两种方法都不可避免的会有资源浪费掉,今天突然有了灵感,想到了一种相对高效的办法来解决消抖问题 ...
- Java有几种文件拷贝方式?哪一种最高效?
第12讲 | Java有几种文件拷贝方式?哪一种最高效? 我在专栏上一讲提到,NIO 不止是多路复用,NIO 2 也不只是异步 IO,今天我们来看看 Java IO 体系中,其他不可忽略的部分. 今天 ...
- 转52破解jiangwei212Android爆破应用签名的一种全新高效方式(Native+服务器验证)
原文地址:Android爆破应用签名的一种全新高效方式(Native+服务器验证) http://www.52pojie.cn/thread-606272-1-1.html (出处: 吾爱破解论坛) ...
- 初中英语多词性单词怎么办_初中英语,两种轻松高效的记单词方法
记忆英语单词有窍门?有!今天给大家总结,如何利用初中阶段所涉及到的词根和词缀记单词,以及例句记单词.学会了用好了,高中也受益. 一.词根词缀记忆. 其实英语单词和汉字一样,存在着很多的"偏旁 ...
- 高效的序列化/反序列化数据方式 Protobuf
高效的序列化/反序列化数据方式 Protobuf github地址 目录 protocolBuffers 序列化 Int32 String Map slice 序列化小结 protocolBuffer ...
- Android高效的EPG界面实现方式
Android高效的EPG界面实现方式 你现在没有在为怎么去实现EPG界面而烦恼呢?仔细研究下我这篇 ...
- 物联网设备是如何被破解的?分析一种篡改IoT固件内容的攻击方式
随着智能硬件进入到人们的生活,人们的生活质量开始有逐步的提高,人们与智能硬件之间的联系更加紧密.同时,智能硬件的安全问题也必须引起高度重视,因为其直接影响到人身安全.社会安全和国家安全. 大家是否有想 ...
最新文章
- php java session共享_php 函数session_id()思考。实现同服务器下session共享
- 理解LSTM/RNN中的Attention机制
- 跨平台视频通信项目-OpenTok
- 详解java中Thread类,线程和进程的基本区别,多线程的好处,线程的五个生命周期,主线程和IDEA创建的Monitor Ctrl-Break守护线程;优雅地终止线程。死锁的产生
- CodeForces - 1425D Danger of Mad Snakes(容斥+组合数学)
- 360的服务器在哪个文件夹,如何卸载服务器上顽固的360
- 漫步数理统计十八——相关系数
- 中key的用途_Python中的函数定义与参数使用
- 【数据结构与算法】完结
- 现在有些公众号我真的看不惯
- Cesium笔记(3):基本控件简介—ImageryProvider地图瓦片地图配
- ai里怎么做阴影效果_使用ai制作出文字阴影效果的详细方法
- Arduino基础项目十三:通过开关控制风扇
- 【NVIDIA】ubuntu桌面版安装nvidia显卡驱动程序
- Lotus Notes 7.0找不到服务器路径
- win7系统技巧:设置共享打印机
- Fiddler 网页抓包
- Linux中查看各文件夹大小命令du -h --max-depth=1
- 关于zookeeper启动失败,个人解决经验
- window.prompt的确定和取消事件