Go HTTP 连接池调优:避免隐性端口耗尽

背景 这类问题在真实项目里很常见:高并发、复杂依赖、发布频繁、团队协作面广。只有把边界条件提前定义清楚,系统才会在压力下保持稳定。 实践要点 先定义目标:可用性、延迟、成本哪个优先。 把关键路径显式化:超时、重试、降级、回滚。 把策略写进代码和流程,而不是只停留在文档。 代码片段 ctx, cancel := context.WithTimeout(ctx, 200*time.Millisecond) defer cancel() err := client.Call(ctx) if err != nil { return err } 总结 工程实践最怕“看起来正确”。把策略做成可观测、可验证、可回滚的闭环,才能在生产环境里真正稳定运行。 稳定性不是某个技巧,而是持续的系统化约束。

2026年5月23日 · 1 分钟 · BvBeJ

io_uring 高吞吐下的背压设计:别让 SQ/CQ 成为黑洞

问题不在快,而在失控 很多 io_uring 服务在压测里吞吐漂亮,线上却出现尾延迟飙升。根因通常是提交队列无限推进,完成队列消费跟不上。 背压触发条件 SQ ring 使用率超过 80%。 CQ backlog 持续增长。 业务层处理耗时超过 IO 完成速率。 建议的三层背压 提交层:限制 in-flight 请求上限。 协程层:队列超阈值时暂停新任务调度。 入口层:对上游返回 retry-after 或降级响应。 伪代码 if (inflight > max_inflight || cq_backlog > cq_limit) { pause_accept(); shed_low_priority(); } while (io_uring_peek_cqe(&ring, &cqe) == 0) { handle_cqe(cqe); io_uring_cqe_seen(&ring, cqe); } 关键指标 submit_to_complete_latency cq_backlog inflight shed_count 小结 io_uring 的上限很高,但系统稳定性的上限由背压机制决定。先把“慢下来也不爆炸”做对,再追求“快”。

2026年5月1日 · 1 分钟 · BvBeJ

C++ 网络模型:Reactor 与 Proactor 怎么选

背景 高并发网络服务里,Reactor 和 Proactor 是两个绕不开的模型。 很多争论其实都在混淆一个问题: 你是在等“就绪事件” 还是在等“异步操作完成事件” 核心差异 Reactor 内核告诉你哪个 fd 就绪 业务线程自己 read/write Proactor 业务先发起异步 IO 内核完成后通知你结果 在 Linux 常规栈里,很多框架本质上还是 Reactor;在 io_uring 这类能力更强的接口下,Proactor 风格更容易落地。 简化示意 // Reactor 风格:事件到达后主动读 void onReadable(int fd) { char buf[4096]; ssize_t n = ::read(fd, buf, sizeof(buf)); if (n > 0) { handleRequest(buf, n); } } // Proactor 风格:提交后等待完成回调 void submitRead(Connection* c) { io_uring_prep_read(c->sqe, c->fd, c->buf, c->cap, 0); } void onReadComplete(Connection* c, int res) { if (res > 0) { handleRequest(c->buf, res); } } 选择建议 现有生态以 epoll 为主:优先 Reactor 追求极致吞吐且能接受复杂度:考虑 Proactor/io_uring 团队经验不足时,别为“更先进”盲目迁移 总结 模型没有绝对优劣,只有场景匹配。 ...

2026年4月25日 · 1 分钟 · BvBeJ

Linux 网络 IO:epoll 与 io_uring 选型笔记

先说结论 多数业务服务里,epoll 依然是稳妥选择。io_uring 在某些高并发 IO 场景能更快,但复杂度也更高。 epoll 的优势 生态成熟,排障资料多 编程模型稳定 与现有网络库兼容性好 对于大部分 API 服务,epoll 足够用。 io_uring 的价值点 减少系统调用次数 提升批量提交与完成处理效率 在特定负载下降低延迟 但它要求你理解提交队列、完成队列、内核版本差异等细节。 选型建议 先压测当前 epoll 方案,定位真实瓶颈 若瓶颈明确在 IO 提交/完成路径,再评估 io_uring 预留回退方案,避免一次性全量切换 团队视角 技术选型不只看 benchmark,还要看: 团队掌握程度 线上问题可定位性 长期维护成本 小结 新能力值得关注,但架构决策应以稳定收益为中心。对大多数团队来说,逐步引入比激进替换更现实。

2026年4月25日 · 1 分钟 · BvBeJ