Kubernetes Deployment 滚动更新参数对可用性的影响
Kubernetes Deployment 滚动更新参数对可用性的影响 上周三晚上发了个版,发完过后没几分钟就有人反馈页面偶尔打不开,刷新一下又好了。去看了眼监控,好家伙,每次滚动更新那几十秒里,5xx都会冒出来一个小尖峰,平时一直是平的。其实以前也见过这个尖峰,一直觉得滚动更新嘛,抖一下很正常就没管,这回被用户直接投诉了才老实坐下来查。结果发现这几个滚动更新参数跟可用性关系还挺大,这玩意儿的默认...
阅读更多Kubernetes Deployment 滚动更新参数对可用性的影响 上周三晚上发了个版,发完过后没几分钟就有人反馈页面偶尔打不开,刷新一下又好了。去看了眼监控,好家伙,每次滚动更新那几十秒里,5xx都会冒出来一个小尖峰,平时一直是平的。其实以前也见过这个尖峰,一直觉得滚动更新嘛,抖一下很正常就没管,这回被用户直接投诉了才老实坐下来查。结果发现这几个滚动更新参数跟可用性关系还挺大,这玩意儿的默认...
阅读更多用 Playwright 做端到端测试时处理不稳定网络请求的策略 前阵子给公司一个老系统补端到端测试,本地跑得好好的,一上 CI 就开始抽风,十次能红三次。点开报错一看,清一色的 Test timeout of 30000ms exceeded,再往下翻日志,发现全是卡在等接口上。页面本身没任何毛病,纯粹是测试环境那台机器网络不太行,接口时快时慢。折腾了几天,踩了不少坑,把实测有效的几个策略记一下...
阅读更多TypeScript 中用泛型收窄第三方 API 响应类型
阅读更多Java 日志框架从 Log4j 迁移到 Logback 的兼容性检查清单
阅读更多微服务间调用超时、重试和熔断配置的取舍原则 上个月线上出了个事,一个挺边缘的下游服务抖了几秒钟,结果前台的一堆接口全跟着挂了,看监控请求量直接翻了快十倍,下游本来只是抖一下,硬生生被打死,雪崩了。复盘的时候发现,链路上几乎每个服务都配了“重试 3 次、超时 5 秒”,七八个服务叠在一起,一次失败瞬间就变成几十个请求砸向同一个下游,而熔断又配得特别迟钝,完全没兜住。这件事之后我把手里几个核心服务的超...
阅读更多用 Redis 过期键与发布订阅实现简单的延迟任务队列 前阵子项目里有个需求:订单下单后 15 分钟没支付,就自动把订单关掉、库存还回去。这种典型的延迟任务场景,教科书答案是上 RabbitMQ 的死信队列,或者整个 xxl-job 之类的调度平台。但项目本来就只挂了一个 Redis,为了这么点功能再引入一个消息中间件,运维那边多半不乐意,我也嫌麻烦。后来翻 Redis 文档,发现 key 过期的...
阅读更多Elasticsearch 索引 mapping 设计中的字段类型选择建议 前段时间帮朋友排查一个 ES 集群的问题,搜索接口动不动就超时,打开 mapping 一看,好家伙,连用户 ID、订单状态、手机号这种字段全是 text,查询要套 match,聚合直接没得做。后来新建索引把类型捋了一遍,问题基本就没了。所以说 mapping 这东西,建索引之前多花十分钟想清楚,能省后面一堆麻烦。下面是一些...
阅读更多用 Nginx 反向代理调试 WebSocket 连接的常见配置问题 最近在折腾一个带实时推送的小项目,后端 WebSocket 直连一切正常,一挂到 Nginx 反向代理后面就各种抽风:要么握手直接失败,要么连上了过一分钟准断。翻了半天日志才发现,这玩意儿的坑其实就那么几个,但每一个都挺隐蔽的,不踩一遍真不知道。下面把这次踩过的坑整理一下,都是实测可用的配置,省得下次再对着报错一脸懵。 最经典的...
阅读更多Go 项目中用 errgroup 并发控制处理批量请求 起因 前阵子接了个小需求:要把数据库里几千个用户的信息,挨个调一遍第三方的接口同步过去。接口单次响应大概 200ms,我第一版图省事直接 for 循环串行调,跑完一遍得七八分钟,测试的同学在旁边等着,脸都绿了。 那还不简单,起 goroutine 呗。然后我就写出了这种东西: 跑起来确实快,快到第三方直接给我限流了,返回一堆 429,中间还夹...
阅读更多在 CI 流水线中实现前端构建产物缓存以缩短流水线时间 上礼拜给项目改了两行样式,提了个 MR,结果流水线跑了十四分钟才出结果。点开日志一看,光 npm install 就啃了六分钟,npm run build 又啃了五分钟,剩下的时间全耗在上传产物和拉镜像上。每次都全量重装全量构建,代码可能就改了一行 css,属实有点离谱。然后就去搜了一圈缓存方案,结果发现大部分教程都只讲一半,教你缓存 nod...
阅读更多