Grokking-System-Design
  • 前言
  • 负载均衡
  • 缓存
  • 分片或数据分区
  • 索引
  • 代理
  • 队列
  • 冗余与复制
  • SQL与NoSQL
  • CAP定理
  • 一致性哈希
  • 长轮询与WebSockets与服务器发送事件
  • 系统设计演进指南
  • 设计像TinyURL这样的短URL服务
  • 设计Instagram
  • 设计Dropbox
  • 设计Typeahead
  • 设计FackbookMessager
  • 设计Twitter
  • 设计Youtube或Netflix
  • 设计Twitter搜索
  • 设计一个Web爬虫
  • 设计Facebook的新闻流
  • 设计Yelp或附近的朋友
  • 设计Uber后端
  • 设计BookMyShow
Powered by GitBook
On this page

CAP定理

PreviousSQL与NoSQLNext一致性哈希

Last updated 3 years ago

CAP定理指出,分布式软件系统不可能同时提供以下三个保证(CAP)中的两个以上:一致性、可用性和分区容忍。当我们设计一个分布式系统时,CAP之间的权衡几乎是我们要考虑的第一件事。CAP定理认为,在设计分布式系统时,我们只能选择以下两种:

一致性: 所有节点在同一时间看到相同的数据。一致性是通过在允许进一步读取之前更新多个节点实现的。

可用性: 每个请求在成功失败时都得到一个响应。可用性是通过在不同的服务器上复制数据来实现的。

分区容错: 尽管消息丢失或部分故障,系统仍能继续工作。具有分区容错性的系统可以承受任何数量的网络故障,而不会导致整个网络的故障。在节点和网络的组合中充分复制数据,以保持系统在间歇性中断中正常运行。

我们无法构建一个持续可用、顺序一致和容忍任何分区故障的通用数据存储。我们只能建立一个具有这三种属性中的任意两种的系统。因为,为了保持一致,所有节点都应该以相同的顺序看到相同的更新集。但是,如果网络中有一个分区,那么在客户机从最新的分区中读取数据后,在从过期分区中读取数据之前,一个分区中的更新可能无法到达其他分区。处理这种可能性的唯一方法是停止服务来自过期分区的请求,但这样服务就不再是100%可用了。

img_7.png