转载

Spring Cloud学习笔记(1)- 分布式系统基本原则CPA

分布式系统的基础特性:

  1. 一致性 (Consistency)
  2. 可用性 (Availability)
  3. 分区容错性 (Partition tolerance)

分区容错性

分布式系统分布在多个子网络,每个子网络被称为一个区 (Partition)

区间通信是有可能引发错误的,分区之间的通信错误是无法避免的,主要是在分区通信错误后无法保持一致性和可用性。

一致性

写操作之后的读操作,必须返回该值。

example:

当前分布式系统存在两台服务器,一台在深圳名为Server1,一台在上海名为Server2。
商户用户小明将位于深圳服务器上的商品A的价格由75.00元修改为为48.00元,
当购买用户小红访问上海服务器上的商品A时,看到的价格也应该为由75.00元修改为48.00元。
复制代码

可用性

只要收到用户的请求,服务器就必须给出回应。

example:

用户可以选择向任何一台分区服务器发起读操作,不管是哪台服务器,只要收到请求,就必须告诉用户,
到底是75.00元还是 48.00元,否则就不满足可用性。
复制代码

分布式系统的主要矛盾

一致性和可用性是不可调和的矛盾,因为分区通信错误是无法避免的。

example:

当前分布式系统存在两台服务器,一台在深圳名为Server1,一台在上海名为Server2。
当Server1写入用户点赞数据时,必须同步将用户点赞数据同步到Server2。
在同步时,需要锁定Server2中的用户点赞数据,执行写操作。
当执行写操作时,Server2中的用户点赞数据是被锁定的,不可被外部访问,故而丧失了可用性。
如果为了保障Server2的用户点赞数据可读,必须保障不锁定写操作,故而可访问性和可用性是不可调和的矛盾。
复制代码

在分布式系统中,必须首先保障可用性,可用性的优先级是第一位的。

example:

A在深圳使用某信发布朋友圈,他的某信好友任何时候都要保障可以访问A的朋友圈,
但是不一定保障同步到A的朋友圈最新消息。
不能因为A的朋友圈发布了新内容,而本地服务未同步朋友圈消息而导致朋友圈访问错误。
复制代码

tips:

在大型分布式系统中,任何时候首先保障可用性,尽量的保障一致性,提高分区容错性。

在任何分布式系统中,CAP特性最多同时满足两个

原文  https://juejin.im/post/5ef2302a518825657a3e1f7b
正文到此结束
Loading...