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

↓ 向下滚动

蓝绿部署 的十种打开方式:工程实践笔记

蓝绿部署 的十种打开方式:工程实践笔记 之前我们发版都是老三样:半夜、停机、祈祷。有一次凌晨两点升级,服务起不来,回滚脚本又是上一个人改过没测过的,折腾到四点才收场。从那以后我就认了一个理:发版这件事,必须给自己留退路。蓝绿部署说白了就是同时养两套环境,一套在跑,一套随时能顶上,所谓发布和回滚,都只是“指一下”的动作。这几年大大小小的项目试下来,攒了十种用法,从土办法到正规军都有,记在这里。 一、...

阅读更多

深入理解 Linux 优雅停机 的工作机制

深入理解 Linux 优雅停机 的工作机制 前几天远程重启家里那台跑了十几个 Docker 容器的 N100 小主机,reboot 敲下去,SSH 断开了,然后就一直连不上,等了五六分钟机器才回来。翻了一眼日志才发现,关机的时候有个服务卡了整整 90 秒超时。这事让我意识到,虽然 shutdown 这条命令敲了这么多年,关机背后到底发生了什么,我还真没认真看过。索性把最近梳理的东西记下来。 先搞清...

阅读更多

Go 语言 热更新 实战:从原理到落地

Go 语言 热更新 实战:从原理到落地 先交个底:严格意义上的热更新,Go 做不到 事情是这样的:手上有个内部网关服务,转发规则改得比谁都想得勤,每次改完都得重启,高峰期重启就是直接掐断在途请求,前端那边肉眼可见地报错。同事问我能不能搞热更新,我心想 Go 是编译型语言,哪来的热更新,但话出口了活儿还得干,就把能想到的几条路全趟了一遍。结论先放这儿:像 Erlang 那种运行中原地换代码,Go 是...

阅读更多

微服务架构下 日志采集 的设计与权衡

微服务架构下 日志采集 的设计与权衡 上周排查一个超时问题,从网关到下游一共跨了五个服务,我开着五个终端窗口挨个 kubectl logs + grep,grep 完了还得自己对时间线,来回对了一个多小时才把整条链路的日志拼起来。拼完那一刻我就想,这事不能再这么干了,日志采集这块是时候好好收拾一下了。 趁记忆还热乎,把这次重构里做的几个决策和对应的权衡记下来,省得下次再纠结一遍。 先统一输出,再谈...

阅读更多

机器学习入门:日志采集 数据预处理

机器学习入门:日志采集 数据预处理 最近打算入门机器学习,跟着教程跑了一圈,发现数据集全是现成的:鸢尾花、MNIST、泰坦尼克,下个 csv 直接 pd.readcsv() 就完事了。但总觉得这样学不踏实,正好手头有台服务器,nginx、ssh 天天在上面写日志,这不就是现成的数据吗... 于是决定从日志采集做起,把数据这条链路完整走一遍,踩坑记录如下。 日志从哪来 日志其实不用刻意“采集”,服务...

阅读更多

缓存一致性 的十种打开方式:工程实践笔记

缓存一致性 的十种打开方式:工程实践笔记 上周评审代码,看到同事在一个写接口里先更新数据库、紧接着又把新值 set 回缓存,我就多问了一句:“这俩操作中间挂了怎么办?”他愣了一下,我也愣了一下,因为发现要把这件事说明白,还真得从头捋一遍。干脆趁着有空把这些年用过、见过、踩过的方案都整理一遍,就当是给自己的备忘。 1. Cache Aside:最常用,但口诀别背错 读:先读缓存,未命中再读库并回填。...

阅读更多

用 Docker 搭建配置中心的完整流程

用 Docker 搭建配置中心的完整流程 最近迁移一个跑了快两年的小项目,才发现配置文件散落在三台服务器上,改个 Redis 地址得挨个登上去 sed 一遍再重启服务,中间还漏改了一台,排查半天才发现是两边配置不一致。痛定思痛,决定搭个配置中心。选型看了一圈,Apollo 功能是全但太重了,Consul 又没有原生的配置管理界面,最后选了 Nacos,单机模式一个容器就能跑,对我这种小项目来说刚刚...

阅读更多

性能优化手记:灰度发布 排查全过程

性能优化手记:灰度发布 排查全过程 起因 上周给订单详情服务发了个新版本,改动不大,就是在接口返回里加了个用户标签的展示,照例先灰度 5% 的流量,观察半小时没问题再全量。结果发上去还不到十分钟,告警群就响了,P99 从平时 80ms 左右直接飙到 500 多毫秒,灰度实例上尤其明显。 第一反应肯定是回滚,但转念一想,才 5% 的流量,影响可控,不如先按住别动,趁这个机会把原因查清楚,不然回头全量...

阅读更多

Nginx 反向代理 蓝绿部署 配置详解

Nginx 反向代理 蓝绿部署 配置详解 起因很简单:站点每次更新,我都是直接把旧进程一杀,换包重启,那十几秒里所有请求全是 502,有人正在用就直接被踢出去了。之前流量小都忍了,直到有一次更新正好赶上有人在操作,群里当场有人问“网站挂了?”,怪尴尬的。于是琢磨着搞蓝绿部署,说白了就是同时跑两套一样的服务,一套对外服务(蓝),一套闲着(绿),更新只更新闲的那套,测好了把流量切过去,全程不断线。 原...

阅读更多

Go 语言 任务调度 实战:从原理到落地

Go 语言 任务调度 实战:从原理到落地 起因 前段时间接手了一个内部小服务,打开一看,里面塞了十几个定时任务,全是一个套路:起个 goroutine,里面 for 循环加 time.Sleep。跑是能跑,但改个执行周期要重新编译发版,任务 panic 了进程直接挂,日志里也完全看不出哪个任务几点几分跑的、跑了多久。想着反正要重构,干脆把 Go 任务调度这块从头到尾捋一遍,顺手把踩的坑记下来,就有...

阅读更多
未在播放