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

↓ 向下滚动

一次线上 分库分表 故障的复盘记录

一次线上 分库分表 故障的复盘记录 背景 我们订单库是 4 库 × 4 表,按 userid 取模分片,中间件用的 ShardingSphere-JDBC。平时查询、更新都带 userid,上线快一年没出过大的幺蛾子。结果上周四下午,一个历史数据修复任务把整个订单库差点拖死。 故障现象 14:07 开始告警,订单查询接口大量 500,P99 直接拉满。应用日志里一片: 第一反应是数据库崩了?登上监...

阅读更多

从零实现一个简易的分库分表

从零实现一个简易的分库分表 最近一个老项目的订单表眼瞅着快 3000 万了,单表查询开始有点顶不住。本来想直接上 ShardingSphere,结果看了一眼配置,头有点大。干脆自己写一个简易的,先把分库分表这事儿跑通,后面再换中间件也不迟。下面是实测能跑通的版本,代码不复杂,但坑不少。 先把分片规则定下来 这里不搞太复杂,就按 userid 分。规则是: 也就是说,两个库,每个库两张表,一共 4 ...

阅读更多

从零实现一个简易的鉴权体系

从零实现一个简易的鉴权体系 最近在折腾一个小项目,本来只想加个登录功能,结果翻了翻现成的鉴权方案,要么是一整套 OAuth 流程,要么直接上 SSO、OIDC,配置文件和概念堆得比我整个项目的代码还多。然后我就想,算了,自己写一个吧,反正就是“注册、登录、证明你是谁”这三件事。 下面这套东西不是拿来上生产的,但它确实能跑,而且整个过程能让你把鉴权到底在干什么搞明白。我做的时候是用的 Node.js...

阅读更多

WebSocket 实时通信与 任务调度 应用

WebSocket 实时通信与 任务调度 应用 先说背景。前阵子给内部做了个任务平台,用户可以提交一批批处理任务,后台跑完再把结果推回前端。一开始图省事,前端直接 setInterval 每 5 秒拉一次 /api/tasks,接口压力倒还好,毕竟用的人不多,但是那个体验是真的难受——任务一多,表格里的状态就一卡一卡地跳,明明任务已经跑完了,前端还得等下一次轮询才能看见。更要命的是,任务执行过程中...

阅读更多

微服务架构下 灰度发布 的设计与权衡

微服务架构下 灰度发布 的设计与权衡 前阵子给订单服务做灰度,本来以为在网关配个权重就完事了,结果链路一深,问题全冒出来了。A服务灰度了,B服务没灰度,C服务又调了个旧版本,最后用户看到的页面一半新一半旧,日志里连这个请求到底走了哪个版本都查不出来。所以这篇不聊什么“灰度发布最佳实践”,就聊聊我踩过的坑和最后怎么权衡的,没准儿你们团队也正卡在某个点上。 入口灰度最容易,也最容易给人错觉 最开始我就...

阅读更多

Kubernetes 链路追踪 配置避坑指南

Kubernetes 链路追踪 配置避坑指南 先说结论:大部分问题不是链路追踪坏了,是配置没对上 我一开始以为链路追踪就是装个 Collector、加个 Agent,然后 Jaeger 里就能看到漂亮的时间线。结果真在 Kubernetes 里配下来,发现坑比想象中多。最难受的是,它不像 Pod 起不来那样直接报错,很多时候是“有数据,但链路断了”“有 trace,但服务名全是 unknownse...

阅读更多

机器学习入门:消息队列 数据预处理

机器学习入门:消息队列 数据预处理 最近给一个入门项目补数据管道,一开始我图省事,写了个脚本扫目录直接预处理,结果数据一多就卡在那儿,终端半天不动,我还以为代码写挂了。后来才发现,不是模型的问题,也不是 Python 的问题,是我把“读文件、解码图片、缩放、归一化、落盘”全塞一个循环里了,前面还没处理完,后面又不停往里灌。这个场景其实很适合把消息队列拉进来:生产端只管把“要处理哪张图”丢进队列,消...

阅读更多

性能优化手记:连接池 排查全过程

性能优化手记:连接池 排查全过程 事情是这样的,前几天晚上监控突然开始报警,某个服务的接口平均响应时间从 80ms 一路飙到 2 秒多,偶尔还夹杂几个 500。第一反应是数据库扛不住了?登录服务器看了一眼,CPU 正常,内存正常,慢查询日志里也没几个新面孔。 又过了几分钟,错误日志里开始冒 Cannot get a connection, pool error Timeout waiting fo...

阅读更多

Python 异步编程与 限流 实践

Python 异步编程与 限流 实践 最近在写一个批量拉接口数据的小工具,接口本身不算慢,但一上 asyncio.gather 把几百个请求同时甩出去,前几秒很爽,后面就开始 429,偶尔还给你来个连接超时。日志里一堆 Too Many Requests,看着就头大。后来才老老实实把限流加上,发现异步编程里“会并发”和“会控制并发”完全是两码事,下面把这次实践记一下,代码都是能直接跑的那种。 场景...

阅读更多

机器学习入门:热更新 数据预处理

机器学习入门:热更新 数据预处理 最近在折腾一个小模型服务,模型热更新倒是能用了,结果数据预处理这块卡住了。线上字段加了一个类别,预处理代码里的映射是训练时 fit 出来的,服务重启一次还能忍,但每次改映射都重启就太蠢了。于是想着能不能热更新预处理。一开始以为 watch 一下 yaml 重新加载就完事,结果发现这玩意儿坑不少,可能是我没找对姿势吧。 先说结论:预处理热更新不是 reload 一下...

阅读更多
未在播放