<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>BASE - 标签 - ISLAND</title><link>https://youngxhui.top/tags/base/</link><description>BASE - 标签 - ISLAND</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>youngxhui@gmail.com (youngxhui)</managingEditor><webMaster>youngxhui@gmail.com (youngxhui)</webMaster><copyright>本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。</copyright><lastBuildDate>Sun, 24 Mar 2024 22:45:30 -0700</lastBuildDate><atom:link href="https://youngxhui.top/tags/base/" rel="self" type="application/rss+xml"/><item><title>分布式理论</title><link>https://youngxhui.top/2024/03/distributed-theory/</link><pubDate>Sun, 24 Mar 2024 22:45:30 -0700</pubDate><author><name>youngxhui</name></author><guid>https://youngxhui.top/2024/03/distributed-theory/</guid><description><![CDATA[<div class="featured-image">
                <img src="https://island-hexo.oss-cn-beijing.aliyuncs.com/202403241745676.png" referrerpolicy="no-referrer">
            </div><h2 id="cap-理论" class="headerLink">
    <a href="#cap-%e7%90%86%e8%ae%ba" class="header-mark"></a>CAP 理论</h2><p>在分布式系统中最重要的一条理论为 CAP 理论。这个理论是由加州大学伯克利分校的计算机科学家 <strong>Eric Allen Brewer</strong> 在 2000 年提出的一个猜想，由 2002 年，麻省理工两位科学家发表了该猜想的证明，使得该猜想变成了一个定理。</p>
<p>CAP 定理中对分布式系统提出了三点，分别为：</p>
<ul>
<li>一致性(Consistency)：多个副本的数据之间能够保持一致；</li>
<li>可用性(Availability)：每次请求都可以获取到正常的、非错误的响应，但是无法保证数据是最新的；</li>
<li>分区容错性(Partition tolerance)：系统的某个节点发生故障，仍然还可以对外提供一致性和可用性的服务。</li>
</ul>
<p><img class="tw-inline" loading="lazy" src='https://island-hexo.oss-cn-beijing.aliyuncs.com/202403241745676.png'   alt="CAP 理论"  ></p>
<p>例如当前系统有两个 DB 分别为 DB0 和 DB1。</p>
<h3 id="一致性-c" class="headerLink">
    <a href="#%e4%b8%80%e8%87%b4%e6%80%a7-c" class="header-mark"></a>一致性 C</h3><p>一致性是指在数据发生变化的时候（也就是写操作发生后），无论是谁获取到的数据（也就是读操作）也是一样的。</p>
<p>当用户1 通过写操作对 DB0 的数据进行修改后，那么无论用户1 还是 用户2 ，无论从 DB0 还是 DB1 读取，读取后的数据都应该是完全一样的，这就是所谓的一致性。</p>
<p>也就是 DB0 的数据发生了修改，应该由相关的机制告诉 DB1 也将相关的数据发生修改，保证该数据在不同的 DB 中是一样的。</p>
<h3 id="可用性-a" class="headerLink">
    <a href="#%e5%8f%af%e7%94%a8%e6%80%a7-a" class="header-mark"></a>可用性 A</h3><p>当用户发出相关请求，无论 DB0 还是 DB1 都会返回相关的数据，但是这里不需要关心数据是否一致。</p>
<h3 id="分区容错性-p" class="headerLink">
    <a href="#%e5%88%86%e5%8c%ba%e5%ae%b9%e9%94%99%e6%80%a7-p" class="header-mark"></a>分区容错性 P</h3><p>DB0 和 DB1 例如出现了问题，这个问题可能是网络问题，也有可能是其他硬件问题，导致了 DB0 和 DB1 的系统无法通信。这样 DB0 和 DB1 就成为了两个分区。即使 DB0 和 DB1 无法进行通信，但是 DB0 和 DB1 仍旧可以对外提供服务。</p>
<p>但是这种情况，在实际系统中无法避免这种情况，所以分区容错性是一个必选的条件。</p>
<h3 id="cp-还是-ap" class="headerLink">
    <a href="#cp-%e8%bf%98%e6%98%af-ap" class="header-mark"></a>CP 还是 AP</h3><p>既然 CAP 三条规则无法同时满足，那么就出现了上图中的三种情况，满足任意两条规则，也就是 CA，CP 和 AP 三种架构，但是分区容错性是必选的，这样我们就剩下 CP 和 AP 两种关系。</p>
<p>常见的 CP 软件有 Zookeeper，Zookeeper 为了保证数据的一致性，牺牲了可用性。任何时候 Zookeeper 的访问都能获取一致的结果，但是不保证每次服务请求都可以用。</p>
<p>而 AP 架构中，要求数据一致性并不是那么重要，允许不同的服务可以返回不同的数据。</p>
<h3 id="cap-的不足" class="headerLink">
    <a href="#cap-%e7%9a%84%e4%b8%8d%e8%b6%b3" class="header-mark"></a>CAP 的不足</h3><p>CAP 理论并不是完美的，存在很多问题。例如 DB0 和 DB1 要保持数据的一致性，那么就会发生相关通信，通信是需要时间，这就导致了某些时刻数据是不同步的，常见的情况在主从的机器上的主从延迟，当延迟过大的时候，用户读取的数据是不一致的。</p>
<p>CAP 理论也并不完全是三选二（或者说二选一）的问题，例如分区容错性发生的概论很小，那么就没必要牺牲了 A 和 C。</p>
<h2 id="base-理论" class="headerLink">
    <a href="#base-%e7%90%86%e8%ae%ba" class="header-mark"></a>BASE 理论</h2><p>BASE 理论算是 CAP 理论的延伸，是对 CAP 理论中一致性和可用性的权衡。在 CAP 中，所谓的一致性是指数据时时刻刻的都保持一致，也就是强一致性。上文中 CAP 的不足也说到，要保证时时刻刻数据的一致性是一件很困难的事情。而 BASE 理论就是对改问题的补充，既然很难做到强一致性，那么系统根据自身的业务特点，确保系统中的数据保证最终一致性也是可以的。</p>
<p>BASE 理论是 ebay 工程师 Dan Pritchett</p>
<p>BASE 是指 Basically Available， Soft State 和 Eventually Consistent 三个短语的缩写。</p>
<h3 id="basically-available-基本可用" class="headerLink">
    <a href="#basically-available-%e5%9f%ba%e6%9c%ac%e5%8f%af%e7%94%a8" class="header-mark"></a>Basically Available 基本可用</h3><p>基本可用指的是系统出现故障后，但是还可以使用，但是可能比较正常系统上可能出现一些问题，例如响应时间上，服务降级牺牲部分功能等。</p>
<h3 id="soft-state-软状态" class="headerLink">
    <a href="#soft-state-%e8%bd%af%e7%8a%b6%e6%80%81" class="header-mark"></a>Soft State 软状态</h3><p>软状态指的是系统数据允许出现中间状态，例如数据库主从同步过程中会出现中间状态，这就是一种软状态。</p>
<h3 id="eventually-consistent-最终一致性" class="headerLink">
    <a href="#eventually-consistent-%e6%9c%80%e7%bb%88%e4%b8%80%e8%87%b4%e6%80%a7" class="header-mark"></a>Eventually Consistent 最终一致性</h3><p>最终一致性强调经过上述的软状态后，最后数据保持一致性。</p>
<p>BASE 理论的提出是通过牺牲系统的强一致性来保证系统的可用性，允许系统在一段时间内的数据是不一致的，但是要求最终数据的一致性。</p>
<h2 id="参考文章" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83%e6%96%87%e7%ab%a0" class="header-mark"></a>参考文章</h2><p><a href="https://cloud.tencent.com/developer/article/1860632" target="_blank" rel="noopener noreferrer">一文看懂｜分布式系统之CAP理论</a></p>
<p><a href="https://www.liuyushuai.com/blog/mrMZ6ybyAjwv" target="_blank" rel="noopener noreferrer">分布式架构之CAP理论/AP架构/CP架构</a></p>
]]></description></item></channel></rss>