对象存储服务的完整性检查

使用场景有:

  • 上传对象后,如何确定对象存储收到的数据和客户端本地的数据是否一致。
  • 下载对象后,如何确定本地收到的数据和对象存储保存的数据是否一致。

AWS S3

  • Checking object integrity
    实现完整性校验时,AWS S3提供的算法包括CRC32、CRC32C、SHA-1、SHA-256、MD5。
  • Amazon S3 data consistency model

相关API

  • HeadObject
  • GetObject
  • GetObjectAttributes
  • PutObject

    Content-MD5, The base64-encoded 128-bit MD5 digest of the message (without the headers) according to RFC 1864.

  • CopyObject
  • CreateMultipartUpload
  • UploadPart
  • UploadPartCopy

应用场景

依据文档Checking object integrity,基于MD5算法,介绍完整性实现方案。

上传对象时的服务端校验方案

  • 客户端计算对象的数据的MD5值,x1
  • 客户端使用PutObject上传对象时,在请求的头部中增加Content-MD5,取值为x1
  • 服务端接收对象的数据,同步计算数据的MD5值。
  • 服务端接收对象结束,最终得到数据的MD5值,x2
  • 服务端对比x1x2
    • 如果两者相同,则判定本次上传过程中数据一致,上传成功。
    • 如果两者不相同,则判定本次上传过程中数据不一致,上传失败。
  • 服务端在PutObject的响应消息中,使用ETag字段在头部中返回MD5值,填充x2

上传对象时的客户端校验方案

  • 客户端使用PutObject上传对象。
    • 客户端在上传过程中,同步计算数据的MD5值。
  • 服务端接收对象的数据,同步计算数据的MD5值。
  • 服务端接收对象结束,最终得到数据的MD5值,x2
    • 客户端完成数据的MD5值的计算,x1
  • 服务端在PutObject的响应消息中,使用ETag字段在头部中返回MD5值。
  • 客户端对比x1和响应中的ETag字段的值。
    • 如果两者相同,则判定本次上传过程中数据一致,上传成功。
    • 如果两者不相同,则判定本次上传过程中数据不一致,上传失败。

客户端下载对象时的校验方案

  • 客户端使用GetObject完整读取对象的数据。
    • 从头部中提取ETag,作为x1
  • 客户端从HTTP流中读取数据,同步计算MD5值。
  • 客户端下载对象完毕,最终得到数据的MD5值,x2
  • 客户端对比x1x2
    • 如果两者相同,则判定本次下载过程中数据一致,下载成功。
    • 如果两者不相同,则判定本次下载过程中数据不一致,下载失败。

实现方案

依据文档Working with object metadata的如下描述:

An entity tag (ETag) that represents a specific version of an object. For objects that are not uploaded as a multipart upload and are either unencrypted or encrypted by server-side encryption with Amazon S3 managed keys (SSE-S3), the ETag is an MD5 digest of the data.

对象的ETag值是对象的元数据。

基于文件系统来实现对象存储服务,对于相同的对象,同时提供文件和对象的访问能力,就ETag的实现方案,有如下场景:

  • 使用文件的API创建、修改的文件,使用对象的API访问。
  • 使用对象的API创建的对象。
  • 使用对象的API创建的对象,使用文件的API修改过,比如修改写、截断、追加写等。
  • 使用对象的多段API上传的对象。

ETag的实现策略,如下:

  • 使用文件的API创建、修改过的文件,ETag的取值为全0。
  • 使用对象的API创建的对象,上传时没有填充Content-MD5,则可选策略如下:
    • 服务端不使用对象的数据计算MD5值,ETag的取值为全0。
    • 服务端使用对象的数据计算MD5值,ETag按照实际填填充。
  • 使用对象的API创建的对象,上传时填充了Content-MD5,则可选策略如下:
    • 服务端不使用对象的数据计算MD5值,以Content-MD5的值作为ETag,返回给客户端,不执行服务端校验。
    • 服务端使用对象的数据计算MD5值,作为ETag,返回给客户端,不执行服务端校验。
    • 服务端使用对象的数据计算MD5值,作为ETag,返回给客户端,执行服务端校验。
  • 使用对象的API创建的对象,使用文件的API修改过,比如修改写、截断、追加写等,对象的ETag的取值为全0。
  • 使用对象的多段API上传的对象,则可选策略如下:
    • 合并多段接口的响应中,对象的ETag的取值为全0。
    • 参照Checking object integrity的方案,计算对象的ETag的取值。
  • 使用对象的HeadObject和GetObject访问对象的元数据时,更新对象的ETag值。
  • 后台增加周期性任务,比如可基于快照,定时扫描ETag值不正确的对象,重新计算对象的ETag值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/41686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Spring Boot中使用Quartz调度任务

如何在Spring Boot中使用Quartz调度任务 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨如何在Spring Boot应用程序中集成和使用Quartz调度任…

C++怎么解决不支持字符串枚举?

首先,有两种方法:使用命名空间和字符串常量与使用 enum class 和辅助函数。 表格直观展示 特性使用命名空间和字符串常量使用 enum class 和辅助函数类型安全性低 - 编译器无法检查字符串有效性,运行时发现错误高 - 编译期类型检查&#xf…

2024 年 6 月区块链游戏研报:Pixels 引发 DAU 波动,行业用户留存率差异显著

作者:Stella L (stellafootprint.network) 数据来源:区块链游戏研究页面 2024 年 6 月,加密货币市场遭遇显著回调,比特币跌幅达 7.3%,以太坊更是下跌了 9.8%。此番波动不可避免地波及区块链游戏领域,导致…

Hudi 写入流程(图)

前言 主要为之前总结的源码文章补充流程图。总结一下整体流程说明 之前以Java Client为例,总结了 Insert 源码的整体流程及部分源码,由于各种原因,没有总结完。长时间不看这方面的源码,容易忘记,之前没有总结流程图,现在回忆起来比较麻烦,不如看流程图方便快捷。所以先补…

2024亚太杯中文赛B题洪水灾害的数据分析与预测原创论文分享

大家好,从昨天肝到现在,终于完成了2024年第十四届 APMCM 亚太地区大学生数学建模竞赛B题洪水灾害的数据分析与预测的完整论文啦。 实在精力有限,具体的讲解大家可以去讲解视频: 2024亚太杯中文赛B题洪水灾害预测原创论文保姆级教…

2024/7/6 英语每日一段

More than half of late-teens are specifically calling for more youth work that offers “fun”, with older teenagers particularly hankering for more jollity, according to a study carried out by the National Youth Agency. One in 10 said they have zero option…

量化机器人:金融市场的智能助手

引言 想象一下,在繁忙的金融市场中,有一位不知疲倦、冷静客观的“超级交易员”,它能够迅速分析海量数据,精准捕捉交易机会,并自动完成买卖操作。这位“超级交易员”不是人类,而是我们今天要聊的主角——量…

数据库——锁

title: 数据库——锁 date: 2024-07-06 12:25:15 tags: 数据库 categories: 数据库 cover: /image/T2.jpg description: 数据库里对锁的应用,锁的一些相关知识 锁 在数据库管理和并发编程中,锁(Locks)是一种重要的同步机制&…

Vue 3 中集成 ECharts(附一些案例)

Vue 3 中集成 ECharts 的完全指南 引言 在现代Web开发中,Vue 3以其卓越的性能和灵活的Composition API赢得了广泛的关注。而ECharts,作为开源的一个使用JavaScript实现的强大可视化库,以其丰富的图表类型和高度可定制性成为了数据可视化的首…

计算机的错误计算(二十二)

摘要 计算机的错误计算(十九)展示了计算机的一个错误计算:本应该为 0的算式的结果不为0. 那么,增加计算精度,能确定是0吗?不一定。 计算机的错误计算(十九)展示了计算机对 的错误计…

适用于 Windows的 5 个最佳 PDF 转 Word 转换器

PDF 文件是共享文档的首选格式,但是,此类文件存在限制,使其难以修改或编辑。因此,您可能会发现自己正在寻找一种将 PDF 文件转换为 Word 或其他可编辑格式的方法。 有许多不同的 PDF 转换器,每个转换器的功能略有不同…

vue require引入静态文件报错

如果是通过向后端发送请求,动态的获取对应的文件数据流很容易做到文件的显示和加载。现在研究,一些不存放在后端而直接存放在vue前端项目中的静态媒体文件如何加载。 通常情况下,vue项目的图片jpg,png等都可以直接在/ass…

Perl 语言入门学习及实践

一、Perl 语言简介 Perl,全称为“Practical Extraction and Reporting Language”,是一种功能强大的脚本语言,广泛应用于文本处理、系统管理、网络编程和Web开发等领域。其丰富的库支持和正则表达式能力,使得Perl成为数据挖掘、日…

hmmer数据库合并

下载的数据库,解压之后是一个很多hmm文件的文件夹,不便于注释 https://fileshare.csb.univie.ac.at/vog/vog224/vfam.hmm.tar.gz cat *.hmm > vog224.hmm hmmpress vog224.hmm比对 hmmscan --tblout test_VOG.tbl --domtblout test_VOG.dom --noal…

招聘一个1-3年经验的Java工程师:企业视角的技能与素质要求

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

数据库——redis常见面试题

title: 数据库——redis常见面试题 date: 2024-07-06 12:26:01 tags: 数据库 categories: 数据库 cover: /image/T2.jpg description: Redis数据库常见面试题 redis Redis是一个高性能的、基于内存的Key-Value数据库,支持多种数据结构,如字符串、哈希、…

Git错误分析

错误案例1: 原因:TortoiseGit多次安装导致,会记录首次安装路径,若安装路径改变,需要配置最后安装的路径。

Windows搭建本地对象存储服务MinIO并且使用springboot整合

开发文档: MinIO Windows中文文档 MinIO Object Storage for Windows (英文文档) 1、准备工作 准备一个空的文件夹,用来存放minio相关的内容; 这里是在D盘创建一个minio的文件夹; 后续所有跟MinIO相关…

matlab 超越椭圆函数图像绘制

matlab 超越椭圆函数图像绘制 超越椭圆函数图像绘制xy交叉项引入斜线负向斜线成分正向斜线成分 x^2 y^2 xy 1 (负向)绘制结果 x^2 y^2 - xy 1 (正向)绘制结果 超越椭圆函数图像绘制 xy交叉项引入斜线 相对于标准圆&#xf…

ESP32-Wifi问题解答

目录 前言 环境:arduino 芯片:ESP32 一、先上例程 1.大家打开官方例程 点击:示例->Wifi->WifiClient 2:Wifi配置 打开例程如图: 在1处设置WiFi名称 在2处设置WiFi密码 注意:双引号要留着 3:编译,烧录->问题发生了! 二、问题解决方法 1.…