笃行
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
  • 接入与通信

    • 游戏基础架构与工具
    • 接入网关(长连接接入层)
    • 消息总线(共享内存 IPC)
    • 帧同步(Lockstep)
    • 全栈极限低延迟(物理层→应用层)
    • KCP 与 QUIC
  • 网络与服务网格

    • CNI 与 K8s 网络插件
    • 容器运行时:Docker 与 containerd
    • Istio 与 Cilium 服务网格
    • 服务网格:中心化 vs 去中心化
    • eBPF 原理与在网络/可观测/安全的落地
    • 自研 Mesh 服务网格 × K8s 部署
    • 自研 Mesh × K8s · 数据面深水区
    • Tco 协程框架 · 运行时深水区
    • K8s 异构 & 网络插件
  • 有状态服务

    • 分布式游戏存储(分布式 KV)
    • 有状态服务的数据迁移
    • 有状态服务的数据恢复与容灾
    • 有状态服务的 K8s 编排层治理(防漂移 + 节点崩溃恢复)
    • 内存配置热刷新与更新机制
  • 算法与协程

    • 一致性哈希四算法实现(Ring Hash / Ketama / Maglev / Jump Hash)
    • 蓄水池抽样(Reservoir Sampling)与加权扩展
    • C++ 协程:有栈 vs 无栈 vs C++20 原生(函数染色与 libco)
    • Raft 与 Gossip:CP 强一致共识 vs AP 最终一致传播
  • 流量与承载

    • 游戏秒杀场景承载
    • 令牌桶与漏桶
    • 限流与熔断
    • 限流:互联网 vs 游戏
    • 灰度发布 · Canary / BlueGreen / A-B / Shadow
    • 服务器日常系统开发与维护 SOP
    • 极限发压工具设计(多长连接 + 发压任务)
    • 性能分析与优化方法论(六条排查线)
  • 编译与排查

    • 编译优化与 LLVM/Clang/GCC
    • Sanitizer 工具链与内存泄漏定位

self-mesh-k8s — 闪卡

用 O(N) 全连接换 O(1) 单跳收敛,靠数字 ID + hostNetwork 撑起万级有状态直连。

记忆口诀

拓扑:全连接 / 单跳广播 / O(N)换O(1)
部署:DaemonSet / hostNetwork / 跳出Overlay
性能基石:数字ID / Jump Hash / calc_connect / 水库抽样32
一致性:立即广播 / 一致性HASH / 3次重试 / 面板对账

Card 1

Q: 自研 Mesh 的心跳广播和 Gossip 到底是不是一回事?它们的取舍方向有什么本质区别?

A: 是 gossip 家族的退化特例,但不是教科书 SWIM。代码是全连接网格 + 单跳全量广播:收包只更新本地路由表、不再转发,组包只装本机实例,且砍掉了 incarnation/间接探测。Gossip 用 O(W) 连接换 O(log N) 跳数;自研 Mesh 把 fanout 拉满,用 O(N) 连接换 O(1) 收敛跳数,取舍方向恰好相反。(逐行代码与砍掉的 SWIM 组件见 Raft & Gossip · tmesh 实战)

Card 2

Q: 为什么全互联下连接数还能均衡?calc_connect 怎么决定"谁主动连"?

A: TCP 全双工,两节点只需 1 条链路。朴素"大 IP 连小 IP"会让连接数极度倾斜。calc_connect 用 IP 末位 bit 异或的公认随机值:异或值双方算出必然一致且 0/1 各 50% 均匀。实测 5000 节点最大连接差仅 0.37%。

Card 3

Q: 业务 Pod 是怎么连到本机 mesh 的?为什么不用 UDS?

A: 靠 hostNetwork + hostIP 注入:mesh DaemonSet 监听宿主机 0.0.0.0:8000,业务经 Downward API 拿到 HOST_IP,用 HOST_IP:8000 直接命中本机 mesh,流量不走 Overlay。本机 msc 接业务走的是消息总线共享内存 channel,不是 UDS。

Card 4

Q: 对比 Sidecar 与 DaemonSet 两种部署模型,为什么放弃 Sidecar?

A: Sidecar:每 Pod 一个 mesh,多 Pod 互联单实例近 1GB 内存,10 Pod 节点要 10GB,且 K8s 网络组件频繁异常。DaemonSet:一机一 mesh 所有 Pod 共享,连接数大幅收敛、内存/CPU 省、用主机网络跳出 Overlay。故弃 Sidecar 用 DaemonSet。

Card 5

Q: 第一版基于 Consul 为什么撑不住?第二版提出了哪些根本性需求?

A: Consul 痛点:超 300 实例数据重复、100+ 服务同时 Watch、5000 实例每次变更解析 5~8 秒、节点上限 5000、2021 官方停中国区支持。第二版需求:去中心化 · 万级节点 · 自动注册剔除 · 云主机转发性能 · 异构混部 · 可定制路由。

最近更新: 2026/9/10 11:38