深入理解 Linux 任务调度 的工作机制
深入理解 Linux 任务调度 的工作机制
阅读更多深入理解 Linux 任务调度 的工作机制
阅读更多从零实现一个简易的文件上传 前两天折腾一个小工具,有个特别朴素的需求:网页上选个文件,传到服务器存下来就行。按理说这事儿不大,但真动手的时候发现,网上的教程要么上来就是 Express 加 multer 一整套端上来,要么直接塞给你一个现成组件,为了传个文件引一堆依赖,总觉得有点杀鸡用牛刀。索性从零手写一个,顺便把浏览器上传文件时到底发了些什么东西搞清楚,免得下次再踩上传相关的坑,还是两眼一抹黑。...
阅读更多Python 异步编程与 连接池 实践 前段时间把手头一个同步的采集服务改成 asyncio 版本,改之前想得挺美,觉得换成异步以后并发随便拉,吞吐量翻几倍不是问题。结果一压测就露馅了,并发开到几百的时候请求开始大量超时,日志里全是 TimeoutError 和 ServerDisconnectedError,反而比同步版本还不稳定。折腾了两天才把问题理清楚,发现锅基本都在连接池上。网上讲 asy...
阅读更多从零实现一个简易的配置中心
阅读更多微服务架构下 缓存一致性 的设计与权衡 前段时间排查了一个线上问题:运营在后台把商品价格改了,数据库里查是新价格,但 App 上刷出来还是老的。Redis 里的缓存明明删了,查了半天,最后发现是另一个服务的本地缓存没收到失效通知……就这么个小破问题,扯出了多级缓存、消息丢失、删除失败重试一串事。趁着印象还热,把缓存一致性这摊子事重新捋一遍,也算给下次踩坑留个笔记。 为什么这事天生做不到“强一致” ...
阅读更多性能优化手记:蓝绿部署 排查全过程 事情是这样的 上个月给我的一个服务上了套蓝绿部署,两套环境,蓝的跑线上流量,绿的发新版本,Nginx 把 upstream 一切就完事,出问题还能秒回滚,听着挺美的。 结果第一次真实切流就被上了一课:切完不到一分钟,告警群直接炸了,接口 P99 从平时的一百多 ms 飙到快两秒。QPS 倒是没掉,就是慢。赶紧把 upstream 切回蓝环境,流量立刻恢复。这就很...
阅读更多蓝绿部署 的十种打开方式:工程实践笔记 之前我们发版都是老三样:半夜、停机、祈祷。有一次凌晨两点升级,服务起不来,回滚脚本又是上一个人改过没测过的,折腾到四点才收场。从那以后我就认了一个理:发版这件事,必须给自己留退路。蓝绿部署说白了就是同时养两套环境,一套在跑,一套随时能顶上,所谓发布和回滚,都只是“指一下”的动作。这几年大大小小的项目试下来,攒了十种用法,从土办法到正规军都有,记在这里。 一、...
阅读更多深入理解 Linux 优雅停机 的工作机制 前几天远程重启家里那台跑了十几个 Docker 容器的 N100 小主机,reboot 敲下去,SSH 断开了,然后就一直连不上,等了五六分钟机器才回来。翻了一眼日志才发现,关机的时候有个服务卡了整整 90 秒超时。这事让我意识到,虽然 shutdown 这条命令敲了这么多年,关机背后到底发生了什么,我还真没认真看过。索性把最近梳理的东西记下来。 先搞清...
阅读更多Go 语言 热更新 实战:从原理到落地 先交个底:严格意义上的热更新,Go 做不到 事情是这样的:手上有个内部网关服务,转发规则改得比谁都想得勤,每次改完都得重启,高峰期重启就是直接掐断在途请求,前端那边肉眼可见地报错。同事问我能不能搞热更新,我心想 Go 是编译型语言,哪来的热更新,但话出口了活儿还得干,就把能想到的几条路全趟了一遍。结论先放这儿:像 Erlang 那种运行中原地换代码,Go 是...
阅读更多微服务架构下 日志采集 的设计与权衡 上周排查一个超时问题,从网关到下游一共跨了五个服务,我开着五个终端窗口挨个 kubectl logs + grep,grep 完了还得自己对时间线,来回对了一个多小时才把整条链路的日志拼起来。拼完那一刻我就想,这事不能再这么干了,日志采集这块是时候好好收拾一下了。 趁记忆还热乎,把这次重构里做的几个决策和对应的权衡记下来,省得下次再纠结一遍。 先统一输出,再谈...
阅读更多