从零实现一个简易的配置中心
从零实现一个简易的配置中心
阅读更多从零实现一个简易的配置中心
阅读更多微服务架构下 缓存一致性 的设计与权衡 前段时间排查了一个线上问题:运营在后台把商品价格改了,数据库里查是新价格,但 App 上刷出来还是老的。Redis 里的缓存明明删了,查了半天,最后发现是另一个服务的本地缓存没收到失效通知……就这么个小破问题,扯出了多级缓存、消息丢失、删除失败重试一串事。趁着印象还热,把缓存一致性这摊子事重新捋一遍,也算给下次踩坑留个笔记。 为什么这事天生做不到“强一致” ...
阅读更多性能优化手记:蓝绿部署 排查全过程 事情是这样的 上个月给我的一个服务上了套蓝绿部署,两套环境,蓝的跑线上流量,绿的发新版本,Nginx 把 upstream 一切就完事,出问题还能秒回滚,听着挺美的。 结果第一次真实切流就被上了一课:切完不到一分钟,告警群直接炸了,接口 P99 从平时的一百多 ms 飙到快两秒。QPS 倒是没掉,就是慢。赶紧把 upstream 切回蓝环境,流量立刻恢复。这就很...
阅读更多蓝绿部署 的十种打开方式:工程实践笔记 之前我们发版都是老三样:半夜、停机、祈祷。有一次凌晨两点升级,服务起不来,回滚脚本又是上一个人改过没测过的,折腾到四点才收场。从那以后我就认了一个理:发版这件事,必须给自己留退路。蓝绿部署说白了就是同时养两套环境,一套在跑,一套随时能顶上,所谓发布和回滚,都只是“指一下”的动作。这几年大大小小的项目试下来,攒了十种用法,从土办法到正规军都有,记在这里。 一、...
阅读更多深入理解 Linux 优雅停机 的工作机制 前几天远程重启家里那台跑了十几个 Docker 容器的 N100 小主机,reboot 敲下去,SSH 断开了,然后就一直连不上,等了五六分钟机器才回来。翻了一眼日志才发现,关机的时候有个服务卡了整整 90 秒超时。这事让我意识到,虽然 shutdown 这条命令敲了这么多年,关机背后到底发生了什么,我还真没认真看过。索性把最近梳理的东西记下来。 先搞清...
阅读更多Go 语言 热更新 实战:从原理到落地 先交个底:严格意义上的热更新,Go 做不到 事情是这样的:手上有个内部网关服务,转发规则改得比谁都想得勤,每次改完都得重启,高峰期重启就是直接掐断在途请求,前端那边肉眼可见地报错。同事问我能不能搞热更新,我心想 Go 是编译型语言,哪来的热更新,但话出口了活儿还得干,就把能想到的几条路全趟了一遍。结论先放这儿:像 Erlang 那种运行中原地换代码,Go 是...
阅读更多微服务架构下 日志采集 的设计与权衡 上周排查一个超时问题,从网关到下游一共跨了五个服务,我开着五个终端窗口挨个 kubectl logs + grep,grep 完了还得自己对时间线,来回对了一个多小时才把整条链路的日志拼起来。拼完那一刻我就想,这事不能再这么干了,日志采集这块是时候好好收拾一下了。 趁记忆还热乎,把这次重构里做的几个决策和对应的权衡记下来,省得下次再纠结一遍。 先统一输出,再谈...
阅读更多机器学习入门:日志采集 数据预处理 最近打算入门机器学习,跟着教程跑了一圈,发现数据集全是现成的:鸢尾花、MNIST、泰坦尼克,下个 csv 直接 pd.readcsv() 就完事了。但总觉得这样学不踏实,正好手头有台服务器,nginx、ssh 天天在上面写日志,这不就是现成的数据吗... 于是决定从日志采集做起,把数据这条链路完整走一遍,踩坑记录如下。 日志从哪来 日志其实不用刻意“采集”,服务...
阅读更多缓存一致性 的十种打开方式:工程实践笔记 上周评审代码,看到同事在一个写接口里先更新数据库、紧接着又把新值 set 回缓存,我就多问了一句:“这俩操作中间挂了怎么办?”他愣了一下,我也愣了一下,因为发现要把这件事说明白,还真得从头捋一遍。干脆趁着有空把这些年用过、见过、踩过的方案都整理一遍,就当是给自己的备忘。 1. Cache Aside:最常用,但口诀别背错 读:先读缓存,未命中再读库并回填。...
阅读更多用 Docker 搭建配置中心的完整流程 最近迁移一个跑了快两年的小项目,才发现配置文件散落在三台服务器上,改个 Redis 地址得挨个登上去 sed 一遍再重启服务,中间还漏改了一台,排查半天才发现是两边配置不一致。痛定思痛,决定搭个配置中心。选型看了一圈,Apollo 功能是全但太重了,Consul 又没有原生的配置管理界面,最后选了 Nacos,单机模式一个容器就能跑,对我这种小项目来说刚刚...
阅读更多