用 eBPF 观察容器网络丢包的基础实验步骤
用 eBPF 观察容器网络丢包的基础实验步骤 最近排查一个容器网络问题,应用侧说偶发超时,宿主机上看接口也没红,ss 里重传倒是有一些。想用 eBPF 看看包到底在哪儿没的,顺手把最小实验步骤记一下,免得下次又从零开始翻命令。 先说清楚,这个实验不是要复现某个特别复杂的生产故障,只是搭一个能稳定丢包的容器网络环境,然后用 bpftrace 去观察内核里跟丢包相关的事件。实验做完,至少能知道 kfr...
阅读更多用 eBPF 观察容器网络丢包的基础实验步骤 最近排查一个容器网络问题,应用侧说偶发超时,宿主机上看接口也没红,ss 里重传倒是有一些。想用 eBPF 看看包到底在哪儿没的,顺手把最小实验步骤记一下,免得下次又从零开始翻命令。 先说清楚,这个实验不是要复现某个特别复杂的生产故障,只是搭一个能稳定丢包的容器网络环境,然后用 bpftrace 去观察内核里跟丢包相关的事件。实验做完,至少能知道 kfr...
阅读更多PHP Laravel 队列任务超时与重试次数配置建议 队列这东西吧,刚开始用的时候觉得挺爽,扔进去就不用管了。等你哪天真出问题了,去看日志,发现任务莫名其妙被重试了七八次,或者一个任务卡在那儿把 worker 全占满,才知道超时和重试这俩参数是真的得好好调,不然坑你没商量。 我前阵子就踩过一回:一个导数据的任务,跑个三五分钟很正常,结果队列配置里 retryafter 小于任务实际耗时,任务还没...
阅读更多使用 Nuxt Server Routes 减少前端与私有 API 的重复代理 起因 手头有个 Nuxt 项目,后端是比较私有的 API,地址是内网 IP,不对外暴露。开发的时候在 nuxt.config.ts 里配一层 proxy,上线之后又在 nginx 里配一遍 location,两边的规则长得几乎一样,但就是得写两遍。后端说要把接口前缀从 /api 改成 /api/v2,我改完 nginx...
阅读更多后端接口限流:令牌桶、漏桶和滑动窗口实现对比 最近在给一个接口加限流,本来想着随便找个库糊上去完事,结果翻了几篇文章发现讲得都挺玄乎的,什么“令牌桶允许突发、漏桶恒定速率”,看完还是不知道代码该怎么写。索性自己把三种常见的实现都撸了一遍,顺便记一下踩过的坑,省得下次再翻。 先说清楚,这里聊的限流都是单机内存版的,分布式那种基于 Redis 的方案改天再单独写,不然一篇塞不下。 令牌桶:最常用的那个...
阅读更多用 Terraform 管理云资源时状态文件拆分与协作规范 Terraform 这玩意儿,一个人用的时候挺爽,apply 一敲,资源就起来了;一旦变成多人协作,最先出问题的往往不是模块写得烂,而是 state 文件没管好。我见过一个 state 里塞了网络、数据库、K8s、监控、IAM 的,plan 一次要等好几分钟,两个人同时改还得抢锁,最离谱的是有次误删了一个安全组,结果半个环境跟着遭殃。所以...
阅读更多Rust 项目中错误类型转换与上下文信息的组织方式 先说为什么开始较真这件事 最早写 Rust,我的错误处理基本就是两招:能 unwrap 就 unwrap,不能就 .maperr(|e| e.tostring())?。项目小的时候毫无问题,毕竟报错的时候日志里好歹有一行字符串。等到服务上线,半夜被叫起来看日志,看到一句 No such file or directory,然后就没了——哪个文件?...
阅读更多大型 Monorepo 中增量构建缓存策略与常见问题 前阵子我们一个 Monorepo 的 CI 时间突然从 40 多分钟掉到了 8 分钟,大家一开始还挺开心,结果某次发版后首页直接白屏。查了半天,发现是构建缓存命中了,但缓存里的 NEXTPUBLICAPIURL 还是旧环境的值。从那以后我就明白一件事:增量构建缓存最难的从来不是“开个缓存”,而是你到底能不能说清楚,什么变了、什么没变、什么输出还...
阅读更多用 Apache Kafka 处理重复消息时幂等写入的设计 Kafka 说它保证“至少一次”,很多人第一眼看到这句话就默认消息不会丢,然后顺手把“重复”这件事交给下游数据库的唯一索引去扛。真到线上跑一阵子才发现,唯一索引只能挡住完全一样的主键,挡不住“业务上已经处理过两次”的情况。尤其是消费端先查后写、或者写库成功但提交 offset 失败的时候,重复消息一定会来,不是概率问题,是时间问题。 先说...
阅读更多用 Caddy 为本地开发服务自动配置 HTTPS 证书 起因 本地开发的时候,HTTP 其实大部分时候够用,但总有几个东西卡在 http://localhost 上不给面子。比如 Service Worker,比如 navigator.clipboard,比如某些需要 Secure Context 的 Web API,再比如后端设了 SameSite=None 的 Cookie,到了本地就直接被...
阅读更多MongoDB 分片键选择对读写分布和查询性能的影响 先把结论说在前面 分片键不是建集合时随手填的一个参数。它基本决定了三件事:写入会落到哪些分片、查询是只找一两个分片还是把整个集群扫一遍、后面 chunk 怎么分裂和迁移。选得好,集群加机器就能跟着扛;选得不好,数据是分散了,但热点、广播查询、jumbo chunk 一个都不会少。 我一开始也把分片键当成“能分就行”的东西,后来被监控图教育了。下...
阅读更多