Go mod 好菜系列 - 0x1A etcd/clientv3 这口分布式协调菜别只会 put 和 get

详细聊 etcd/clientv3 在配置、选主、租约和分布式协调里的常见用法,为什么 watch 与 lease 很关键,以及它和普通 KV 存储不是一回事。

很多人第一次接触 etcd,会把它理解成“一个更可靠点的 KV 数据库”。这个理解不能说全错,但非常不够。真正在项目里常用到它时,你会发现它更像一块分布式协调地基,而不是拿来随便存业务数据的抽屉柜。

etcd/clientv3 常见在干嘛

  • 配置动态监听
  • 服务注册信息存储
  • 分布式锁
  • 选主与租约
  • 协调类元数据管理

这几件事有个共同点:它们都更偏“系统状态协同”,而不是普通业务记录。

为什么不能把它当普通 KV

因为 etcd 的优势并不在“便宜地存很多业务数据”,而在于它对一致性、变更监听、租约和协调语义的支持。你如果拿它去存一堆高频业务明细,大概率会把最有价值的部分浪费掉。

watch 为什么这么重要

因为很多场景要的不是“我现在查一下值”,而是“只要值变了你立刻告诉我”。这就是动态配置、路由更新、服务状态变化能成立的基础。

项目一旦开始需要“感知变化”,轮询就会越来越笨,watch 的价值就出来了。

lease 又是在解决什么

租约本质上是在表达一种“临时有效”的状态。比如一个实例注册了自己,只要它持续续租,就说明它还活着;一旦续租断了,这条信息就自然过期。

这种机制对服务注册、选主和临时会话状态都非常有用。

watch 和 lease 的最小示例

cli, err := clientv3.New(clientv3.Config{
    Endpoints: []string{"127.0.0.1:2379"},
    DialTimeout: 5 * time.Second,
})
if err != nil {
    log.Fatal(err)
}

leaseResp, err := cli.Grant(context.Background(), 10)
if err != nil {
    log.Fatal(err)
}

_, err = cli.Put(context.Background(), "/service/user-api/1", "10.0.0.12:8080", clientv3.WithLease(leaseResp.ID))
if err != nil {
    log.Fatal(err)
}

watchCh := cli.Watch(context.Background(), "/service/user-api/", clientv3.WithPrefix())
for resp := range watchCh {
    for _, ev := range resp.Events {
        fmt.Println(ev.Type, string(ev.Kv.Key), string(ev.Kv.Value))
    }
}

把 watch 和 lease 放在一起看,etcd 的协调味道就出来了。它不是单纯存一条记录,而是在表达“谁活着、谁变化了、变化何时发生”。

它最容易让人踩坑的地方

  • 把业务数据也全塞进去
  • 只会 put/get,不会 watch/lease
  • 没有处理好连接抖动和重连
  • 把分布式锁当成万能灵药

尤其是分布式锁,很多时候你以为自己在“严谨控制并发”,实际上是在给系统加一个更难排障的新脆点。

什么时候它很值得引入

  • 系统里已经出现动态配置和协调需求
  • 你需要可靠的 watch 机制
  • 你确实有租约、会话、选主这类需求

如果只是想找个地方存几个开关值,甚至 Redis 都可能更省心。别为了“分布式系统味道”过早上 etcd。

小结

etcd/clientv3 这口菜要学的是协调思维:

  • 它更像分布式协调底座,不是普通业务 KV
  • watch 和 lease 是真正高价值能力
  • 适合动态配置、选主、注册和临时状态管理
  • 分布式锁要谨慎上,不要把它当万能钥匙

Read more

Harness Engineering:从驾驭模型到构建 AI 工厂

Harness Engineering:从驾驭模型到构建 AI 工厂

2026 年,AI 编程工具的竞争焦点发生了根本性转变:决定 AI 助手好不好用的,不再是模型本身,而是包裹在模型外面的那层"Harness"。同一个模型,在不同的 Harness 下,性能差距可以达到 78% vs 42%。 这篇文章将带你深入了解 Harness Engineering——这个正在重新定义 AI 工程实践的新兴领域。 一、什么是 Harness Engineering? Harness 的字面意思是"马具/缰绳"——用来驾驭一匹强壮但不受控的马。在 AI 语境下,Harness 就是 LLM 之外的一切:工具定义、记忆系统、权限模型、反馈循环、文档规范、多

By Fuyu Jia

Claude Code CLI + Ralph:让 AI 自动完成大型编程任务的终极方案

TL;DR 当你的编程任务大到一个 AI 对话窗口装不下时,Ralph 会帮你把任务拆成小块,让 Claude Code CLI 一个接一个地自动完成——每轮都用全新的上下文窗口,不会越写越糊涂。 一、什么是 Ralph? Ralph 是一个开源项目(GitHub 16k+ Stars),基于 Geoffrey Huntley 提出的 "Ralph Pattern" 构建。它的核心理念很简单: 不要让 AI 在一个漫长的会话里做完所有事情,而是把大任务拆成小故事,每个故事用一个全新的 AI 实例来完成。 这解决了 AI 编程中最常见的痛点——上下文窗口耗尽。当对话越来越长,AI 的输出质量会明显下降。Ralph 通过「每轮一个新实例」的方式,

By Fuyu Jia