<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>高可用 on 架构视界</title>
    <link>https://blog-architectview.pages.dev/tags/%E9%AB%98%E5%8F%AF%E7%94%A8/</link>
    <description>Recent content in 高可用 on 架构视界</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <copyright>© 2026 架构视界 Architect View</copyright>
    <lastBuildDate>Tue, 19 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog-architectview.pages.dev/tags/%E9%AB%98%E5%8F%AF%E7%94%A8/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>分布式系统演进：从 CAP 到 PACELC 的架构思考</title>
      <link>https://blog-architectview.pages.dev/posts/distributed-systems-cap-to-pacelc/</link>
      <pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate>
      <guid>https://blog-architectview.pages.dev/posts/distributed-systems-cap-to-pacelc/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;CAP 定理是分布式系统的「牛顿第一定律」——它定义了这个领域的基本约束。但在真实的工程实践中，CAP 定理过于粗粒度，以至于它无法指导我们在实际系统中做出正确的设计决策。我们需要一个更精细的模型。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;cap-定理的再理解&#34;&gt;CAP 定理的再理解&lt;/h2&gt;&#xA;&lt;p&gt;2000 年，Eric Brewer 提出 CAP 猜想；2002 年，Gilbert 和 Lynch 给出了形式化证明。CAP 定理告诉我们：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;在一个分布式系统中，以下三个特性最多只能同时满足两个：&#xA;&#xA;C (Consistency)  - 一致性：所有节点在同一时刻看到相同的数据&#xA;A (Availability) - 可用性：每个请求都能在合理时间内收到非错误响应&#xA;P (Partition Tolerance) - 分区容错：网络分区发生时系统仍能运行&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;大多数架构师对 CAP 的理解停留在「三选二」的层面。但这个理解有几个问题：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;问题 1：P 不是一个可选项&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;在真实的分布式系统中，网络分区是必然会发生的事情——交换机故障、光缆被挖断、数据中心之间的网络抖动。所以 P 不是你可以「选择放弃」的特性，它是一个既定事实。&lt;/p&gt;&#xA;&lt;p&gt;真正的选择是在 &lt;strong&gt;C 和 A 之间&lt;/strong&gt;，而且这个选择只在分区发生时才有意义。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;没有分区时：C 和 A 可以同时满足&#xA;发生分区时：必须在 C 和 A 之间选择&#xA;&#xA;CP 系统：分区时拒绝服务，保证一致性&#xA;  例：ZooKeeper、etcd、HBase&#xA;&#xA;AP 系统：分区时继续服务，可能返回过期数据&#xA;  例：Cassandra、DynamoDB、CouchDB&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;问题 2：CAP 是全局的，但需求是局部的&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;同一个系统中，不同的业务操作可能有不同的一致性需求：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;电商系统的一致性需求：&#xA;&#xA;操作 A：扣减库存&#xA;  → 需要强一致性（不能超卖）→ CP&#xA;&#xA;操作 B：展示商品评价&#xA;  → 可以接受最终一致性（延迟几秒看到新评价无所谓）→ AP&#xA;&#xA;操作 C：用户修改收货地址&#xA;  → 需要强一致性（改错了会寄错地方）→ CP&#xA;&#xA;操作 D：商品浏览量计数&#xA;  → 可以接受最终一致性（少计几次没关系）→ AP&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;一个成熟的分布式系统不会在全局层面选择 CP 或 AP，而是在每个操作级别做精细的选择。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
