<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[foolishlee的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/foolishlee</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; foolishlee]]></copyright><item><title><![CDATA[Neon safekeeper任务]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/169460070</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/169460070</guid><author>foolishlee</author><pubDate>Fri, 30 Oct 2026 10:36:28 +0800</pubDate><description><![CDATA[静态变量定义），每个 runtime 运行在独立的 OS 线程池上，从而把 WAL 服务、HTTP 管理接口、Broker 通信、备份导出和后台维护任务彼此隔离，避免某一类任务阻塞影响其他关键路径。safekeeper 使用 5 个独立的 Tokio Runtime（通过。]]></description><category></category></item><item><title><![CDATA[Neon 租户数据分片]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/168636452</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/168636452</guid><author>foolishlee</author><pubDate>Wed, 21 Oct 2026 10:22:41 +0800</pubDate><description><![CDATA[其中compute 端（]]></description><category></category></item><item><title><![CDATA[Neon PageServer的gRPC和PageStream]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/168550778</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/168550778</guid><author>foolishlee</author><pubDate>Tue, 20 Oct 2026 14:36:27 +0800</pubDate><description><![CDATA[简单说：gRPC 是 pagestream 的新一代替代方案，功能等价但用 Protobuf + HTTP/2 重做了，预期性能更好、更易维护。3. Shard 路由：gRPC 通过 neon-shard-id header 指定，client_grpc/src/split.rs 自动拆分跨 shard 请求。// LSN 租约（防 GC）]]></description><category></category></item><item><title><![CDATA[Neon index_part.json]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/168549208</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/168549208</guid><author>foolishlee</author><pubDate>Tue, 20 Oct 2026 14:07:47 +0800</pubDate><description><![CDATA[每个 timeline 在对象存储里都有一个。]]></description><category></category></item><item><title><![CDATA[Neon Safekeeper 的多数派协议：自定义的 term-based quorum 共识]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/168450745</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/168450745</guid><author>foolishlee</author><pubDate>Mon, 19 Oct 2026 17:56:55 +0800</pubDate><description><![CDATA[Paxos 也用了 term/latchman 概念，但 safekeeper 的协议更接近「基于 proposal 的复制」而非经典 Paxos 的 prepare/accept 两阶段。自定义的 term-based quorum 协议，吸取了 Raft/Paxos 的思路但有自己的设计。]]></description><category></category></item><item><title><![CDATA[Neon compute GetPage]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/168250067</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/168250067</guid><author>foolishlee</author><pubDate>Sat, 17 Oct 2026 22:19:56 +0800</pubDate><description><![CDATA[2. LSN 语义：请求携带 (request_lsn, not_modified_since) 两个 LSN，primary 端 request_lsn=UINT64_MAX（最新），replica。│               nm_pack_request()      // 序列化（pq_send...）├─ prefetch_wait_for(ring_index)      // 阻塞等待响应。neon_read()  (PG≤16)                    // 单块读取。]]></description><category></category></item><item><title><![CDATA[Neon 组件连接]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/168134624</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/168134624</guid><author>foolishlee</author><pubDate>Fri, 16 Oct 2026 14:24:47 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[openGauss同步提交]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/167917322</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/167917322</guid><author>foolishlee</author><pubDate>Wed, 14 Oct 2026 17:08:22 +0800</pubDate><description><![CDATA[惊群问题：是的，有。2. 串行锁简化了状态机——只有"持有锁的那个人"需要关心 LSN 是否满足，其他人只是排队等锁，避免了多 backend 同时被唤醒后的竞争。1. PG 的 SyncRepQueue 机制是为单机设计的，在分布式架构下，多个 DN 之间需要同步协调，批量队列唤醒的语义不够清晰。│ 唤醒方式 │ 一次唤醒所有满足LSN的backend │ 只唤醒当前持锁的1个backend │。│ 并发等待 │ N个backend同时等latch │ 只有1个在等，其余阻塞锁 │。]]></description><category></category></item><item><title><![CDATA[SCRAM-SHA-256]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/166129397</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/166129397</guid><author>foolishlee</author><pubDate>Sun, 20 Sep 2026 13:59:47 +0800</pubDate><description><![CDATA[服务器：连接建立。]]></description><category></category></item><item><title><![CDATA[Rust 下载依赖包]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/165471151</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/165471151</guid><author>foolishlee</author><pubDate>Tue, 15 Sep 2026 13:44:00 +0800</pubDate><description><![CDATA[这步需要能访问 crates.io（和 git 仓库）。生成后会得到 Cargo.lock。会创建 vendor/ 目录（所有依赖源码）和 vendor.toml（映射表）。此时 cargo 不会联网，完全从 vendor/ 读取源码。]]></description><category></category></item><item><title><![CDATA[Neon 计算节点日志缓冲合并逻辑解析]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/164372590</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/164372590</guid><author>foolishlee</author><pubDate>Fri, 04 Sep 2026 17:15:32 +0800</pubDate><description><![CDATA[在。]]></description><category></category></item><item><title><![CDATA[Neon 计算节点启动报错exists already. please don‘t do this, it is not supported.]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/164362696</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/164362696</guid><author>foolishlee</author><pubDate>Fri, 04 Sep 2026 10:50:47 +0800</pubDate><description><![CDATA[根据代码分析，问题出在函数（），它检查是否存在同一上处于非Stopped状态的 endpoint。计算节点异常退出后可能留下了残留的文件，导致status()返回Crashed而非Stopped，从而触发冲突校验。]]></description><category></category></item><item><title><![CDATA[Neon proxy云端控制面]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/164262572</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/164262572</guid><author>foolishlee</author><pubDate>Tue, 01 Sep 2026 16:25:26 +0800</pubDate><description><![CDATA[调用 get_role_access_control → GET {base}/get_endpoint_access_control?endpointish=...&role=...- role_secret 是 SCRAM 格式的密码哈希（SCRAM-SHA-256$<iterations>:<salt>:<stored_key>:<server_key>）- cold_start_info 枚举值: warm / vm_pool_hit / vm_pool_miss / unknown。]]></description><category></category></item><item><title><![CDATA[openGauss xlog清理]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/164215351</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/164215351</guid><author>foolishlee</author><pubDate>Mon, 31 Aug 2026 14:31:23 +0800</pubDate><description><![CDATA[XLog 清理的唯一入口是 RemoveOldXlogFiles()（xlog.cpp:5404），在每次 Checkpoint 时调用。判断"哪些可以删"的逻辑集中在 KeepLogSeg()（xlog.cpp:14149），该函数计算最老的可保留 segment 号，比它更老的会被 RemoveXlogFile() 回收或删除。---一、全部影响因素1. wal_keep_segments 配置参数- 默认 16，范围 2~INT_MAX（guc_storage.cpp:2737）]]></description><category></category></item><item><title><![CDATA[Neon proxy and local_proxy]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/164209556</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/164209556</guid><author>foolishlee</author><pubDate>Mon, 31 Aug 2026 11:18:29 +0800</pubDate><description><![CDATA[local_proxy.rs → cargo run --bin local_proxy （精简版）--auth-backend postgres 和 --auth-backend local 啥区别。client ──SCRAM auth──▶ proxy ──转发流量──▶ postgres。client ──无认证──▶ proxy ──直接转发──▶ postgres。它直连你本地的 postgres，连接过来就直接转发，不做额外认证。不需要建任何 schema，不需要认证，适合开发调试。]]></description><category></category></item><item><title><![CDATA[openGauss postmaster退出流程]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/164148446</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/164148446</guid><author>foolishlee</author><pubDate>Fri, 28 Aug 2026 16:08:17 +0800</pubDate><description><![CDATA[/ 当前 PM 状态// 关机请求级别Shutdown 级别（由信号设置）：- SmartShutdown = 1（SIGTERM，等事务结束）- FastShutdown = 2（SIGINT，立即回滚事务）- ImmediateShutdown = 3（SIGQUIT，直接退出）PMState 状态机序列（正常关机）：---]]></description><category></category></item><item><title><![CDATA[Neon 扩缩容代码仓]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/164091457</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/164091457</guid><author>foolishlee</author><pubDate>Wed, 26 Aug 2026 16:33:42 +0800</pubDate><description><![CDATA[neonvm/apis/neonvm/v1/zz_generated.deepcopy.go —DeepCopy 方法。- neonvm/client/ —Go 客户端代码（clientset/informers/listers）- bin/controller-gen —CRD/WebView 代码生成。- bin/kind / bin/k3d —本地集群工具。- bin/setup-envtest —单元测试环境。- bin/etcd —测试用 etcd。- bin/yq —YAML 处理。]]></description><category></category></item><item><title><![CDATA[Neon Scale-to-Zero]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/163980888</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/163980888</guid><author>foolishlee</author><pubDate>Sat, 22 Aug 2026 21:32:32 +0800</pubDate><description><![CDATA[问题答案Scale-to-Zero 是什么？空闲时停止整个 compute Pod，有连接时再启动K8s 的作用？管理 Pod 的生命周期（创建/删除），提供 DNS 路由谁负责唤醒？Proxy 调用 Console API，Console 创建新 Pod去掉 Proxy 会怎样？Scale-to-Zero 无法工作，客户端无法自动找到新 Pod这不是一个纯技术取舍，而是 serverless 架构的核心设计：Proxy 是 scale-to-zero 的"扳机"，没有它就无法实现按需启停。]]></description><category></category></item><item><title><![CDATA[Neon proxy]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/163980474</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/163980474</guid><author>foolishlee</author><pubDate>Sat, 22 Aug 2026 21:00:00 +0800</pubDate><description><![CDATA[参数默认值作用调优方向到同一 compute 的并发连接限制高并发可调大 permitspermits=0（禁用）唤醒 compute 的并发限制如启用可调大4SCRAM 哈希线程数大量新连接时调大15sTLS 握手超时网络慢时调大连接 compute 重试策略可靠性参数wake_compute 重试策略可靠性参数endpoint 新连接限流压测时调大类似wake_compute 限流按需调整compute 地址缓存调大减少 cplane 调用endpoint 访问控制缓存。]]></description><category></category></item><item><title><![CDATA[Neon get_page(key, request_lsn)]]></title><link>https://blog.youkuaiyun.com/foolishlee/article/details/163886295</link><guid>https://blog.youkuaiyun.com/foolishlee/article/details/163886295</guid><author>foolishlee</author><pubDate>Wed, 19 Aug 2026 13:31:10 +0800</pubDate><description><![CDATA[但注意，如果当前请求的 LSN 本身就落到了 Image 层上或刚好在某个 Delta 层的范围内，那么只会读那个层就够了，不一定会"下潜"到更深的 Image 层——除非那个 key 在当前层没有记录。用 R-tree + 有序迭代器遍历 historic 层，找到所有覆盖该 key 范围的层，返回每个层的 (layer, lsn_floor, lsn_ceil)。image 层是 WAL redo 的起点（base state），delta 层的 WAL record 是增量修改。]]></description><category></category></item></channel></rss>