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

↓ 向下滚动

React 项目中 任务调度 的设计取舍

React 项目中 任务调度 的设计取舍 最近在改一个数据看板的项目,首页一个页面要并发拉三十多个接口,然后渲染一堆图表和表格。测试机上一打开,浏览器直接卡住好几秒,接口那边还报了限流。同事说要不加个 loading 遮罩吧,我心想这不是 loading 的事,是任务全挤在一瞬间了。于是就开始折腾任务调度这摊子事,中间踩了不少坑,记录一下,顺便聊聊每个方案的取舍。 问题到底出在哪 先把问题拆开看,...

阅读更多

PostgreSQL 索引与 鉴权体系 的正确姿势

PostgreSQL 索引与 鉴权体系 的正确姿势 前阵子接手了一个跑了五六年的老项目,用户天天投诉列表页慢,打开 pgstatstatements 一看,最狠的一条查询要跑十几秒。顺手查了下账号,发现全公司共用一个 postgres 超级用户直连生产库,密码还是老掉牙的 md5。趁着这次优化,把索引和鉴权一起收拾了,中间踩了不少坑,记下来,省得下次又去翻文档。 索引不是建了就快的 先说结论:别猜...

阅读更多

性能优化手记:优雅停机 排查全过程

性能优化手记:优雅停机 排查全过程

阅读更多

Git 工作流中的 日志采集 最佳实践

Git 工作流中的 日志采集 最佳实践 前阵子项目要发版,让我整理一份更新日志。我打开 git log 一看,几百条 commit,"fix"、"update"、“改了个bug” 全混在一起,中间还夹着几十条 merge commit,看得我头大。手动整理是不可能的,这辈子都不可能手动整理的,于是就想办法把这件事自动化掉。 网上搜了一圈,什么 conventional commits、semant...

阅读更多

熔断:写给初学者的通俗解释

熔断:写给初学者的通俗解释 前段时间项目里有个服务半夜报警,爬起来一看日志,发现挂的原因特别憋屈:它自己代码一点毛病没有,是它依赖的下游服务卡住了。一个请求卡住不要紧,结果新请求源源不断地进来排队,最后把它也活活拖死了。修完之后我就去补了补熔断相关的知识,结果发现网上讲这东西的文章不是术语满天飞就是直接甩框架文档(也可能是我搜的关键词不对,反正当时没看到几篇讲人话的...),所以干脆自己写一篇大白...

阅读更多

一次线上 热更新 故障的复盘记录

一次线上 热更新 故障的复盘记录 事情是这样的 上周三晚上八点多,我们照常给线上推了一次热更新(skynet + Lua 那套老组合),本来是个很小的改动,一个是结算接口 reward(id, num) 加了个 reason 参数,一个是把玩家身上的 hp 字段统一改名成 hpnow。本地测了没毛病,就按老流程把 patch 推上去了。不出问题的话就没有问题了,结果偏偏出了问题。 十分钟后运营在群...

阅读更多

React 项目中 热更新 的设计取舍

React 项目中 热更新 的设计取舍 从一次莫名其妙的整页刷新说起 前几天改项目里一个表单页面,字段填了二十多个,然后想微调一下按钮颜色,保存的一瞬间整个页面直接刷新了,填的东西全没了。当时第一反应是热更新挂了,结果打开控制台一看,HMR 明明连着,日志里还写了 update applied。也就是说这次不是“没热更”,而是它主动选择了整页刷新。为什么改一行样式会走到整页刷新,这玩意儿的判断逻辑...

阅读更多

用 Docker 搭建文件上传的完整流程

用 Docker 搭建文件上传的完整流程

阅读更多

Python 异步编程与 幂等设计 实践

Python 异步编程与 幂等设计 实践 前段时间把一个跑了两三年的消息回调服务用 asyncio 重构了一遍,压测数据确实好看,QPS 从三百多干到两千多,延迟也降了一截,当时还觉得自己挺牛。结果上线不到一周就翻车了:下游对账发现同一笔退款被处理了两次。翻日志才发现,是 MQ 那边网络抖动导致消费超时,消息被重新投递了一次,而我的消费者是"收到就干活",压根没管这条消息之前是不是已经处理过。 后...

阅读更多

Go 语言 配置中心 实战:从原理到落地

Go 语言 配置中心 实战:从原理到落地 起因 最近手上的项目从单实例拆成了四个实例,配置文件也跟着从一份变成了四份。上周想临时调一下日志级别排查线上问题,结果是改四个 yaml、重新构建、挨个重启,折腾完小半个小时没了,问题早就凉透了。改到第三次的时候实在忍不了,决定花个周末把这事儿彻底解决。 现成的方案不少,Nacos、Apollo、Consul,个个都挺能打。Apollo 功能最全,但部署得...

阅读更多
未在播放