四、数据校验与去重
作者:互联网
为何需要数据校验
在上一篇博客中,我们加入了元数据服务作为存储对象的全局唯一标识,并在测试时留下了一个伏笔,查看 hello 文件的版本时可以看到这两个版本的 size 一致,都是 14 。其实是上传了同一个 hello 文件但每次请求的散列值不同,我们在服务节点和数据节点都没有做数据散列值校验,因此不知道这个两次上传的对象其实是相同的。
这样的话很容易被攻击,黑客只需要一直不断上传各种散列值,用户真正获取数据时就只能获取到黑客恶意上传的文件。 就算排除黑客攻击,正常的客户端也有可能因为 bug 出现计算出错的情况,又或者说是在网络传输的时候数据发生损坏,这就导致最终在数据服务节点存储的数据是错误的,客户请求获取数据时只能拿到一个错误的数据。
因此,在数据服务节点保存数据之前,我们还需要做数据校验,只有正确的数据才会被保存。这个时候才能根据散列值对数据进行查重,保证数据服务节点上仅有一份正确的数据,到达节省存储空间提高存储效率的目标。
如何实现数据校验
平时下载文件时,浏览器是先生成一个临时文件,下载完毕后才将临时文件变成完整的文件。我们模仿这个思路去实现数据校验:客户端上传文件时,在数据服务节点新建一个临时文件来保存客户端上传的文件,当客户端上传完毕后,数据服务节点计算这个临时文件的散列值是否与请求的散列值一致,若一致则认为数据是正确的,将这个临时文件转换成正式文件保存,若散列值不一致则将临时文件删除,响应文件传输错误,提示客户端重新上传文件。
标签:数据服务,散列值,数据,校验,临时文件,上传 来源: https://blog.csdn.net/weixin_47560078/article/details/121110047