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

↓ 向下滚动

一次线上 消息队列 故障的复盘记录

一次线上 消息队列 故障的复盘记录 一开始我以为是消费端挂了 上周四下午三点半左右,订单服务那边开始报“状态不更新”,客服群里也有人问为什么下单成功之后页面一直转圈。监控先是消费延迟上涨,接着 RabbitMQ 管理台里几个核心队列深度开始往上窜。 第一反应还是那个最常见的误判:消费者是不是挂了?或者线程池被占满了?于是先看应用日志,没看到明显异常,只有一些慢查询提示。再去看消费者线程,也都还在,...

阅读更多

WebSocket 实时通信与 缓存一致性 应用

WebSocket 实时通信与 缓存一致性 应用 起因:订单状态改了,页面没跟上 我这边有个小后台,订单状态变了之后,希望用户页面能立刻从“待支付”变成“已支付”。最开始的做法很直接:数据库更新完,清一下 Redis,再通过 WebSocket 给所有相关客户端推一条 refresh。结果测了一轮,发现这玩意儿是真的难搞,有时候状态明明推了,页面还是旧的。看了几眼代码,主要有三个坑: 1. 客户端...

阅读更多

Nginx 反向代理 缓存一致性 配置详解

Nginx 反向代理 缓存一致性 配置详解 之前把 Nginx 配成反向代理加上 proxycache 之后,一开始觉得真香,后端扛不住了就靠缓存顶着,访问速度嗖嗖的。结果有天改了个商品详情页的文案,刷新了八百遍还是旧内容,后来才反应过来是 Nginx 那层缓存在作怪,缓存 TTL 是 300 秒,我他妈等了五分钟它还是纹丝不动,因为那五分钟还没过... 这个问题说大不大,说小不小,主要是 Ngi...

阅读更多

Go 语言 分库分表 实战:从原理到落地

Go 语言 分库分表 实战:从原理到落地 最近公司那个用户订单表,单表已经干到 8000 多万行了,查询慢得像便秘。DBA 说"兄弟你得分库分表了",我说行吧。然后就开始调研,发现 Go 生态里面像样的分库分表库真没几个,要么就是 Java 那边 MyCat、ShardingSphere 那套东西翻译过来的阉割版,要么就是自己从零撸。为什么不能有个开箱即用的东西呢...可能是 Go 社区都觉得这事...

阅读更多

正则表达式进阶:分布式锁 匹配技巧

正则表达式进阶:分布式锁 匹配技巧 最近线上有个 Redis 分布式锁老是误释放,想先把日志里的 lockacquire、lockrelease、lockfailed 这些事件抓出来,顺便把 key、owner、ttl 和 reentrant 提取出来做告警。结果一上手就发现日志格式从 0.16 开始多了一个 namespace 前缀,原来那条 lock. 的破正则全废了。然后就开始翻文档和旧脚本...

阅读更多

用 Docker 搭建蓝绿部署的完整流程

用 Docker 搭建蓝绿部署的完整流程 先把蓝绿部署说成人话 之前我一直觉得“蓝绿部署”听起来挺玄学,好像非得有 Kubernetes、服务网格、流量染色那一大套东西才能搞。结果真动手以后发现,在 Docker 这种单机或者小规模部署里,它其实就是两个版本的应用容器同时活着,一个接流量,一个空跑或者准备接流量。等新版稳定了,再把 Nginx 这类反向代理的 upstream 一换,流量就过去了。...

阅读更多

Nginx 反向代理 分布式锁 配置详解

Nginx 反向代理 分布式锁 配置详解 之前项目上遇到一个挺头疼的事儿,Nginx 反向代理后面挂了三个 Spring Boot 实例,处理用户下单的时候偶发超卖。一开始我寻思这不是应用层该管的事儿吗,锁加在代码里不就完了。结果线上跑了一周,还是有漏网的,查了半天发现是用户同一笔请求因为网关重试打到了两个不同后端实例上,各实例的本地锁压根不互通。 行吧,那就老老实实上分布式锁。但问题是我不想每个...

阅读更多

Git 工作流中的 灰度发布 最佳实践

Git 工作流中的 灰度发布 最佳实践 我一开始以为灰度发布就是部署平台里点一下“10% 流量”,跟 Git 工作流没啥关系。结果后来发现真不是这么回事,代码要是从 Git 阶段就没把“哪些能发、哪些先别动、出问题怎么关”说清楚,灰度就容易变成线上抽奖。尤其是几个功能同时上,A 功能 5% 开着没事,B 功能合并后一跑,A 也跟着崩了,最后只能半夜回滚。 下面这套是我实际用下来比较顺的做法,不一定...

阅读更多

日志采集 的十种打开方式:工程实践笔记

日志采集 的十种打开方式:工程实践笔记 1. stdout 重定向:最简单也最容易翻车 我一开始以为日志采集嘛,最朴素:程序往 stdout/stderr 打,然后重定向到文件。 结果生产上跑了两天,磁盘就报警了。问题出在文件描述符一直指着同一个 inode,logrotate 如果配置得不好,要么旧日志删不掉,要么进程还往已经 rotate 掉的文件里写。这个方式适合本地调试、临时验证,真到长期...

阅读更多

用 Docker 搭建限流的完整流程

用 Docker 搭建限流的完整流程 最近被限流坑了一下 最近有个小接口想加限流,一开始以为就是“同一时间别让人随便刷”这种五分钟需求,真动手才发现,限流这东西特别容易从一个 demo 变成一堆配置:Redis 要不要持久化、容器网络怎么打通、用户身份怎么取、超时怎么处理、网关和应用到底谁负责。 后来发现用 Docker 其实更省事,需要借助 docker,不然你就慢慢配置环境吧。下面这套是我实测...

阅读更多
未在播放