踩过三十个坑之后,我眼里靠谱的DevOps实践到底长啥样
我上周跟一个创业公司技术负责人吃饭,他拍着桌子吐槽。公司花了小二十万买了DevOps工具链,上线三个月,开发跟运维还是天天打架。原来他找的咨询公司上来就给套了大厂的标准流程,从权限管理到多环境部署全给安排得明明白白,就是没问他们团队一共才15个技术,连个专职DevOps工程师都挤不出来。 太坑了。
别迷信工具,DevOps实践首先改的是人的脑子
很多公司做DevOps,第一步就是招厂商、买服务,把Jenkins、K8s、监控、日志平台全搭起来,然后拍胸脯说我们完成DevOps落地了。
放屁。
开发还是写完代码测试完,打包扔给运维说上线。运维出了问题,第一时间找开发说你代码写得烂。开发说我测试环境跑的好好的,肯定是你环境配置错了。流程一点没变,只是多了一堆要填的自动化表单,效率不升反降。
我之前待的那家二线互联网公司,前年推DevOps转型,IT部门花了近百万采购商业工具,要求每个团队必须按流程走,结果半年下来,整体版本发布效率反而降了30%。为什么?核心矛盾从来都不是工具不够用,是人的责任没绑对。
原来开发的KPI只看功能交付速度,运维的KPI只看系统稳定性,俩部门目标天然相反,你就算把天顶星工具给他们,该打还是打。DevOps不是把开发和运维合并成一个部门就完事,是要让做功能的人,对自己写的代码从写完到下线全生命周期负责。你做的功能,你跟进上线,你处理线上问题,你的KPI里直接绑着服务可用性,谁还会甩锅?
传统开发运维协作责任分界对比图
说实话,见过十多家落地DevOps的公司,八成死在这一步。只买工具不改考核,改了考核不改协作习惯,最后就是花了钱买了个摆设。摆在展厅给客户参观、给老板汇报用的。实际干活没人用。
小团队的DevOps实践,根本没必要堆组件
现在圈内风气太坏了,动不动就卷工具栈。你一提要做DevOps,马上就有人跳出来说你必须上K8s,必须搞服务网格,必须搭私有化的镜像仓库,不然就是不专业。
上个月帮一个12人的技术团队梳理DevOps流程,他们就做一个垂直领域的To B SaaS产品,日活不到十万,上来就要给我秀他们找外包搭的多环境部署体系,光环境就分了开发、测试、预发布、灰度、生产五个,每个环境都有独立的K8s集群。我听完直接给砍了三分之二。
最后留了什么?Github做代码托管,Github Action做自动构建跑单元测试,测完直接推到阿里云容器服务,异常报警直接用企业微信机器人推到技术群里,回滚按钮直接做在群菜单上。整个流程没花一分钱授权费,开发改完代码合并完,十分钟就能上线,比原来那个复杂流程快了八倍。
10人技术团队极简DevOps工具链路图
不过话说回来,不是说组件多不好,是你得匹配自己的团队规模,对吧?你一个几百人技术团队,维护上百个服务,那肯定要搞分层权限,搞隔离环境,搞自动化审批。你十来个人,连专职运维都没有,搞那么复杂给谁看?给自己添堵吗?
我早年踩过最离谱的坑,就是刚创业的时候听了某大厂架构师的分享,砸了小十万搭全套DevOps工具链,三个月后,原来一个运维能搞定的发布流程,现在要两个人天天维护DevOps工具链本身。人力成本涨了,发版本还不如原来手动发快。现在回头想,纯纯的交智商税。
最容易被忽略的DevOps实践:给烂代码留够缓冲
最容易被忽略的DevOps实践:给烂代码留够缓冲
大部分讲DevOps的内容,开口就是左移、自动化、持续交付,全在说怎么把新写的代码更快推上线。没人提大部分公司手里都有一堆改不动的老烂代码,这些怎么搞?可观测性这个东西,很多人理解成给新服务做监控用的,其实它最核心的价值,是给老烂代码兜底。你要做持续交付,天天发版本,难免不小心改到老代码的隐式依赖,要是出问题能一分钟定位,十秒钟回滚,你才敢放心的持续发版。不然你发一次炸一次,谁敢给你开自动发布的权限?
我之前帮一家传统零售企业做DevOps咨询,他们核心交易系统是十年前的单体,堆了几百万行代码,原来的开发全走了,没人敢改,碰一下都可能出大事,一年都发不了十个版本。他们推DevOps的时候,我没让他们上来就拆单体,反而让他们先做三件事:第一,给整个单体加全链路的日志追踪,第二,把所有核心接口的依赖关系梳理清楚,第三,做一个一键回滚的脚本,不管出什么问题,点一下就能回到上一个版本。
就这三件事,折腾了两个月,原来改一个小功能要等凌晨三点上线,还要三个人盯着盯一整夜,现在上班时间就能发,十五分钟搞定,出问题一键滚回去。原来一年发不了十个版本,现在一个月能发十几个。这不是落地是什么?
很多人觉得DevOps就是必须拆单体上云,必须搞微服务,不对。能帮你更快更安全的交付价值,就是好的DevOps实践。哪怕你还是跑单体,只要流程顺了,效率上去了,就是对的。
现在行业里动不动就吹新概念,今天DevSecOps,明天平台工程,好像不跟进就是落后了。其实呢,大部分公司连最基础的责任绑定、快速回滚都没做好,追新概念有什么用?
DevOps哪有那么多玄乎的标准。能解决你自己公司问题的,就是靠谱的实践。就这样。