运维的未来是平台工程

作者: 阮一峰

日期: 2023年3月21日

互联网公司有一个重要工种,叫做"运维"。

"运维"的英文是 Operations,简写为 Ops,直译就是"操作",指的是各种服务器操作。

简单说,运维工程师就是管理服务器、保障代码运行环境的人。

这是很重要的工作,公司理应非常重视。但是实际上这几年,运维岗位一直在缩减,Ops 工程师被要求转型 DevOps 工程师。据我知道,很多运维工程师其实很苦恼。

应该怎么看待这种变化?运维有没有前途?将来会怎么发展?

最近,我读到一篇老外的文章,标题就叫《运维的未来是平台工程》

"The future of Ops is platform engineering."

作者系统地回答了上面这些问题,认为运维最终将会消失,演变成一种新的工种----"平台工程"(platform engineering)。

我觉得他的文章很有启发,让我对运维的看法清晰了很多,分享给大家。

一、运维的由来

最早的时候,并没有运维,程序员同时负责编写和运行软件。

但是,编写软件和运行软件,其实是两种不同的技能:前者需要熟悉代码,后者需要熟悉服务器。

互联网软件发展起来以后,这两种技能就逐渐分家了。

开发工程师负责编写代码,运维工程师负责运行代码(即保障服务器运行环境)。

二、运维的衰落

事实证明,开发和运维分家是一个巨大的错误。

写代码的人不了解服务器环境,管理服务器的人不了解代码在干什么,这样不利于做出优秀的产品,也不利于排查问题。

因此,有些公司就推动,开发与运维重新合在一起:编写软件的人也要负责运行软件。

这就是 DevOps 的由来,它等于 Dev(开发)+ Ops(运维)。

另一方面,互联网公司的核心资产和竞争力,更多的是代码,而不是运维。所以,公司也有意愿,把更多的力量投入在开发上,逐步压缩专门的运维团队,积极外包尽可能多的基础设施。

这两方面因素决定了,运维作为一个单独的工种,正在逐渐消失。

三、DevOps 的问题

但是,DevOps 实际上没有办法取代运维。

越来越复杂的业务,注定了系统和基础设施也越来越复杂,同时还必须稳定可靠。

普通的开发工程师,根本不可能做到这一点。他既不了解所有基础设施,也达不到专业运维的系统管理水平。

这种情况下,公司就会选择外包,采购外部的云服务,把基础设施外包给专业的云服务商, 最大化压缩自身成本。

四、运维的职责

虽然总体上,运维是管理服务器,但是可以细分成两方面的职责:构建基础架构 + 管理运行环境。

"构建基础架构"指的是硬件的采购、安装、上架、联网这些工作。

"管理运行环境"指的是保障业务软件的运行。

DevOps 出现后,"构建基础架构"这一职责逐渐消失,变成了采购云服务,"管理运行环境"这一职责则是转给了 DevOps 工程师。

于是,新的问题出现了:谁负责采购和整合云服务?

五、平台工程是什么

采购合适的云服务,并不是一件简单的事情。

云服务纷繁复杂,各种 API、SDK 和配套工具令人眼花缭乱,即使经验丰富的运维工程师也不容易说清楚。

因此,需要有专职人员来做出正确决策,选择一套满足需要的云服务,并且负责编写工具,整合所有采购来的云服务,供业务开发使用。

这种角色就叫做平台工程,他负责评估、采购、整合各种云服务,作为自身的基础设施,并在外部云服务基础上构建自己的平台,让开发工程师能够在其上自助服务,将自己的代码投入生产。

上面的定义有几个要点。

(1)基础设施是外包的,以求成本和开发周期最小化。

(2)平台工程师负责整合外包的基础设施,构建成一个平台。

(3)开发工程师在该平台上,自主搭建和管理运行环境,自己运行代码。

六、平台工程与运维的区别

平台工程与运维,存在几个显著区别。

(1)平台工程需要开发软件,包括编写测试和代码审核,团队的运作方式很像开发团队,有产品经理、甚至设计师和前端工程师。

运维一般不开发应用软件,最多就是写一些自动化脚本。

以前,有的工程师写代码,有的工程师跑代码。今后,所有工程师都编写代码,并且运行自己的代码,不管你是开发工程师、DevOps 工程师或者平台工程师,不同之处只在于按层或功能划分的职责范围不同。

(2)平台工程是云原生的,所有工作都存在于云上。

运维不是云原生的,需要自己管理硬件,只能说是支持云的。

(3)平台工程采购云服务,运维采购的是硬件。

七、运维工程师的出路

随着传统的运维角色的消失,现有的运维工程师必然面临着转型,不外乎有三种出路可以选择。

(1)如果喜欢开发业务软件,可以选择成为 DevOps 工程师。

(2)如果喜欢开发平台软件,可以选择做平台工程,专注于基础设施的整合。

(3)如果更喜欢硬件和底层,可以选择加入"基础设施即服务"(IaaS)的云公司,深入研究基础设施。

(完)

留言(38条)

小公司的运维岗,职责就是打杂(啥离谱活都能接到)。
想搞k8s吧,大公司又进不去,没有实际生产经验。
每日写写破脚本,感觉要废了

至于会不会被取代,看公司规模吧,规模大的公司是一定要运维的,规模小的公司什么事都叫给程序猿.................

我就是小公司的前端、运维也是我...

我没看出,平台工程师需要写什么代码。

IT圈习惯了创造新概念,但新概念都是继承来的
有些人在新概念出来之前做的可能就是这些新概念描述的事,只是自己没有意识到而已
当然新概念还是有好处的,让人们对自己的工作有了更清晰的定位

全栈是大方向,未来公司对开发的就是要求啥都会

希望不久的将来运维能成为开发的上一级

引用ixx的发言:

IT圈习惯了创造新概念,但新概念都是继承来的
有些人在新概念出来之前做的可能就是这些新概念描述的事,只是自己没有意识到而已
当然新概念还是有好处的,让人们对自己的工作有了更清晰的定位

没错,其实在小公司,开发运维两手都要抓,都要会

我感觉现在前后端感觉都没必要分
想起来刚开始工作的时候 我老板原来自己设计程序自己写网页和flash 他说第一次看到IIS 这东西好牛逼啊 现在。。

分分合合合合分分
哈哈
经济形势好的时候-分
经济形势不好-合(裁员,一人干多活)

运维工程师编程的能力可以借助ChatGPT来弥补

引用鸡公煲的发言:

小公司的运维岗,职责就是打杂(啥离谱活都能接到)。
想搞k8s吧,大公司又进不去,没有实际生产经验。
每日写写破脚本,感觉要废了

just like me

“他负责评估、采购、整合各种云服务,作为自身的基础设施,并在外部云服务基础上构建自己的平台,让开发工程师能够在其上自助服务,将自己的代码投入生产”

和我现在做的事情有一点相似,在公有云/私有云上包装一层用户(开发)友好的API以实现友好交互

作为一个cdn运维,我也不知道出路在哪里。

佩服一峰老师不断学习新的知识

引用鸡公煲的发言:

小公司的运维岗,职责就是打杂(啥离谱活都能接到)。
想搞k8s吧,大公司又进不去,没有实际生产经验。
每日写写破脚本,感觉要废了

这不就是在说我吗

引用leftfist的发言:

我没看出,平台工程师需要写什么代码。

emmm,我的理解是指平台工程师需要编写维护一套平台系统去整合采购来的云资源,供开发使用。emm,也不知道理解的对不对

不会写代码的咸鱼运维看来是不给活路咯

我就是一个运维转平台工程了,哈哈,这是我开发的网站,可以免费申请HTTPS证书,以后准备把自己的运维工具的都搬上来
https://www.confman.com/

事实证明,开发和运维分家是一个巨大的错误。

这种说法太过独断了. 凡事都一个发展的过程。

大公司运维也是打杂,只不过打的杂比较高级。
我python,golang,ts,react,同时干几个项目,全栈,觉得也没有出路了

引用鸡公煲的发言:

小公司的运维岗,职责就是打杂(啥离谱活都能接到)。
想搞k8s吧,大公司又进不去,没有实际生产经验。
每日写写破脚本,感觉要废了

大公司进去了也得看组,有的组还是天天写写测试写写自动化部署脚本啥的,根本碰不到k8s之类的

引用zhaoolee的发言:

运维工程师编程的能力可以借助ChatGPT来弥补

应该是刚好相反吧

未来的运维,肯定会分很多方向

云上多了发现越来越贵你还没什么话语权的时候到时候又会有一堆“下云”,运维还得干起来,所谓分则和和则分

全栈就是个伪命题!
一个人又有多少精力?
等你有了全栈的资历,你已经耗费多少精力?
等你有了全栈的资历,又有多少公司能需要的起你?
全通绝对不如专精。

引用leftfist的发言:

我没看出,平台工程师需要写什么代码。

比如像 serverless computing provider得一些组就会帮助用户搭建 cicd平台、以iac的方式帮助用户生成所需的
资源,例如aws cloudrun,阿里云函数计算的应用中心。

个人感觉未来的出路是啥都会才行,最起码能完全独立的搞一套。
这个行业性质决定了想在一家公司待一辈子是不可能的。而且技术迭代速度那么快,铁饭碗是不存在的。
如果想在行业一直呆下去,只能与时俱进,不断学习。同时时刻做好成为个人开发者的准备

我们做对日开发的公司运维是很重要的,有时候感觉工资比我们做开发的都高。
营业和运维人员经常到客户现场做系统的搭建部署,直接跟客户沟通,在公司里面的地位比开发要高。

目前的工作是挂着软件开发岗实则干着支持上线、维护变更的工作。Java、Spring、Ant、Maven、Shell、Python、Pip、Git、SQL、Liquibase、Docker、K8S都说不上精通又都要会,全靠自己编写的一套脚本自动化构建和部署虚机或上云应用,中间件数据库操作系统层面还是手工,最近再学Ansible,支持这个那个,说好听点是能干成事,说难听点就是这些个脏活累活别人都不愿意干,找工作找运维方向的,别人也都不信任,难受

引用leftfist的发言:

我没看出,平台工程师需要写什么代码。

保障平台运行的基础架构代码,比如CMDB、CICD、监控告警系统、VPN管理等等。

引用leftfist的发言:

我没看出,平台工程师需要写什么代码。

"这种角色就叫做平台工程,他负责评估、采购、整合各种云服务,作为自身的基础设施,并在外部云服务基础上构建自己的平台,让开发工程师能够在其上自助服务,将自己的代码投入生产。"

这个平台包含前后端,可能还有客户端,你说需要写什么代码?

引用蓝的发言:

作为一个cdn运维,我也不知道出路在哪里。

同迷茫,搞点啥呢。

引用蓝的发言:

作为一个cdn运维,我也不知道出路在哪里。

我也干过一段时间的cdn运维,然后陷入自我怀疑,然后赶紧离职

总结就是:云原生 + 混合云 + CI/CD

我在外企,现在就是做platform engineering, 用GitOps去做部署,都是用CNCF里的项目加上云供应商,比如argo pipeline去部署aws cluster

引用zhaoolee的发言:

运维工程师编程的能力可以借助ChatGPT来弥补

对于专业性强的业务逻辑来说,就不那么好用了。

事实证明,开发和运维分家是一个巨大的错误。

写代码的人不了解服务器环境,管理服务器的人不了解代码在干什么,这样不利于做出优秀的产品,也不利于排查问题。

因此,有些公司就推动,开发与运维重新合在一起:编写软件的人也要负责运行软件。

这就是 DevOps 的由来,它等于 Dev(开发)+ Ops(运维)


这段事实上还是和以前一样,开发还是只懂写代码;只有少部分厉害的任务,整条流程体系的技能都掌握着;
再一个说,段时间内本来就是伪命题, 开发+运维融合一个岗位搞定;不亚于上大学了吧

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接