开发者学堂课程【分布式文件存储系统技术及实现:分布式系统功能设计-Checksum 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/368/detail/4380
分布式系统功能设计-Checksum
一、跟数据相关的 Checksum 功能
1. 跟数据相关的 Checksum 功能:Checksum 必须做到前链路。
(1) 首先对每一段数据都过到三元组。
(2) 数据会放到 buffer 里面,然后记录它的长度,记在 length 字段里面。前两个字段会计算 CRC 值,在网络传输的过程中,由于 buffer 比较大,所以要进行切分。
(3) 在切分这个过程中,一般就会进行网络分包,分成一小块一小块的数据包。对每个包都会做三元组,一个三元组会变成多个三元组,在这个过程中有一个关键的点就是在分包结束之后要验证原来没分的大包数据是否出错了,这样才能保证后边做出来的数据是在正确的数据下做出来的。
(4) 在存储和网络传输之前,如果有切分包的这个过程,都要有这样的机制保障。在数据到达存储节点之后,如果数据有拼接过程也需要遵循这个过程。而且当时计算完的 CRC 值也要同数据一起存储到磁盘上,这样在后面读取数据的时候才能验证数据在磁盘上是否发生变化,是否变成了错误的数据。
(5) 如果用户在后边不再进行读取、操作数据,那也要保证数据没有变坏。在数据内部,其中的后台有扫描过程,会定期对数字进行校验,将数据读出来然后同写入时候的 CRC 值进行校验,看数据是不是变错了,这样保证了数据的安全性。
2. 在 Checksum 的存储过程中,还有一些关键的技术点,例如:
是不是将数据和 CRC 值存储到同一个文件夹里面。还有一种方法是存储到不同的文件夹里面,这两种方法各有利弊;
(1) 如果存储到同一个文件夹里面:可以有效防止在读取的过程中进行两次访盘,比如数据要读一次,CRC 值又要读一次。但是也有一个弊端,在磁盘上的错误类型是指错的话,因为数据和 CRC 值在一起,自己验证数据没问题,实际上文件已经不是以前的文件了。
(2) 如果数据和 CRC 值存储到两个文件夹里面,就不会产生这个错误,但会引起两次访盘带来的问题。