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

↓ 向下滚动

从零实现一个简易的熔断

从零实现一个简易的熔断

阅读更多

Nginx 反向代理 幂等设计 配置详解

Nginx 反向代理 幂等设计 配置详解 前阵子排查了一个挺恶心的问题:用户点了一次支付,结果后台生成了两笔扣款单,而且应用日志干干净净,根本找不到重复请求的痕迹。查了一整天才定位到,锅在 Nginx —— 某台机器的配置里不知道哪位前辈抄了一行 nonidempotent,上游超时之后,Nginx 把这笔 POST 原样又发给了备机。代理层一个不起眼的重试行为,直接把没做幂等保护的接口打穿了。 ...

阅读更多

Nginx 反向代理 文件上传 配置详解

Nginx 反向代理 文件上传 配置详解 前两天给一个文件服务套了层 Nginx 反向代理,挂到公网域名下面,小文件传得好好的,同事一传几百 MB 的视频就开始报错,浏览器里就给个 413,后端日志里连请求的影子都没有。看了一眼 Nginx 的 error.log,一行 client intended to send too large body,得,又是 clientmaxbodysize 这玩...

阅读更多

Kubernetes 日志采集 配置避坑指南

Kubernetes 日志采集 配置避坑指南 最近给集群上日志采集,本来以为写个 DaemonSet 跑个 Fluent Bit 就完事儿了,结果日志不是缺、就是乱、要么就是疯狂重复,前前后后折腾了快一个礼拜... 把踩过的坑都记在这了,配置全部实测能跑,直接抄就行,不谢。 先搞清楚运行时是啥,别拿 docker 的解析规则硬套 最开始在测试环境一切正常,因为测试集群跑的还是 docker,日志文...

阅读更多

Kubernetes 分布式锁 配置避坑指南

Kubernetes 分布式锁 配置避坑指南 起因:任务跑了两遍 前段时间把公司的一个定时任务调度器从单副本扩到了两个副本做高可用,结果没过几天,凌晨的任务在数据库里写了两遍。看日志才发现,两个 Pod 同时认为自己是“当前执行者”,说白了就是没有锁。本以为加个分布式锁五分钟的事儿,结果在 Kubernetes 里一路踩坑,forbidden、双主、锁丢失全碰上了。折腾完之后记录一下,没准儿你也能...

阅读更多

微服务架构下 熔断 的设计与权衡

微服务架构下 熔断 的设计与权衡 前段时间线上出了个事,订单服务依赖的优惠券接口突然变慢,响应时间从几十毫秒飙到十几秒,订单服务的线程池很快被这些挂着的请求占满,整个下单链路跟着一起瘫。最气人的是,优惠券服务后来自己缓过来了,订单服务却还没醒,重启了两台才救回来。事故过后我就想着把熔断这玩意儿认真补一补,查了半天资料,讲原理的文章一抓一大把,讲参数到底怎么定的却少得可怜,可能是我瞎没搜到吧...这...

阅读更多

Go 语言 链路追踪 实战:从原理到落地

Go 语言 链路追踪 实战:从原理到落地 前阵子线上一个下单接口突然变慢,用户反馈要等七八秒才有响应。这个接口一路串了订单、库存、支付三个服务,日志翻了半天,只知道确实慢,就是不知道慢在哪一段。最后我干了一件很蠢但有效的事:在三个服务里手动打时间戳日志,一条一条对出来,是库存服务里一条没走索引的 SQL。问题解决了,但这个过程实在太难受,于是决定认真搞一搞链路追踪。 结果一查资料就被劝退了一次:O...

阅读更多

React 项目中 熔断 的设计取舍

React 项目中 熔断 的设计取舍 起因是前段时间后端一个服务抽风,接口大面积超时。当时前端页面的表现相当难看:一个列表页里三四个组件各自发请求,全部挂在那儿等超时,loading 转了半天,最后弹出一排报错 toast,用户手一抖刷新了页面,又是一轮。控制台里红色的失败请求刷屏,服务器那边也跟着陪葬。那天我就觉得,这事儿必须在前端加个熔断,不然下次还是这副德行。 熔断本来是微服务里的概念,搬到...

阅读更多

Redis 缓存穿透、雪崩与 幂等设计

Redis 缓存穿透、雪崩与 幂等设计 前阵子接手了一个活动查询接口,上线第一天风平浪静,第二天早上十点活动正式开始,数据库连接池直接被打满了,告警在群里炸个不停。看了一眼日志,全是同一个查询在疯狂打 DB。排查下来发现是活动详情的缓存正好在那个时间点集体过期,几千个请求同时穿透到数据库,这玩意儿就是典型的缓存雪崩。顺带还发现有人拿着不存在的 id=-1 在刷接口,缓存里永远查不到,每次都落到数据...

阅读更多

深入理解 Linux 任务调度 的工作机制

深入理解 Linux 任务调度 的工作机制

阅读更多
未在播放