小Cの已经记不起来的博客

↓ 向下滚动

Python 异步编程与 优雅停机 实践

Python 异步编程与 优雅停机 实践 起因 前阵子写了个基于 asyncio 的消费服务,从队列里拿任务、处理、写库,平时跑得好好的。直到有一天更新部署,习惯性 docker compose restart 下去,服务是重启了,一查数据库发现好几条记录状态停在中间,消息队列里还躺着一堆 unacked 的消息等着重投,等于这批活儿白干了。 最早我还试图自救过一把,在信号处理里直接 loop.s...

阅读更多

Rust 所有权模型与 蓝绿部署 的思考

Rust 所有权模型与 蓝绿部署 的思考 最近同时在干两件看起来毫不相关的事:下班啃 Rust,上班给公司一个老服务从滚动发布改成蓝绿部署。本来以为一个语言特性、一个发布策略,八竿子打不着,结果越做越觉得它们在讲同一件事:一个资源同一时刻只能有一个所有者,交接必须显式,不能靠猜。 先说 Rust 那边 Rust 里每个值都有明确的所有者,赋值默认是 move 而不是 copy,旧的变量移交之后就失...

阅读更多

React 项目中 消息队列 的设计取舍

React 项目中 消息队列 的设计取舍 最近在改公司的客服聊天模块,踩了一堆坑。起因很简单:测试提了个 bug,说快速发消息的时候偶尔会出现自己发的两条消息顺序颠倒,还有小概率某条消息直接消失。我第一反应是不可能,socket 本身是有序的啊。结果排查了两天发现,socket 确实有序,但消息从 onmessage 到 setState 再到渲染,中间被我们自己的代码搅得一塌糊涂。说白了,项目里...

阅读更多

Nginx 反向代理 灰度发布 配置详解

Nginx 反向代理 灰度发布 配置详解 最近公司项目要上灰度发布,本来想着找个现成的网关方案,什么 K8s + Istio 之类的,结果一算成本和复杂度,算了,咱们这小体量,Nginx 自己配一下就够了。折腾了两天,踩了几个坑,把实测可用的方案记录一下,免得下次又忘了。 什么是灰度发布 简单说就是新版本代码部署上去之后,不是一刀切把所有流量都切过去,而是先放一小部分用户(比如 5%)到新版本上,...

阅读更多

从零实现一个简易的优雅停机

从零实现一个简易的优雅停机 前段时间部署服务的时候遇到一个很烦的问题:每次发新版,kill 掉旧进程的瞬间,正在处理的请求直接被掐断了,客户端那边时不时收到连接被重置的报错。一开始还以为是网络问题,排查了半天才发现,就是停机的时候太粗暴了。所以这次干脆花点时间,自己动手实现一个简易的优雅停机,顺便把过程记录下来。 什么是优雅停机 简单说就是:进程收到退出信号后,不再接收新的请求,但是把手头正在处理...

阅读更多

React 项目中 日志采集 的设计取舍

React 项目中 日志采集 的设计取舍 起因是上个月线上出了个事儿,有个用户反馈说点提交按钮没反应,我让他打开控制台截图发过来,好家伙,一排红色的 Unhandled Rejection。可我自己这边怎么都复现不了,翻了半天代码才反应过来,那块逻辑在 try/catch 里把错误吞了,只打了个 console.error,而生产环境的 console 早就被构建脚本干掉了... 那一刻我才意识到...

阅读更多

Rust 所有权模型与 连接池 的思考

Rust 所有权模型与 连接池 的思考 最近在用 Rust 重写一个老项目,里面有个场景是要频繁读写数据库,自然就绕不开连接池这个东西。用的时候突然意识到,连接池这个概念在 Rust 里面变得特别有意思,跟我在 Go 或者 Java 里用连接池的心路历程完全不一样,索性写篇文章记录一下。 先说说所有权模型这件事 Rust 的所有权模型,说白了就三条规则:每个值都有一个所有者,同一时刻只能有一个所有...

阅读更多

Kubernetes 限流 配置避坑指南

Kubernetes 限流 配置避坑指南 起因:本来想防刷,结果把自己刷趴了 前阵子有个对外的接口被人拿脚本刷,半夜告警响个没完,寻思着在 Ingress 上配个 nginx.ingress.kubernetes.io/limit-rps 就完事了,阈值还特意设得挺宽裕。结果上线十来分钟,服务大面积 503,pod 接连重启,用户骂声一片。限流明明是用来保护服务的,怎么先把自家服务干趴了? 排查下...

阅读更多

深入理解 Linux 服务发现 的工作机制

深入理解 Linux 服务发现 的工作机制 前几天把家里一台吃灰的旧笔记本装了 Debian,打算当个小服务器用。装完系统配好 ssh,我在另一台机器上随手敲了个 ssh user@debian.local,居然直接就连上了。当时有点懵,因为我压根没配 DNS,/etc/hosts 里也没加过东西,这名字是哪来的?后来顺着查了一圈资料才发现,背后是 mDNS 和 DNS-SD 这两套协议在撑着,也...

阅读更多

用 Docker 搭建鉴权体系的完整流程

用 Docker 搭建鉴权体系的完整流程 家里服务器上跑的自托管服务越来越多,Gitea、Vaultwarden、qBittorrent,之前每个都是各管各的账号密码,有两个甚至直接裸奔在公网上,每次想起这事心里都有点发毛。本来想图省事,在每个应用前面套一层 Nginx Basic Auth,用了一阵发现体验稀碎,qb 的本地客户端压根不认这套东西。后来研究了一圈,决定上 Authelia 配合 ...

阅读更多
未在播放