ZooKeeper: 不发钥匙, 改立公告板的协调服务
📝 术语别名
handle: Chubby 里 client open 一个 path 后拿到的, 绑定 session 的远程对象引用; 不是 session 本身, 是 session 内部的一个对象级句柄;
znode: ZooKeeper 状态树上的一个节点, 既能当目录又能存一小坨 data, 带 version;
ephemeral / sequential: 临时节点 (session 一断自动删) / 顺序节点 (创建时由 ZK 追加一个全局单调的编号), 选主 recipe 的两块积木;
Zab: ZooKeeper Atomic Broadcast, ZK 内部的 leader-based 原子广播协议, 跟 Paxos / Raft 同级但不是同一个;
A-linearizability: ZooKeeper 自己定义的一致性, 写线性 + 同一 client 的请求按发送序进入全局顺序 (per-client FIFO);
wait-free: 一个 client 可以同时挂多个 in-flight 请求, 不用等上一个回包就发下一 ...
Effective context engineering for AI agents
[!术语速查 / 黑称]
context: 从 LLM 采样时塞进窗口的那一整坨 token —— system prompt, tools, MCP, 外部数据, message history 全算在内;
attention budget: 模型的 “注意力预算”, 每多塞一个 token 就从里面扣一点, 不是免费的;
context rot: context 越长, 模型越记不住前面说过啥 —— “上下文腐烂”, 每个模型都有这毛病;
just-in-time: 不在 inference 前把数据全嚼碎喂进去, 而是让 agent 攥着轻量标识 (文件路径, query, 链接), 运行时按需 拉回 数据;
progressive disclosure: agent 靠探索一点点把相关 context 挖出来 —— 文件大小暗示复杂度, 命名暗示用途, 时间戳暗示新鲜度;
compaction: context 快满时, 把对话 压 成摘要, 拿摘要开一个新窗口接着跑;
前置直觉: 为什么 context 越长反而越笨
先讲个最朴素的画面: 人塞太多东西进脑子也会断片; ...
0. 分布式系统编年史: 2000-2020
这二十年其实是同一个故事在反复上演: 数据先撑爆了存储和计算, 然后撑爆了数据库, 接着业务拆成微服务又撑爆了运维; 每一次"撑爆"都把某家公司摁在地上摩擦, 而它们挣扎着爬起来时顺手造的那个轮子, 转头就成了全行业的地基; 这篇严格按时间从上往下串成一个故事, 每个轮子只记三件事: 哪年、谁家、被啥需求逼的; 它同时也是 ds/ 这一摞笔记的索引页, 相关的都挂了内链;
一张总图先压个轴, 后面分幕细讲 (主线是后台基建, 另有"可靠性"和"前台 Web"两条副线, 放在最后单讲):
12345678910111213141516171998 ─ VMware 虚拟化: 一台物理机切成多台 VM, 是多租户云的前提2003 ─ GFS / Xen Google 在会坏的廉价磁盘上存 PB / 开源虚拟化2004 ─ MapReduce / nginx 普通工程师也能并行算 PB / nginx 解决 C10K 高并发2006 ─ Bigtable·Chubby·AWS·Hadoop 结构化存储·协 ...
Google Chubby: 解耦控制数据平面的分布式锁系统
📝 术语别名
cell: 一个故障隔离单元, 通常 1 master + 5 replica;
coarse-grained lock: 粗粒度锁, 持有时间小时/天级 (典型如"我是这个集群的 master"), 跟毫秒级临界区互斥的 fine-grained lock 相对;
advisory lock: 建议锁, 系统不强制, 靠"守规矩的应用"自觉遵守;
safety / liveness: 安全性(“坏事永不发生”, 比如绝不脑裂) / 活性(“好事最终发生”, 比如最终能达成决定);
论文定位
Mike Burrows, “The Chubby lock service for loosely-coupled distributed systems”, OSDI 2006, Google;
这不是一篇推公式的理论论文, 而是一篇工程经验总结: Chubby 在 Google 内部已经给 GFS、Bigtable 这些大家伙撑了好几年选主了, 所以全文都是踩坑之后的反思, 读它的正确姿势是" ...
etcd: 把 Raft 包装成 k8s 的事实数据源
📝 术语别名
etcd: 一个分布式、强一致、高可用的 KV 存储, 底层用 Raft 做共识, Go 写的, 现属 CNCF, 是 k8s 唯一的事实数据源 (source of truth);
revision: etcd 集群级、全局单调递增的版本号, 每次成功的写/事务 +1, 是整个 keyspace 的"全局时钟";
MVCC: Multi-Version Concurrency Control, 多版本并发控制, 写不覆盖旧值而是生成新版本, 让读写互不阻塞;
Watch: 订阅某个 key/区间从指定 revision 起的变更, 按序、不丢地推给客户端;
Lease: 带 TTL 的 key, 客户端要不断续约 (keepalive), 断了自动删, 拿来做心跳/选主;
Txn: etcd 的迷你事务, If/Then/Else, 本质是基于 revision 的 CAS (compare-and-swap);
compaction: 压缩, 丢弃某 revision 之前的历史版本来回收空间, 压缩点同时也是 Wat ...
Vpn from WireGuard Impl — 从论文批判到 Go 手写隧道
这篇把两段东西并在一起读:
上半场(理论与动机) 是读 WireGuard 论文(NDSS 2017)整理出来的——VPN 三代演进、论文怎么把 IPsec 当反派批判、为什么 VPN 必须走 UDP、为什么 Go 也能写出一个完整 VPN;
下半场(动手实现) 是顺着这套理论真正写起来的个人项目 mini-vpn-go(用户态 VPN,从零手写、逐 phase 演进,最终对标 WireGuard),目前跑通到 Phase 2 的明文 IP-in-UDP 隧道。
源码:~/Desktop/tun_example/phase2/(仓库名是 tun_example,但 Go module 是 github.com/1WesleyYou/mini-vpn-go)。
一、理论与动机
VPN 史前简介
VPN 这个名字里的 virtual 来自 1990 年代企业的实际诉求, 当时跨地办公要靠租用专线, 业界想用便宜的公网 Internet 模拟出专线效果, virtual 是说虚拟出一根原本要靠物理拉线才有的专网;
接下来 30 年里, VPN 的主流协议大致经过三代:
IPsec ( ...
Tree of Thought: 不再是 left-to-right 单向思维架构
📝 概念别名
thought: 一个"思考单元", 不是单 token, 也不是一整道解, 而是介于两者之间的中间步骤;
state sss: 输入 + 当前已有的 thought 序列 [z1,z2,…,zi][z_1, z_2, \dots, z_i][z1,z2,…,zi];
thought generator G(pθ,s,k)G(p_\theta, s, k)G(pθ,s,k): 在 state sss 下产生 kkk 个候选下一步 thought;
state evaluator V(pθ,S)V(p_\theta, S)V(pθ,S): 给一组 state 打分, 用来指导搜索;
为什么需要 Agent Planning
单纯 CoT 把推理当作"一条链", 一旦中间某一步走错就没机会回头, 也没法在多个候选方案之间挑最好的; 对于需要 explore, lookahead, backtrack 的任务 (数学求解, 写作规划, 字谜填空), 我们需要让 LM 不止一次地, 沿着多条路径思 ...
0. 从 Minimax 到 MCTS - 经典博弈树搜索基础
📝 博弈树搜索黑称
game tree (博弈树): 把所有可能走法画成的有根树, 每个 node 是 state, 每条 edge 是 action
zero-sum game: 一方 gain = 另一方 loss, 两边目标完全对立
Minimax: 假设对手最优时自己能保证拿到的最佳 outcome
Alpha-Beta Pruning: Minimax 的剪枝加速版
MCTS (Monte Carlo Tree Search): 用随机采样 + 统计估计替代完整树搜索
UCT (Upper Confidence bounds for Trees): MCTS 的 Selection 阶段公式
rollout / playout / simulation: 从 leaf 出发 random play 到终局, 拿 1 个 noisy sample
Markov property: 给定当前 state, 未来跟历史无关 — MCTS / minimax 都依赖这个
为什么要写这一篇
读 LATS (Language Agent Tree Sea ...
Unix 电源管理
状态机心智模型
任何 sleep / lock / logout / hibernate 操作, 本质都是在调 4 个开关的不同组合; 判断"这个操作干了什么"只要看这 4 件事:
用户进程还在不在? (Chrome, IDE, SSH 连接是否还活着);
CPU 还在不在执行指令?;
RAM 还通不通电?;
磁盘上有没有内存镜像? (用来还原的);
对照表 (从轻到重)
操作
用户进程
CPU
RAM
磁盘镜像
唤醒/恢复
功耗
典型场景
熄屏 (DPMS)
跑
跑
通电
—
瞬间 (动鼠标)
省 ~10W (只关显示器)
短暂离开几分钟
锁屏 (lock)
跑
跑
通电
—
输密码
同平时
离开座位防别人乱碰
Suspend (S3 / s2idle)
冻结
停
自刷新通电
—
1-3s
电池 1-3%/小时
合盖, 临时离开
Hibernate (S4)
冻结
停
断电
整块写到 swap
10-30s
0
过夜, 长时间不用
Hybrid sleep
冻结
停
通电
同时写盘
RAM 没掉就秒开, 掉了从盘恢复
1-3%/小 ...
ReAct + Reflexion - Reasoning Acting and Verbal Reinforcement Learning
[!联读黑称 / 术语速查]
ReAct 协议:
thought: 模型自言自语写出的 reasoning trace, 不出现在环境里
action: 模型对外发出的工具调用 / 环境指令, 会被执行
observation: 工具或环境返回给模型的下一段输入
trajectory: thought →\rightarrow→ action →\rightarrow→ observation →\rightarrow→ thought →\rightarrow→ … 的整条交替序列
act-only: 没有 thought, 只对外发 action 的 baseline (WebGPT, SayCan 那一派)
CoT-only: 全程在脑子里推, 不调外部工具的 baseline (Wei et al. 2022)
Reflexion 协议:
Actor: 真正生成 action 的 policy LM, 在 Reflexion 实验里基本就是套了一层 ReAct 协议的 GPT
Evaluator: 产生 reward signal 的判官, 可以是 ground-tru ...
