分布式系统与一致性协议

本贴最后更新于 2064 天前,其中的信息可能已经渤澥桑田

CAP 原理

CAP 原理被奉为分布式系统的设计准则. 这是在分布式届无人不知无人不晓的.

  • C: Consistency(一致性) 这里的一致性特指的是强一致性, 通俗的讲, 就是所有节点上的数据时时刻刻保持同步. 也就是原子读写. 所有的读写请求都好像是经全局排序过的一样, 写后面的读一定能读到前面写的内容.
  • A: Availability(可用性) 任何非故障的节点都应该在有限的时间内给出请求的响应, 这里不关心请求是否成功.
  • P: Tolerance to the partition of network(分区容忍性) 当发生网络分区的时候(也就是节点见无法通讯), 在丢失任意多消息的情况下, 系统仍然能够正常的工作.

但是我们也清楚的是在现实的分布式系统中, 三种是不可兼得的. 以下是直观的说明:
          AP 满足但 C 不满足 如果既要求系统共可用性又要求分区容错性, 那么就要放弃一致性了. 因为一旦发生网络分区, 节点之间将无法通讯. 为了满足可用性, 没个节点就只能用本地数据进行服务的提供. 这样就会导致数据的不一致.
          CP 满足但 A 不满足 如果要求数据在各个服务器上是强一致性的, 然后网络分区了会导致同步时间无限延长, 那么如此一来可用性就得不到保障了.
          CA 满足但 P 不满足 如果不存在网络分区, 那么强一致性和可用性是可以满足的.

一致性

什么是一致性? 在分布式存储系统中通常会通过维护多个副本来进行容错, 以此来提高系统的可用性. 但是一致性这个词不管是中文还是英文在计算机的不同领域有着不同的含义:

  • Coherence 这个词只出现在 Cache Coherence 中, 其所关注的是多核共享内存的 CPU 架构下, 各个核的 Cache 上的数据应如何保持一致.
  • Consensus 是共识, 它强调的是多个提议者就某件事情达成共识, 其所关注的是达成共识的过程, 例如 Paxos, Raft 选举等.
  • Consistency 广义上讲, 描述了系统本身的不变量的维护程度对上层业务客户端的影响, 以及该系统的并发状态会向客户端暴露什么样的异常. CAP, ACID 中的 C 都是这个意思.
    分布式的一致性通俗的讲就是不同的副本服务器认可同一份数据. 一旦这些服务器对某份数据达成了一致, 那么该决定便是最终决定.
    一致性与结果的正确性没有关系, 而是对外呈现的状态是否一致(统一). 例如所有节点都达成一个错误的共识也是一致性的一种表现.
    一致性协议解决的正是这样的问题, 它能使的一组机器像一个整体一样工作, 即使其中的一些机器发生了错误, 也能正常的工作.
    一致性协议是在复制状态机(Replicated State Machines, RSM)的背景下提出的, 在这之前, 我们先了解一下一致性模型.
    ###一致性模型
    在很多人看来, 银行间的转账应该是强一致性的, 但是仔细分析一下就会发现, 小王向小张转账 1000 元, 小王的账户扣除了 1000 元, 此时小张并一定会同步收到 1000, 可能会存在一个不一致的时间窗口. 也就是小王的账户中扣除了 1000 元, 小张还没收到 1000.
    在我们的世界中, 网络分区是任何时刻, 任何地点都有可能正在或者即将发生的. 交换机, 网卡, 主机硬件, 操作系统, 磁盘, 虚拟化层和语言运行时间都会延误, 丢弃, 复制或者重新排序我们的信息. 那么我们需呀直观的正确性去让自己的软件按照确定的规则运行.
  • 分布式
    80 引用 • 149 回帖 • 4 关注
  • RAFT
    2 引用
  • PAXOS
    6 引用 • 2 回帖
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 634 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 160 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    174 引用 • 540 回帖
  • V2Ray
    1 引用 • 15 回帖
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 503 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 179 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖 • 1 关注
  • OneNote
    1 引用 • 3 回帖
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    89 引用 • 1251 回帖 • 404 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 611 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 31 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    336 引用 • 324 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 555 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 628 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 57 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 343 关注
  • CodeMirror
    2 引用 • 17 回帖 • 163 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖 • 1 关注
  • 印象笔记
    3 引用 • 16 回帖 • 1 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9788 引用 • 44504 回帖 • 83 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 401 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 77 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 726 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 143 回帖 • 1 关注