<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>etcd on Tony老师的博客</title><link>https://blog.tanteng.space/tags/etcd/</link><description>Recent content in etcd on Tony老师的博客</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Tue, 22 Feb 2022 11:00:00 +0800</lastBuildDate><atom:link href="https://blog.tanteng.space/tags/etcd/index.xml" rel="self" type="application/rss+xml"/><item><title>分布式锁：Redis / etcd / ZooKeeper 三种实现的全对比</title><link>https://blog.tanteng.space/2022/02/distributed-lock-comparison/</link><pubDate>Tue, 22 Feb 2022 11:00:00 +0800</pubDate><guid>https://blog.tanteng.space/2022/02/distributed-lock-comparison/</guid><description>&lt;p&gt;2014 年 antirez 发表《Distributed locks with Redis》提出 Redlock；2016 年 Martin Kleppmann 在《How to do distributed locking》中公开反驳其正确性。这场争论留下的最重要结论是：&lt;strong&gt;分布式锁的正确性不能只靠锁本身&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;理解分布式锁要先承认一个事实——&lt;strong&gt;没有完美的分布式锁&lt;/strong&gt;。每种实现都有失效场景，工程师的任务是选一个&amp;quot;代价可接受&amp;quot;的方案，而不是找一个&amp;quot;绝对正确&amp;quot;的方案。&lt;/p&gt;</description></item><item><title>etcd Raft 一致性协议：从理论到工程实现</title><link>https://blog.tanteng.space/2018/10/etcd-raft-consensus/</link><pubDate>Mon, 15 Oct 2018 10:00:00 +0800</pubDate><guid>https://blog.tanteng.space/2018/10/etcd-raft-consensus/</guid><description>&lt;p&gt;在分布式系统中，让多个节点对一组操作达成一致（Consensus）是难题。Diego Ongaro 在 2014 年的博士论文《Consensus: Bridging Theory and Practice》中提出 &lt;strong&gt;Raft 算法&lt;/strong&gt;，专门为了可理解性而设计。相比 Paxos 的晦涩，Raft 用工程化的方式描述了 leader 选举、日志复制等机制。本文从原理到 etcd 的实现，逐步拆解 Raft。&lt;/p&gt;
&lt;h2 id="为什么需要一致性协议"&gt;为什么需要一致性协议&lt;/h2&gt;
&lt;p&gt;分布式 KV 存储（如 etcd、Consul）需要在多副本之间复制写操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;单 leader 强一致性&lt;/strong&gt;：写必须等大多数副本确认，延迟高但强一致&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多 leader 最终一致性&lt;/strong&gt;：写入本地即返回，后台异步复制，吞吐高但不保证顺序&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;无 leader&lt;/strong&gt;：Dynamo 风格 quorum 读写&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Raft 是&lt;strong&gt;单 leader 强一致性&lt;/strong&gt;算法的代表，目标是让 3/5 个副本的集群能容忍 1/2 个节点故障。&lt;/p&gt;
&lt;h2 id="raft-三种角色"&gt;Raft 三种角色&lt;/h2&gt;
&lt;div class="code-block"&gt;
 &lt;button class="code-copy" type="button" hidden aria-label="Copy code to clipboard"&gt;
 &lt;span class="code-copy-label" aria-hidden="true"&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;stateDiagram-v2
 [*] --&amp;gt; Follower

 Follower --&amp;gt; Candidate: 超时无心跳&amp;lt;br/&amp;gt;开始选举
 Candidate --&amp;gt; Leader: 获得多数票
 Candidate --&amp;gt; Follower: 发现更高 term
 Leader --&amp;gt; Follower: 发现更高 term

 Follower --&amp;gt; Follower: 收到合法心跳
 Leader --&amp;gt; Follower: 主动 step down&lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;&lt;p&gt;每个节点在任意时刻处于三种状态之一&lt;/p&gt;</description></item></channel></rss>