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

使用场景有:

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

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.mfbz.cn/a/777224.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WAIC 2024:科技界的摇滚狂欢,你错过了什么?

大数据产业创新服务媒体 ——聚焦数据 改变商业 2024年7月5日,WAIC 2024举办的第二天。数据猿作为受邀媒体,在今天继续亲历这一场关于未来的盛会。在这片汇聚了全球顶尖科技力量的舞台上,见证了人工智能领域的最新成果,感受到了科…

Midjourney对图片细微调整和下载保存

点击v2是对第二图片细微调整。 点击u3对第3张图片进行放大。 保存图片: 对点击u3放大的图片,双击 , 右键保存图片

hdu物联网硬件实验3 按键和中断

学院 班级 学号 姓名 日期 成绩 实验题目 按键和中断 实验目的 实现闪灯功能转换 硬件原理 无 关键代码及注释 /* Button Turns on and off a light emitting diode(LED) connected to digital pin 13, when pressing a pushbutton attached…

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

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

Spring的核心基础:感受一下对象工厂

“欢迎来到Spring!”的小项目 (1)写一个HelloSpring的类,采用setter方法注入userName,写一个简单的show方法。 package com.itzhoutao; public class HelloSpring{private String userName;public void setUserName…

Spring源码十一:事件驱动

上一篇Spring源码十:BeanPostProcess中,我们介绍了BeanPostProcessor是Spring框架提供的一个强大工具,它允许我们开发者在Bean的生命周期中的特定点进行自定义操作。通过实现BeanPostProcessor接口,开发者可以插入自己的逻辑&…

核心实验:基于Web前端的性能测试分析!

实验简介 本实验主要利用IE和Chrome的F12开发人员工具结合Web前端测试分析相关知识,对常见网站进行基于前端的性能测试分析,本实验将不会使用到测试开发相关技术,而是纯粹意义上的手工测试,但却是很容易找到系统前端性能及设计问…

AI行业的非零和博弈:解读Mustafa Suleyman的观点

引言 在人工智能(AI)领域,微软AI公司的CEO Mustafa Suleyman最近在阿斯彭思想节上的访谈引起了广泛关注。与CNBC记者Andrew Ross Sorkin的对话中,Suleyman不仅分享了他对OpenAI人事变动的看法,还深入探讨了AI行业的现…

2024年亚太中文赛数学建模竞赛B题 洪水灾害的数据分析与预测详细思路解析

2024年亚太中文赛数学建模竞赛B题 洪水灾害的数据分析与预测详细思路解析 解题方法: 首先就是对数据进行数据的预处理包括缺失值和异常值处理,之后就是分析哪些指标与洪水的发生有着密切的关联,可以使用相关性分析(建议使用斯皮尔…

InetAddress.getLocalHost().getHostAddress()阻塞导致整个微服务崩溃

InetAddress.getLocalHost().getHostAddress()阻塞导致整个微服务崩溃 import java.net.InetAddress;public class GetHostIp {public static void main(String[] args) {try {long start System.currentTimeMillis();String ipAddress InetAddress.getLocalHost().getHostA…

Python和MATLAB微机电健康推导算法和系统模拟优化设计

🎯要点 🎯惯性测量身体活动特征推导健康状态算法 | 🎯卷积网络算法学习惯性测量数据估计六自由度姿态 | 🎯全球导航卫星系统模拟,及惯性测量动态测斜仪算法、动态倾斜算法、融合算法 | 🎯微机电系统加速度…

Docker搭建MySQL双主复制详细教程

在此之前需要提前安装好Docker和 Docker Compose 。 一、创建目录 首先创建一个本地数据挂载目录。 mkdir -p master1-data master2-data二、编写docker-compose.yml version: 3.7services:mysql-master1:image: mysql:5.7.36container_name: mysql-master1environment:MYSQL_…

解决分布式环境下session共享问题

在分布式环境下,session会存在两个问题 第一个问题:不同域名下,浏览器存储的jsessionid是没有存储的。比如登录时认证服务auth.gulimall.com存储了session,但是搜索服务search.gulimall.com是没有这个session的; 第二个问题&…

分库分表真的适合你的系统吗?

曾几何时,“并发高就分库,数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官喜欢问,博主喜欢写,候选人也喜欢背,似乎已经形成了一个闭环。 但你有没有思考过,分库分表真的适合你的系统吗&am…

如何选择视频号矩阵系统源码:关键要素与决策指南

在短视频和直播内容迅速崛起的今天,视频号矩阵系统源码成为了企业和个人创作者高效管理视频内容的重要工具。选择合适的视频号矩阵系统源码,可以极大提升内容发布的效率和质量,同时优化用户体验。本文将提供一套选择视频号矩阵系统源码的指南…

最新全平台无人直播硬改XCMS系统,支持任何平台

软件功能: 改虚拟摄像头为真实摄像头,改真实麦克风,图层去重、镜头晃动、增加噪点去重、随机播放辅音,两条音轨帮助音频去重、随机音效、随机播放速度,直播源实时转播等等.防违规,防非实时 设备需求: 电脑&#xf…

Java项目:基于SSM框架实现的智慧城市实验室管理系统分前后台【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的智慧城市实验室管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单…

OFDM技术概述8——FBMC

Filter bank multicarrier(FBMC,滤波器组多载波),是一种类似于OFDM的调制方式,用滤波器抑制子载波的旁瓣大小,使用FFT/IFFT或多相滤波器实现,其应用于5G的主要优势: 子载波信号带限,带外泄漏小…

【IT领域新生必看】 Java编程中的重写(Overriding)规则:初学者轻松掌握的全方位指南

文章目录 引言什么是方法重写(Overriding)?方法重写的基本示例 方法重写的规则1. 方法签名必须相同示例: 2. 返回类型可以是子类型(协变返回类型)示例: 3. 访问修饰符不能比父类的更严格示例&am…

使用京东云主机搭建幻兽帕鲁游戏联机服务器全流程,0基础教程

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程,非常简单,京东云推出幻兽帕鲁镜像系统,镜像直接选择幻兽帕鲁镜像即可一键自动部署,不需要手动操作,真正的新手0基础部署幻兽帕鲁,阿腾云整理基于京…