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

↓ 向下滚动

用 Docker 搭建熔断的完整流程

用 Docker 搭建熔断的完整流程 起因 前阵子家里服务器上的一个小组件莫名卡死,结果把上游服务的线程全占满了,连带整个站都刷不出来,排查半天才定位到是下游接口拖累的。这种一颗老鼠屎坏一锅粥的事情,理论上早就该有熔断来兜底,只是一直懒得折腾。这次趁着重搭环境,干脆用 Docker 把整套东西完整跑了一遍,顺便记录下来。 熔断的原理一句话就能说清:上游调下游的时候,如果一段时间内失败的比例太高,就...

阅读更多

Redis 缓存穿透、雪崩与 限流

Redis 缓存穿透、雪崩与 限流 前几天线上服务半夜报了一波警,爬起来看监控,发现数据库连接数直接被打满了,慢查询一大堆。奇怪的是 Redis 明明就架在那儿,怎么请求还全跑到数据库去了?翻了半天日志才搞明白,是有个接口被爬虫盯上了,拿一堆不存在的 id 在那儿疯狂请求,这就是典型的缓存穿透。趁着记忆还热乎,把这次踩的坑一起整理一下。 缓存穿透:查的数据根本不存在 正常流程大家都会写,先查缓存,...

阅读更多

链路追踪 的十种打开方式:工程实践笔记

链路追踪 的十种打开方式:工程实践笔记 前阵子线上一个下单接口偶发超时,用户把报错截图甩过来,我翻了半个多小时日志,订单服务一段、库存服务一段、支付服务一段,各写各的,中间是怎么串起来的全靠猜。最后定位到是库存服务里一条慢 SQL,但它跟下单接口隔了两层调用,日志里死活看不出关系。痛定思痛,花了一个多星期把 OpenTelemetry 接上了,顺手把踩过的坑记下来,凑成十种打开方式,权当工程笔记....

阅读更多

Rust 所有权模型与 链路追踪 的思考

Rust 所有权模型与 链路追踪 的思考 最近在给一个 Rust 写的后端服务加链路追踪,选型没什么好纠结的,tracing + opentelemetry 这一套基本就是标配。本来以为照着文档抄抄配置半天就能完事,结果被 span 的各种"不生效"折腾了两天。折腾完回头看,突然发现这事儿跟 Rust 的所有权模型其实是一回事,想明白这一点之后,之前那些别扭的地方就都顺了,记一下。 一切都要从那个...

阅读更多

Git 工作流中的 分布式锁 最佳实践

Git 工作流中的 分布式锁 最佳实践

阅读更多

从零实现一个简易的蓝绿部署

从零实现一个简易的蓝绿部署 前几天半夜给服务发新版本,systemctl restart 敲下去的瞬间,监控上直接一条 502,紧接着群里就有人问“网站是不是挂了”。其实就断了十来秒,但这种事发生一次就够糟心的了。之前一直觉得蓝绿部署是 K8s 那些大厂玩具,跟我这台 2核4G 的小机器没什么关系,后来查了一下才发现,这玩意儿的核心思路简单得离谱:跑两套一模一样的环境,一套对外服务,另一套用来发新...

阅读更多

深入理解 Linux 文件上传 的工作机制

深入理解 Linux 文件上传 的工作机制 前几天同事跟我吐槽,说往测试服务器传个 800 多 MB 的日志包,传到一半就断了,页面报 413。我第一反应是去改 PHP 的 uploadmaxfilesize,改完没效果,又去翻 nginx 的配置,才发现 clientmaxbodysize 压根没设,这玩意儿默认只有 1M,白折腾了快一个钟头。趁着这次排查,干脆把一个文件从浏览器走到磁盘的完整链...

阅读更多

Go 语言 服务发现 实战:从原理到落地

Go 语言 服务发现 实战:从原理到落地 问题是怎么来的 前段时间把一个 Go 单体服务拆成了三四个小服务,拆的时候觉得挺爽,结果一部署就遇到个尴尬事:订单服务要调用用户服务,地址写啥?写死在配置文件里,实例只有一个的时候还行,后来用户服务扩到了三个实例,机器还时不时迁移,每次变动都得去改一遍配置再重启,烦得要命。 一开始想偷懒用 nginx upstream 转一下,但加减节点还是要手动改配置 ...

阅读更多

Git 工作流中的 熔断 最佳实践

Git 工作流中的 熔断 最佳实践 上周五下午四点多,一个 merge 把主干的单测干红了,但因为走的是 merge queue 排队合并,等发现的时候后面已经叠了七八个 PR,谁也说不清是从哪一单开始坏的。最后俩人对着 CI 日志倒着翻了快一个小时才定位到,回滚完各回各家。事后复盘我就一直在想,服务治理里有熔断这玩意儿,Git 工作流里凭什么只能靠人吼?主干一旦确认坏了,应该先把合入通道掐了,止...

阅读更多

正则表达式进阶:文件上传 匹配技巧

正则表达式进阶:文件上传 匹配技巧

阅读更多
未在播放