<?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 </title>
    <link>http://blog.chuckchan.top/tags/etcd/</link>
    <description>Recent content in Etcd on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <copyright>© 2026 Chuck Chan</copyright>
    <lastBuildDate>Wed, 22 Feb 2023 00:00:00 +0000</lastBuildDate><atom:link href="http://blog.chuckchan.top/tags/etcd/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Etcd</title>
      <link>http://blog.chuckchan.top/posts/middleware/etcd/etcd/</link>
      <pubDate>Wed, 22 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>http://blog.chuckchan.top/posts/middleware/etcd/etcd/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;etcd&#xA;    &lt;div id=&#34;etcd&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#etcd&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&lt;p&gt;​    etcd是CoreOS基于Raft协议开发的&lt;a href=&#34;https://so.csdn.net/so/search?q=%e5%88%86%e5%b8%83%e5%bc%8f&amp;amp;spm=1001.2101.3001.7020&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;分布式&lt;/a&gt;key-value存储，可用于服务发现、共享配置以及一致性保障（如数据库选主、分布式锁等）。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;简单：&lt;a href=&#34;https://so.csdn.net/so/search?q=curl&amp;amp;spm=1001.2101.3001.7020&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;curl&lt;/a&gt;可访问的用户的API（HTTP + JSON）&lt;/li&gt;&#xA;&lt;li&gt;安全：可选的SSL客户端证书认证&lt;/li&gt;&#xA;&lt;li&gt;快速： 单实例每秒1000次写操作&lt;/li&gt;&#xA;&lt;li&gt;可靠：使用Raft算法保证一致性&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;架构&#xA;    &lt;div id=&#34;架构&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%9e%b6%e6%9e%84&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;figure&gt;&lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;Xnip2022-09-08_11-13-48&#34;&#xA;    src=&#34;http://storage.chuckchan.top/uploads/Xnip2022-09-08_11-13-48.jpg&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Client层&lt;/strong&gt;：client层包括client v2和v3两个⼤版本API客⼾端库，提供了简洁易⽤的API，同时⽀持负载均衡、节点间故障⾃动转移，可极⼤降低业务使⽤etcd复杂度，提升开发效率、服务可⽤性。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;API网络层&lt;/strong&gt;：API⽹络层主要包括client访问server和server节点之间的通信协议。⼀⽅⾯，client访问etcd server的API分为v2和v3两个⼤版本。v2 API使⽤HTTP/1.x协议，v3 API使⽤gRPC协议。同时v3通过etcd grpc-gateway组件也⽀持HTTP/1.x协议，便于各种语⾔的服务调⽤。另⼀⽅⾯，server之间通信协议， 是指节点间通过Raft算法实现数据复制和Leader选举等功能时使⽤的HTTP/2协议。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Raft算法层&lt;/strong&gt;：Raft算法层实现了Leader选举、⽇志复制、ReadIndex等核⼼算法特性，⽤于保障etcd多个etcd是典型的读多&lt;/p&gt;&#xA;&lt;p&gt;节点间的数据⼀致性、提升服务可⽤性等，是etcd的基⽯和亮点。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;功能逻辑层&lt;/strong&gt;：etcd核⼼特性实现层，如典型的KVServer模块、MVCC模块、Auth鉴权模块、Lease租约模 块、Compactor压缩模块等，其中MVCC模块主要由treeIndex模块和boltdb模块组成。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;存储层&lt;/strong&gt;：存储层包含预写⽇志(WAL)模块、快照(Snapshot)模块、boltdb模块。其中WAL可保障etcd crash后数据不丢失，boltdb则保存了集群元数据和⽤⼾写⼊的数据。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;读取数据&#xA;    &lt;div id=&#34;读取数据&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e8%af%bb%e5%8f%96%e6%95%b0%e6%8d%ae&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;etcd有两种读取数据的模式，分别是&lt;strong&gt;串行读&lt;/strong&gt;与&lt;strong&gt;线性读&lt;/strong&gt;，其中线性读是&lt;strong&gt;默认&lt;/strong&gt;的读取方式。再说读取数据之前先简单说明下写的流程。当client发起⼀个更新hello为 world请求后，若Leader收到写请求，它会将此请求持久化到WAL⽇志，并⼴播给各个节点，若⼀半以上节点持久化成功，则该请求对应的⽇志条⽬被标识为已提交，etcdserver模块异步从Raft模块获取已提交的⽇志条⽬，应⽤到状态机(boltdb等)。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
