Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册

沈岩shenyan.blog.chinaunix.net

写给自己和别人的技术博客 shenyan_001@126.com

  • 博客访问: 1156623
  • 博文数量: 207
  • 博客积分: 464
  • 博客等级: 下士
  • 技术积分: 3671
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 18:25
  • 认证徽章:
个人简介

阿弥陀佛

文章分类

全部博文(207)

文章存档

2017年(6)

2016年(10)

2015年(9)

2014年(75)

2013年(93)

2012年(13)

2011年(1)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
存储系统可靠性分析 2017-07-05 09:27:28

分类: 服务器与存储

1. Leveldb在写数据时,采用先写日志,后写实际的用户数据KV。写日志采用了fdatasync方式写。
writeoption.sync= true保证了数据每次写操作都采用同步的方式,必须写完再返回,这样速度很慢,却确保了系统的整体的可靠性。
虽然确保了系统的可靠性,但极大地损失了性能,无法满足线上的需求。
最后采用writeoption.sync=false的方式保证机器如果不重启,就不会丢配置。
Leveldb写日志方式为:1. 写日志 2. fflush将用户态的数据推入内核态。3. 写内存中的数据。
恢复日志方式:从日志内容中恢复数据(由于写日志时调用fflush推给了内核态,所以即使程序崩溃,仍然可以读取到,而且速度很快),并恢复到memtable中。

所以我们在线上运行过程中如果调用KV写入方法成功了,说明日志内容已经fflush到了内核层,但由于数据是异步刷新到硬盘上,所以如果这个时候重启,那么数据就会丢失,但如果只是程序崩溃,是不会丢数据的。
2.  ext4文件系统。data=journal  重要的数据写入到了日志区,并且在空闲时刻,将数据第二次从日志区读出,并写入到相应位置。这样做会影响系统的效率与性能。
    默认系统只会写metadata到journal区域,但是如果用户开启了data=journal,那么用户的数据也会写入到journal区,保证系统crash consistency。
阅读(3016) | 评论(0) | 转发(1) |
0

上一篇:金刚经的智慧

下一篇:没有了

给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册