CPU静默数据错误:存储系统数据不丢不错的设计思考

一、背景

对于数据存储系统来说,保障数据不丢不错是底线,也是数据存储系统最难的部分。试想,如果您的银行存款记录为 1 万,因为数据存储系统异常导致该记录丢失、或者数据错误导致位翻转从 1 万变为 0,其影响是致命的。根据统计,丢失数据中心10天的企业,93% 会在1年内破产。

业界的 Data integrity 和Data Corruption 术语就是描述此类问题,它们除了阐述数据错误外,还描述了在数据存储、传输等过程中存在的问题。为了保证理解一致,先明确数据不丢和数据不错的定义:

  • 数据不丢,是指相关内容不丢失。例如,100 MB 的文件其部分、全部丢失;或者,文件的元数据有部分、全部丢失,典型如文件创建时间字段丢失。
  • 数据不错,是指内容存在,但是发生了错误。例如,100MB 的文件全部都存在,但其部分、全部数据出错,和原始数据不一样(例如 1 万错误的存储为 0);或者,文件的元数据出现部分或全部出错。对于存储系统来说,数据用 0 或 1 表示,因此数据错误的表现就是位翻转,就是数据从 0 变为 1,或者从 1 变为 0。

同时,Data Consistency(数据一致性)也是相关术语,但它具有更严格的要求,数据丢失或错误会导致数据一致性问题;但是在数据不丢也不错时,也不一定保证数据一致性,因为在业务逻辑设计中并没有满足一致性要求,例如数据库事务ACID的一致性要求,通常是逻辑上的数据正确性。本文重点讨论数据的不丢不错故障原因,以及数据存储系统如何防控设计,不对数据库事务深入讨论。

1 常见的磁盘、内存、网络数据翻转(Bit Flip)

对于计算机系统来说,不管是计算还是存储,不管是电子部件还是机械部件,都是采用 0 和 1 的二进制系统,都存在数据翻转的问题,所以数据不错的关键是防护位翻转。

  • 盘的位翻转。不管是 HDD 还是 SSD,都包含存储介质和数据读取两部分,位翻转可能出现在介质层面,也可能出现在数据读取层面。为了检测介质层面的位翻转,通常会增加额外的空间存放校验位。例如,HDD 在块大小512 字节基础上扩展为520 字节,增加了8字节(Data Integrity Field)内容,该内容中用了 2 字节(Guard) 字段存放基于该块 512 字节内容的 CRC16 值。为了检测数据读取的位翻转检测,在外部线缆接口访问层采用了 CRC 来校验,同时内部的读写部件则采用了 ECC 来检查。为此,盘的S.M.A.R.T.信息还提供了 UltraDMA CRC Error Count、Soft ECC Correction、Hardware ECC Recovered 字段来统计错误数。
  • 内存位翻转。内存作为电子设备,容易受到干扰,例如信号串扰、宇宙射线等,从而出现位翻转,为此引入了 ECC(Error Correction Code)内存。
  • 网络位翻转。网卡作为传输设备,传输过程中因为线缆、接口、内部器件等问题,也可能出现位翻转的情况,所以网络传输中,通常会增加校验位(Checksum)来检查翻转。

以上是典型的数据翻转场景,特别是盘和内存通常是在访问时发现错误;而实际上在未发现时数据其实已经出错,因此业界也叫“静默数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值