分布式系统理论基础

文章目录

    • 介绍
      • 目标
    • 正文
      • CAP
        • Consistency
        • Availability
        • Partition tolerance
      • BASE
        • Basically Available
        • Soft State
        • Eventually Consistent
      • ACID
        • atomicity
        • consistency
        • isolation
        • durability
    • 参考文档

介绍

分布式系统面临的场景往往是众口难调,“这也要,那也要”,最后可能啥都得不到,这就是分布式系统的常态,没有灵丹妙药都是妥协和退无可退;
其实类似金融中的不可能三角(固定汇率、自由市场、独立货币政策不能都得到),仔细思考会发现非常有趣;

目标

温习分布式系统的基础理论,尤其是常见的设计思想和理论,温故而知新。

正文

分布式系统的基础理论有CAP、BASE;本文主要介绍它们,以及做下diff,顺带对比ACID;

CAP

强一致性和可用性都比较好理解,最不好理解的就是分区容错性;
分区容错更多说的是一种系统(出现分区时)该如何继续下去;也就是常说的保证了P的时候,此时关注A还是C;
目前大多数互联网公司,包括个人工作过的公司基本都是AP,毕竟给老板画饼,定OKR的时候都是SLA xx个9,目前没见过人说为了一致性系统全年停服一半以上时间,没有可用性其他都没有意义,用户就是上帝;听说金融系统CP较多,但是细琢磨也够呛,毕竟数据进来了可以通过日志做清洗,停服没用户、流量进来,公司都活不下去谈其他似乎也不合理(参考铁路的抢票系统);
曾经在国内top级的电商公司做分布式存储,为了保证可用性,在流量最大的那几天默认是忽视一致性的, “池塘先修大点,鱼进来了就跑不了,不行我们再下水去捞呗”,通过日志的形式把所有流量都兜住,然后扩容上大规模计算集群异步做流量回放,降噪、聚合、汇总保证最终一致性,熔断、降低更是闻所未闻,毕竟没人会承认自己服务扛不住了,要在双11掉链子(毕竟在誓师大会上亲眼见过老板们赌咒发誓承诺100%没问题);迫于现实的无奈实践了BASE理论,想来也是”得道多助,天助我也“。

Consistency

(强)一致性 注意国内翻译的原因往往忽略了强一致性,而是翻译为一致性;
指的是请求分布式系统任意一节点拿到的数据都是一致且是最新版本的;也就意味着所有节点上的数据都是完全一致(版本也一致,且是最新的),节点/数据不存在中间状态;

Availability

可用性
指的是每次请求收到的响应都是非异常

Partition tolerance

分区容错性
指的是当通信故障时,系统发生了分区,此时系统能否继续运行,按照何种方式对外提供服务(A还是C);

BASE

现有的,或者说大多数系统基本都是BASE的最佳实践者,系统的第一目标是可用,一致性可通过其他手段“慢慢”实现,或者说当系统可以承担一定时间内的数据不一致造成的损失那么就没有必要花费更多成本去实现强一致性;
比如消息队列领域Kafka通过Zookeeper实现强一致性约束,导致服务可用性相较于RocketMQ等差了很多,反观RocketMQ等对于强一致性的约束更为宽泛,甚至变成可配置项,如果要求走强一致性那么就需要开启同步刷盘且ALLACK,否则可以通过异步等方式提高可用性,降低一致性,按需索取;
最终一致性的范例就是Consul(协议Gossip),原理类似八卦,一传十,十传百,理论上总归所有人都能知道

Basically Available

基本可用
参考CAP的可用性

Soft State

软状态
数据的状态不是不可修改的,允许数据/节点存在中间状态;

Eventually Consistent

最终一致性
数据/节点经过一定时间后,从中间状态最终变成一致,实现所有数据/节点的状态一致;

ACID

atomicity

原子性(atomicity,或称不可分割性)

consistency

一致性(consistency)

isolation

隔离性(isolation,又称独立性)

durability

持久性(durability)

参考文档

数据密集型应用系统

你可能感兴趣的:(存储,总结,mysql数据库,分布式系统,分布式存储,CAP,BASE,大型分布式系统理论)