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

↓ 向下滚动

Linux 系统中文件描述符耗尽的排查与限制调整

Linux 系统中文件描述符耗尽的排查与限制调整 前几天一个跑在 Debian 上的小服务突然开始报错,日志里密密麻麻全是 Too many open files,接口一半成功一半 500,看着挺玄乎。我一开始还以为是磁盘满了或者哪儿的内存炸了,结果 df -h 和 free -h 都干干净净。后来才反应过来,这是文件描述符(fd)被用光了。这个问题其实不难,但坑在于:限制有好几层,你改了其中一层...

阅读更多

Kubernetes Deployment 滚动更新参数对可用性的影响

Kubernetes Deployment 滚动更新参数对可用性的影响 上周三晚上发了个版,发完过后没几分钟就有人反馈页面偶尔打不开,刷新一下又好了。去看了眼监控,好家伙,每次滚动更新那几十秒里,5xx都会冒出来一个小尖峰,平时一直是平的。其实以前也见过这个尖峰,一直觉得滚动更新嘛,抖一下很正常就没管,这回被用户直接投诉了才老实坐下来查。结果发现这几个滚动更新参数跟可用性关系还挺大,这玩意儿的默认...

阅读更多

用 Playwright 做端到端测试时处理不稳定网络请求的策略

用 Playwright 做端到端测试时处理不稳定网络请求的策略 前阵子给公司一个老系统补端到端测试,本地跑得好好的,一上 CI 就开始抽风,十次能红三次。点开报错一看,清一色的 Test timeout of 30000ms exceeded,再往下翻日志,发现全是卡在等接口上。页面本身没任何毛病,纯粹是测试环境那台机器网络不太行,接口时快时慢。折腾了几天,踩了不少坑,把实测有效的几个策略记一下...

阅读更多

TypeScript 中用泛型收窄第三方 API 响应类型

TypeScript 中用泛型收窄第三方 API 响应类型

阅读更多

Java 日志框架从 Log4j 迁移到 Logback 的兼容性检查清单

Java 日志框架从 Log4j 迁移到 Logback 的兼容性检查清单

阅读更多

微服务间调用超时、重试和熔断配置的取舍原则

微服务间调用超时、重试和熔断配置的取舍原则 上个月线上出了个事,一个挺边缘的下游服务抖了几秒钟,结果前台的一堆接口全跟着挂了,看监控请求量直接翻了快十倍,下游本来只是抖一下,硬生生被打死,雪崩了。复盘的时候发现,链路上几乎每个服务都配了“重试 3 次、超时 5 秒”,七八个服务叠在一起,一次失败瞬间就变成几十个请求砸向同一个下游,而熔断又配得特别迟钝,完全没兜住。这件事之后我把手里几个核心服务的超...

阅读更多

用 Redis 过期键与发布订阅实现简单的延迟任务队列

用 Redis 过期键与发布订阅实现简单的延迟任务队列 前阵子项目里有个需求:订单下单后 15 分钟没支付,就自动把订单关掉、库存还回去。这种典型的延迟任务场景,教科书答案是上 RabbitMQ 的死信队列,或者整个 xxl-job 之类的调度平台。但项目本来就只挂了一个 Redis,为了这么点功能再引入一个消息中间件,运维那边多半不乐意,我也嫌麻烦。后来翻 Redis 文档,发现 key 过期的...

阅读更多

Elasticsearch 索引 mapping 设计中的字段类型选择建议

Elasticsearch 索引 mapping 设计中的字段类型选择建议 前段时间帮朋友排查一个 ES 集群的问题,搜索接口动不动就超时,打开 mapping 一看,好家伙,连用户 ID、订单状态、手机号这种字段全是 text,查询要套 match,聚合直接没得做。后来新建索引把类型捋了一遍,问题基本就没了。所以说 mapping 这东西,建索引之前多花十分钟想清楚,能省后面一堆麻烦。下面是一些...

阅读更多

用 Nginx 反向代理调试 WebSocket 连接的常见配置问题

用 Nginx 反向代理调试 WebSocket 连接的常见配置问题 最近在折腾一个带实时推送的小项目,后端 WebSocket 直连一切正常,一挂到 Nginx 反向代理后面就各种抽风:要么握手直接失败,要么连上了过一分钟准断。翻了半天日志才发现,这玩意儿的坑其实就那么几个,但每一个都挺隐蔽的,不踩一遍真不知道。下面把这次踩过的坑整理一下,都是实测可用的配置,省得下次再对着报错一脸懵。 最经典的...

阅读更多

Go 项目中用 errgroup 并发控制处理批量请求

Go 项目中用 errgroup 并发控制处理批量请求 起因 前阵子接了个小需求:要把数据库里几千个用户的信息,挨个调一遍第三方的接口同步过去。接口单次响应大概 200ms,我第一版图省事直接 for 循环串行调,跑完一遍得七八分钟,测试的同学在旁边等着,脸都绿了。 那还不简单,起 goroutine 呗。然后我就写出了这种东西: 跑起来确实快,快到第三方直接给我限流了,返回一堆 429,中间还夹...

阅读更多
未在播放