最近比较忙,很少来更新博客。这一次我们简单聊一聊一致性的问题。对于一个分布式系统来讲,一致性问题是一个非常重要,非常基础的问题。对于分布式系统的框架设计者,可以说是一个需要考虑的基本问题。在分布式系统中一个基础理论是CAP,具体说就是一致性(Consistency),可用性(Availability),分区容错(Partition tolerance)。一个个具体解释一下:

一致性:每一个读操作可以接收到最新的数据或者是错误

可用性:每一个请求可以接收到一个没有错误的相应,但是不保证该相应包含最后写的数据

分区容错:在网络的节点间发生任意数量的错误,比如延迟或者丢包,系统仍然可以正常工作。

从理论上讲,CAP是不可能完全实现的,为了拥有其中两个特性必须要损害第三个性能。对于分布式系统一般认为分区容错是一个必须支持的特性,原因在于分布式系统必然基于网络构建,而网络上的传输错误是不可避免的。在这里多说一句,partition的概念在AWS里很多服务中都会涉及,是一个非常普遍的需要了解的概念。以后再谈到具体的服务时再讨论。在我们只能选择两个而放弃一个的情况下,可用性和一致性只能二选一了。我们如果仔细看AWS的服务,会发现有些服务是允许用户选择那个特性优先的,比如DynamoDB,也有很多系统是不可选择的。当不可选择时,也就是说系统已经默认了哪个优先,大多数情况下是可用性优先,也有些服务是一致性优先。

当可用性优先时,又会涉及到另一个话题,这个时候什么样的系统行为是可以接受的?对于AWS来说这涉及到幂等(idempotent)和最终一致性(eventually consistency)的问题。其实这些也可以展开很多话题讲,这里我们就简单说一下幂等的意思对于写请求的顺序是不敏感的,也就是无论是怎样的顺序,最终的结果都保证是一样的。而最终一致性是说系统在一定时间后可以达到一致性的状态,也就是说在一定时间后所有client读到的数据都是一致的。幂等一般需要client特别的设计,AWS服务是没有办法保证的,但是AWS的很多关键服务会提供方法来辅助client做出幂等的设计。而最终一致性是AWS服务在保证可用性前提下的一般普遍性的选择。

在这里我们具体看一下AWS里两个最为流行的服务,S3和DynamoDB的一致性是如何设计的。对于S3和DynamoDB还不熟悉的同学,可以看一下AWS的文档。简单说S3是一个对象存储服务。DynamoDB是一个NoSQL数据库。关于它们都有不少有意思的话题可以讨论。现在我们先看看和一致性有关的内容。

S3的一致性模型:当我们在S3中创建一个对象时(PUTS new objects),S3提供的read-after-write一致性。也就是当新对象被建立并被同步到所有的AZ以后,所有的client都可以看到;而在此之前所有的client都看不到。当我们覆盖或者删除一个对象时(overwrite PUTS and DELETES),S3提供最终一致性。这意味着如果有两个client同时对一个对象做出覆盖写请求,在一定的时间内如果多个client去读这个对象,他们可能会得到不同的结果。而在一定时间后,可以保证所有client最终读到的内容是一样的。当然,这个时间一般都很短,绝大多数情况可以在2秒内达到一致性的状态。

DynamoDB一致性模型:DynamoDB对于写操作是不提供选项,而默认使用最终一致性写操作的。而对于读操作,client是可以选择是使用最终一致性读还是强一致性读的,默认是最终一致性读。如果我们还记得CAP理论的话,我们会意识到选择强一致性读会损害可用性。具体来说,可能会出现系统返回500(Internal System Error)的情况。这是为什么呢?原因在于如果我们选择强一致性读,DynamoDB会在所有的服务节点中选择一个作为主节点(Master Node),而其他的节点叫做从节点(slave node)。而Master Node会收集所有slave node的数据更新状况来判断哪个数据作为当前系统的一致性结果。一般情况下,如果有超出一半的节点选择了同一个数据作为最终结果,Master Node就会选择该结果作为当前系统的最终结果。而一旦Master Node出现任何问题,整个系统会进入暂时的不可用状态,这个时候系统各个node会判断出Master Node出现问题,而重新选举新的Master Node。当新的Master Node选举出来以后系统就可以恢复工作了。这个时间一般会持续好几秒钟。如下图所示:

关于一致性的问题就先聊到这里。大家有什么问题欢迎留言交流。

参考文档:

CAP:https://cloudacademy.com/blog/consistency-models-of-amazon-cloud-services/

S3: https://aws.amazon.com/s3/

DynamoDB:https://aws.amazon.com/dynamodb/

AWS入门指南之三:一致性问题相关推荐

  1. Redis入门指南之三(入门)

    本节主要介绍Redis的5种数据类型,同时使用Python API来操作Redis,其中python版本为3.5, redis版本为4.0.2. redis-py 的API的使用可以分类为: (1)连 ...

  2. AWS入门指南之一:怎样创建免费的AWS账号

    从今天起,打算慢慢写一系列关于aws的文章.主要集中于AWS的一些基本知识和操作指南.这其中会穿插于介绍一些云和分布式系统的知识,但是以AWS的实现为主.可能会带有少量的代码,但是主体操作应该会使用A ...

  3. aws python库_适用于Alexa的新AWS Python SDK入门指南

    aws python库 by Ralu Bolovan 由Ralu Bolovan 适用于Alexa的新AWS Python SDK入门指南 (A Beginner's guide to the ne ...

  4. Kubernetes入门指南-基础篇

    Kubernetes入门指南-基础篇 基础入门 kubernetes简介 kubernetes是一个平台 kubernetes架构 kubernetes不是什么 核心组件 kubernetes基本概念 ...

  5. RMAN快速入门指南

    RMAN快速入门指南   1. What is RMAN? 什么是RMAN?    4 2. Terminology 专业词汇解释    4 2.1. Backup sets 备份集合    4 2. ...

  6. docker ubuntu镜像_Docker 入门指南 | Linux 中国

    该教程包含了如何创建一个新的 Docker 容器,如何运行该容器,如何从现有的 Docker 容器中创建自己的 Docker 镜像等 Docker 的一些基础知识.操作.-- Sk 在我们的上一个教程 ...

  7. Consul 入门指南

    一.安装 Consul Consul 下载地址:https://www.consul.io/downloads.html,下载后解压就是一个可执行的二进制文件consul,配置好环境变量,检查 con ...

  8. 后台产品经理入门指南(下)

    上篇指路-->后台产品经理入门指南(上),本篇继续介绍后台产品经理入门的剩余几章内容. 5.后台产品设计要点 6.分析复杂业务的几个思考维度 7.后台与中台的关系 8.后台产品的未来 05 后台 ...

  9. Steeltoe 2.4新增代码生成工具、全新入门指南等,助力.NET微服务开发

    Steeltoe框架现可帮助.NET开发人员创建云原生应用.随着其功能的扩充,该框架越来越受欢迎,下载量达到580万(并且仍在增加),这其中大部分的功能创新都源自于用户反馈.社区贡献和.NET运行环境 ...

最新文章

  1. 尝试去读SQLMAP源码(一)
  2. 时间序列分析模型:ARIMA模型和SARIMAX算法
  3. springboot配置多个数据库环境
  4. python 函数参数类型判断(判断类型)
  5. Win7查看开机记录
  6. CVPR 2019 | 国防科大提出双目超分辨算法,效果优异代码已开源
  7. 2的次幂表示【递归算法训练】
  8. 《JavaScript核心技术》
  9. jhipster 配置 mysql_JHipster 基础使用
  10. JS设置弹出小窗口。
  11. python能制作ppt动画效果吗_你听说过Python可以做动画吗
  12. 《业务需求说明书》检查单 zz
  13. comsol光学模块案例
  14. 文档被administrator锁定怎么解除
  15. java fly bird小游戏_原生js写的flybird小游戏
  16. AI落地的新范式,就“藏”在下一场软件基础设施的重大升级里
  17. django个人博客
  18. 天使轮,种子,A轮,B轮,C轮,Pre-IPO
  19. 计算机在运行 显示器出现黑屏,显示器黑屏但电脑一直在运行是什么原因
  20. 【单片机】一文彻底搞懂单片机程序烧录

热门文章

  1. SSIS 自测题-数据流控件类
  2. K-verse 小型活动来袭!
  3. LV4500R二维码扫描器在酒店入住自助机的应用案例,打造高效快速的扫码入住体验
  4. 如何在公众号文章中添加申请表(Word文档)
  5. 【UDS】ISO15765-2之协议数据单元
  6. vxe-table表格合并单元格和编辑
  7. 公司年底裁员,程序员表示给赔偿就行,公司威胁:小心背景调查
  8. 给出以下程序,制作makefile文件,编译出可执行文件
  9. 如何计算初始图片的大小?像素,分辨率
  10. 下载2005韩国暴笑爱情喜剧片 ※【色即是空续集之涩涩小猪头】