马逊s3云存储接口_当对象存储“湖”有了强一致性

从 2006年第一个云服务对象存储服务 Amazon S3 发布直到 2020年12月1日之前,S3 对象操作都是遵循 “最终一致性”原则,对象存储服务本身就是一个复杂的分布式系统,但对用户暴露简单的 API 服务接口,无限扩展存储大小,极高的数据持久性(标准存储在一个区域多个可用区进行多份冗余存储);对象存储服务已经成为数据和智能时代最重要的一个可靠“数据容器”,无论 AWS 自身的数据湖解决方案还是类似 Snowflake 新型的云数仓即服务的产品,后台都选择了 S3 作为数据存储;

- 1 -

数据一致性

2000年左右发表的 CAP 理论,即三选二,任何基于网络的数据共享系统最多满足数据一致性,高可用性,分区容忍性三要素的两个;而在一个大规模分布式系统中,网络分区是不可避免的,因此同时取得高可用和数据一致性就是一个非常大的挑战;导致有两种选择,一种平衡就是在发生网络分区时,牺牲一点数据一致性而保障系统高可用,或者优先保障数据一致性,牺牲系统可用性;最终一致性是满足大规模可扩展的分布式系统,在系统可用性和数据一致性中取得的一个平衡;

Werner Vogels 在2008年一篇博客中,强调数据一致性并不是一个绝对优先考虑的事情:

不一致是可以容忍的,一是可以在高并发条件下提高读写性能;二是处理一些分区状况——多数表决模型(majority model)有可能使系统的一部分表现为不可用,虽然那些节点正运行良好。

看待一致性有两个角度:一种是从用户/客户端视角,他们如何观察数据更新(可以用户是否感知到不一致),另外一种是系统服务器角度,更新修改如何扩散到整个系统,系统对更新的保障;

假设我们的系统是一个大规模分布式系统,保证数据持久性和可用性,我们来理解下一致性问题,第一种维度,客户端/用户侧即观察者(可能多个)如何看到数据变更

  • 强一致性:在一次更新操作之后,所有的观察者看到一致的更新之后的值

  • 弱一致性:系统不保证观察者后续访问都返回更新之后的值,通常需要满足一定的条件或前提,这个前提通常是经过一段时间,即不一致时间窗口

  • 最终一致性:是弱一致性的一个特定表现,系统在该对象没有其它更新的情况下,最终所有的访问都返回最新的更新的值对象;如果没有故障发生,最长的不一致时间窗口,取决于通信延迟,系统负载大小,以及冗余的复制副本数量等等;

第二个维度,系统后台服务器角度来看数据一致性处理过程,假定 N 是服务器一个数据对象所有副本数量,W 是需要响应写成功的副本数量,R 是一次客户端读请求需要读取的数据副本数量;

  • 如果 W+R > N ,写副本集合和读取的副本集合总是有重叠,也就是读操作一定包含最新的数据副本,就能保证强一致性;在一个实现同步复制的主从数据库系统中,N=2,W=2,R=1,无论客户端读到哪个副本,总能返回最新的数据值;但如果是一个异步复制的主从数据库系统,R+W=N,这种情况下,客户端读取从库数据就无法保证强一致性;

  • W+R <= N, 就会导致弱一致性/最终一致性,客户端就有可能从没有收到更新的节点(分区)读取数据;

更详细的数据一致性内容请阅读参考资料里面的内容;

- 2 -

S3 的一致性

80e9ee27389bdc7ab5d2acb3682aa68b.png

原本的 S3 一致性符合如下原则:

  • 通过 PUT 操作 创建 一个新对象(原本不存在),返回成功响应后,任何客户端 GET 到的值都是一致的(该新建的对象值)(Read-After-Write 写后读一致性)

  • 通过 PUT 操作 更新 一个已有对象,如上图,由于 S3 对象会有多份复制,服务端接受到该请求,到对象在多个位置完全复制完需要一段时间,在这段时间内,客户端 GET 到的值可能是旧值 “1” 或 新值 “2”,等到所有副本都最终一致状态(同样的值),后续客户端请求 GET 到的都是最新值 (Eventually consistent 最终一致性)

  • 通过 DELETE 操作删除一个已有对象,也类似 更新 操作,S3 提供最终一致性保障,比如 DELETE 后立刻进行 LIST 对象操作,可能还能返回该对象 (Eventually consistent 最终一致性)

  • 存储桶的创建和删除以及配置变更也是符合 (Eventually consistent 最终一致性),比如启用版本控制,删除一个存储桶等操作

  • 同一个 Key 的对象操作是符合 “原子性”原则,也就是任何特定 Key 的对象操作(PUT,DELETE等),客户端要么读到旧值或新值,不会读到部分更新数据或中间状态的数据

很多场景,比如数据分析场景下,很多客户跑 Spark 或 Hive 任务,会有大量的文件新建和更新操作,加上分布式并行处理架构,S3 对象存储的最终一致性带来一些挑战,比如任务 B 依赖 任务 A 的输出,而任务 A 的输出是保存到 S3 对象存储,当任务 A 结束,任务 B 启动时,有可能读不到依赖的输入或者读到的数据不完整;AWS 托管的 Hadoop 平台 EMR 提供了一致性视图来帮助客户透明解决该问题,通过外部的 DynamoDB 表来实现 S3 对象操作的 Read-After-Write 强一致性;开源社区针对 S3A 接口,提供了类似的 S3Guard 解决方案;

12月1日,在 2020 Reinvent 在线大会上, AWS 宣布 S3 默认支持对象的强一致性保障:

Amazon S3 现在可默认为所有应用程序提供强大的写后读强一致性。与其他云提供商不同,Amazon S3 可为任何存储请求提供强大的写后读一致性,而不会改变性能或可用性,同时不会牺牲应用程序的区域隔离,也无需额外成本

这彻底改写了 S3 的最终一致性模型:

  • 所有 S3 对象的操作都支持写后读的强一致性,包括PUT(新建和更新),LIST,DELETE操作,以及 S3 Select,S3 ACL List,S3 对象标签和元数据操作都自动适用,比如

    • 一个客户端成功写入一个新对象,紧接着的读取或列表(List)操作都可以读到该新对象 (Read-After-Write)

    • 一个客户端成功更新一个新对象,紧接着的读取或列表(List)操作都可以读到该新对象 (Read-After-Update)

    • 一个客户端成功删除一个新对象,紧接着的读取或列表(List)操作都将读不到该对象 (Read-After-Delete)

  • 存储桶的创建和删除以及配置变更依然符合 (Eventually consistent 最终一致性),比如启用版本控制,删除一个存储桶等操作

  • 对于并发操作,S3 并不支持对象锁,比如两个几乎同时的 PUT 操作,后到达的操作覆盖前面的操作

- 3 -

S3 对象操作和数据库 ACID差异

大家更熟悉的关系数据库领域的 ACID(原子性,一致性,隔离性和持久性) 中的 C(一致性)/ A(可用性)概念跟 CAP 又有所不同,强调事务结束数据库处于一致的状态,经典的场景比如从一个账号把钱转移到另外一个账号,两个账号金额的总数是保证不变;数据库中通常需要开发人员编写事务相关逻辑,再通过数据库来进行实现一致性约束;

那 S3 的对象操作从 ACID 模型的如何理解?

原子性:

原子性保证每个事务作为一个完整的单元,要么成功要么失败,对于 S3 某个对象,所有的操作都是原子操作,但不支持跨多个对象的原子操作,因为 S3不提供对象锁机制;

一致性:

强一致性确保事务只能将数据库从一种有效状态转移到另一个有效状态。S3 作为一个分布式系统,12月1日起支持对象/标签/元数据/ACL的 read-after-write, read-after-delete, read-after-update强一致性保障;

隔离性:

事务通常并发执行,同一时间多个事务同时读取或修改同一个表;隔离性确保事务的并发执行使数据库与按顺序执行事务时所获得的状态相同。数据库的隔离级别可以设定,分为未提交读(Read uncommitted)、已提交读(Read committed)、可重复读(Repeatable read)和可串行化(Serializable )四类,隔离级别由低到高;而数据库的锁机制也是为了满足实现并发的隔离性;

而对于用户/客户端读取数据而言,不同的隔离级别会产生脏读(Dirty Reads)、不可重复读(NonRepeatable Reads)和幻读(Phantom Reads)现象;

S3 类比处于可重复读(Repeatable read)隔离性阶段,客户端不会产生脏读现象,但会存在不可重复读和幻读现象;

持久性:

持久性确保,一旦事务被提交,即使在系统出现故障的情况下,事务仍将保持提交后的状态。这通常意味着已完成的事务(或其影响)会记录在非易失性存储器中;

S3 在这块比数据库要强非常多(11个9的持久性),天然的分布式冗余存储,而且是同区域跨不同可用区复制(标准存储等),哪怕一个底层数据中心的故障,数据持久性都不受影响;除此之外,S3 标准存储还提供了 99.99% 的可用性保障。

- 4 -

总结

虽然市场上,很多云服务玩家都已经支持对象存储的 Read-After-Write/Delete/Update 强一致性,但作为对象存储事实标准的 S3 上的实现是一个标志性事件,S3 这个更新建立在不牺牲性能,可用性,无额外成本的基础之上,任何客户在实现自身应用场景时,更简化和游刃有余,对象存储服务是云时代的开拓者,也是面向未来数据和智能时代的基石

参考资料

  • Explanation of The S3 Consistency Model

  • Amazon S3 data consistency model

  • Amazon S3 Update – Strong Read-After-Write Consistency

  • Consistency Models

  • Werner Vogels - Eventually Consistent

申明

本站点所有文章,仅代表个人想法,不代表任何公司立场,所有数据都来自公开资料,如有不妥的图片或内容请公众号“联系作者”

转载请注明出处

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

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

相关文章

Web——Request转发和Response重定向

• Request请求转发 ○ 请求转发 请求转发&#xff08;forward&#xff09;&#xff1a;一种在服务器内部的资源跳转方式 ○ 实现方式&#xff1a; request.getRequestDispatcher("资源B路径").forward(request,response);○ 请求转发资源间共享数据&#xff1a;使用…

if else if语句格式_闲话Python之条件语句IF

我发现好像哪里都会有if&#xff0c;下面就来聊聊Python当中if的常见用法。最简单的格式就是&#xff0c;只有一个if&#xff0c;比如下面这个&#xff1a;my_deposit代码中的my_deposit50000等效于my_depositmy_deposit50000his_deposit-50000则等效于his_deposithis_deposit-…

delphi下实现ribbon界面的方法(一)

delphi下实现ribbon界面的方法&#xff08;一&#xff09; office 2007和2010是现在大多数人经常使用的办公软件&#xff0c;几乎每天都在使用。因此&#xff0c;在软件中如果使用类office的界面样式&#xff0c;客户用着非常习惯&#xff0c;而且学习曲线低&#xff0c;office…

Web笔记——Filter过滤器

○ 概念&#xff1a;Filter表示过滤器&#xff0c;是JavaWeb三大组件(Servlet、Filter、Listener)之一。 ○ 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 ○ 过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控制、统一编码处理、敏感…

mysql修改语句_序言:MySQL与Navicat安装Tips

一、数据库相关的基础知识1.1 数据分析师主要集中在select高效查找上&#xff0c;纯粹的底层运维就不需要太关注&#xff1b;1.2 数据库与表类比sheet是表&#xff0c;整个Excel文件是一个数据库&#xff1b;1.3 行与列1.4 主键&#xff08;人的身份证&#xff09;表的主键不做…

java office文件加水印_永中Office与统一操作系统UOS完成适配,开辟高效智能办公新领域...

近日&#xff0c;永中Office办公软件完成了与统一操作系统UOS的适配工作&#xff0c;此次成功适配表明信息技术应用创新操作系统与办公软件兼容性能优良、运行稳定&#xff0c;大幅提升用户在信创计算机上的办公体验&#xff0c;可为政企提供安全可靠的IT环境。永中Office是由永…

c3p0依赖导入失败问题

今天在学习c3p0的时侯&#xff0c;导入依赖后变红然后去maven仓库[&#xff08;https://mvnrepository.com/artifact/com.mchange/c3p0&#xff09;]中找&#xff0c;发现是groupId的问题。 更改后正常

c++ char*初始化_C开发实战-深入理解指针

Visual Studio 2019 解决方案的多项目应用在讲述变量&#xff0c;数据类型&#xff0c;运算符和表达式以及程序流程控制&#xff0c;数组&#xff0c;函数的相关内容&#xff0c;所有的代码都放在解决方案c-core的c-core-foundational项目下。如果你有其他编程语言经验&#xf…

java游戏服务器面试_我做游戏开发这八年

点击上方“CSDN学院精品课”&#xff0c;选择“置顶公众号”CSDN学院精品课 IT人的职业提升平台作者 | kakashi8841简述这篇文章并不是想教会大家如何开发游戏&#xff0c;更不能教大家如何成为技术总监。而是分享我一路做开发的一些经历或心得体验。与编程擦肩而过2004年&…

SSM(Spring、SpringMVC、MyBatis)框架笔记——Spring入门

一、Spring简介 Spring是分层的Java SE/EE应用full-stack 轻量级开源框架&#xff0c; 以IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和AOP&#xff08;Aspect Oriented Programming&#xff1a;面向切面编程&#xff09;为内核。提供了展现层SpringM…

c++ 字符串拼接_字符串拼接新姿势:StringJoiner

来自&#xff1a;Hollis(微信号&#xff1a;hollischuang)在为什么阿里巴巴不建议在for循环中使用””进行字符串拼接一文中&#xff0c;我们介绍了几种Java中字符串拼接的方式&#xff0c;以及优缺点。其中还有一个重要的拼接方式我没有介绍&#xff0c;那就是Java 8中提供的S…

html5 内嵌网页_如何分析并优化网页的性能?新梦想软件测试

一个网站的网页是好是坏&#xff0c;往往是体现在速度和高度两个方面&#xff0c;速度是网页所展示出来的时间&#xff0c;能否为浏览用户节约时间。高度则是一个网站网页本身的质量&#xff0c;能否为浏览用户带来真正的好体验。然而看似简单的两个点&#xff0c;但是背后要实…

怎么修改file文件框的无文件提示_使用LativeLink时,DO文件编制步骤

大侠好&#xff0c;欢迎来到FPGA技术江湖&#xff0c;江湖偌大&#xff0c;相见即是缘分。大侠可以关注FPGA技术江湖&#xff0c;在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源&#xff0c;或者一起煮酒言欢。今天和大侠简单聊聊使用LativeLink时&#xff0c;…

Spring笔记——数据源配置

常见的数据源&#xff08;连接池&#xff09;包括&#xff1a;DBCP、C3P0、BoneCP、Druid等接下来以C3P0为例讲述一下spring配置数据源的过程数据源的开发步骤 ①导入数据源的坐标和数据库驱动坐标 ②设置数据源的基本连接数据&#xff0c;将其放入jdbc.properties文件中 ③app…

间歇性掉帧卡顿_电脑卡顿问题靠它解决,我只能帮你到这儿了

因为不可抗力的原因&#xff0c;我们都要在家里呆上一段时间&#xff0c;在这期间之中如果电脑出现问题可是一件非常糟心的事情&#xff0c;因为没有人会去给你上门维修&#xff0c;线下门店又关门大吉&#xff0c;一切只能靠自己。抢救一下电脑最常见的问题就是卡顿&#xff0…

SpringMVC遇到的问题——GET http://localhost/spring_mvc_war_exploded/js/jquery-3.3.1.js net::ERR_ABORTED 404

学习SSM时遇到的问题GET http://localhost/spring_mvc_war_exploded/js/jquery-3.3.1.js net::ERR_ABORTED 404新建了js包&#xff0c;并在包下导入了jquery-3.3.1/js&#xff0c;发布项目后通过浏览器开发者工具 发现报错&#xff0c;信息如下&#xff1a;这个问题的解决方案&…

educoder平台_22个在线平台,2.4万门网课

截至2020年2月2日&#xff0c;教育部组织了22个在线课程平台制定了多样化在线教学解决方案&#xff0c;免费开放包括1291门国家精品在线开放课程和401门国家虚拟仿真实验课程在内的在线课程2.4万余门&#xff0c;覆盖了本科12个学科门类、专科高职18个专业大类&#xff0c;供高…

linspace函数matlab_从零开始的matlab学习笔记——(29)泰勒逼近函数

matlab应用——求极限&#xff0c;求导&#xff0c;求积分&#xff0c;解方程&#xff0c;概率统计&#xff0c;函数绘图&#xff0c;三维图像&#xff0c;拟合函数&#xff0c;动态图....更多内容尽在个人专栏&#xff1a;matlab学习上一节我们成功制作了能自己转圈的三维螺旋…

点云数据生成三维模型_可直接编辑的高质量3D生成模型:三维深度生成方法SDM-NET...

机器之心发布作者&#xff1a;赵悠悠中科院计算所、香港城市大学、英国卡迪夫大学以及加拿大西蒙弗雷泽大学的研究者&#xff0c;近日提出了一种能够表达几何细节和复杂拓扑结构的三维模型深度生成方法 SDM-NET&#xff0c;解决了之前方法的一部分局限性&#xff0c;使得生成的…

golang调用java的函数_大话golang性能分析(一):profile基本原理

引言&#xff1a;好久没分享了&#xff0c;不多废话了&#xff0c;准备一个专题分三期来分享下golang的性能分析。O 专题目标理解profile基本原理熟悉go常用性能分析工具pprof快速对线上服务的cpu、内存、goroutine的问题进行分析和排查对性能分析&#xff0c;golang是采取采样…