运维是干什么的
「运维」二字可能有几层意思,分别可以指代运维工程师、运维团队或者是整个运维服务体系。
我们可以看出,这三层是从狭义到广义的递进。相信绝大部分人问的都是运维工程师,只有极少数人能意识到还有运维服务体系这一层含义。
我们经常会听到一些言论,比如:
云服务普及了,运维工程师就要失业了。
等DevOps或者SRE落地了,运维工程师也要失业了。
容器技术普及了,运维工程师也该失业了……
也记不清运维工程师到底被失业了多少遍,但我认为就算运维工程师被取代了,运维服务也不会消亡,它将伴随并支撑着业务发展的整个生命周期。
为何这样说?我们还是用业务的诞生过程来分析。
一个站点或者App,大致经历着这样的诞生过程:PM设计出产品原型,交给Dev开发实现、QA测试,然后交付给Ops部署到线上运行,最后供用户使用。
在这几个简单步骤中涉及了众多的人、角色、交付过程等对象,这是一个完整、复杂的系统工程,而任意一个环节的失误都可能影响最终呈现给用户的体验以及效果。
我们重点考虑从Dev把业务产品完成后交付给Ops到线上运行的这个阶段,Dev同事主要负责业务产品的功能完整、逻辑正确等业务指标,而Ops同事主要负责业务产品的运行质量、稳定性、可用性等系统指标。
无论后面的交付步骤是用DevOps还是SRE的实现方式,都离不开一个广义的运维服务的执行环节。
所以说,Dev还是Dev,Ops还是Ops,没有谁被取代,只是运维服务的执行方式升级为更加软件工程化的手段,减少人肉操作,DevOps强调自动化、拉动式来提高团队交付效率与质量。
而传统的运维需要谋求技术转型,从原来只关注操作系统层面的技术已经不够了,还要增加对程序代码的性能调优、持续交付、容器化等软件基础架构方面的技能提升,也需要持续关注整个业务、应用、服务的生命周期管理。
简单来说,就是把过去传统的黑盒运维的思维方式抛弃,进入白盒运维的时代,我们必须更加深入代码、深入业务运营,让整个线上服务运行于更优质高效的状态。
至于运维是否会被取代,取决于你属于哪种运维。
运维工程师和运维开发工程师
要建设运维自动化或者实践DevOps离不开运维开发工程师的参与,但要怎样才能更好地发挥运维开发的作用呢?
我曾作为运维产品经理的角色和各种类型的运维开发一起协作过,团队中有本来就做运维开发的,也有本来做其他业务(电商、平台)的开发转来协助运维团队的。
和他们协作一段日子后,总体感觉如下:
运维开发首先是一个程序员,不是运维工程师。
一个好的运维开发需要具备「运维理解」+「开发能力」。
对「开发能力」的技术要求低于其他业务形态(如游戏、电商、搜索等)。
对运维业务的理解难度会低于电商、游戏等业务形态,即对「运维理解」的要求不高。
对运维相关技术栈的掌握程度要求高,如Linux、Git、Nginx、Zabbix、Docker、K8S等。
综上所述,运维开发是一个深度不算太深的职业分支,而现在之所以对运维开发需求量热起来了,主要由于老一辈的资深运维普遍研发能力有限,而这是有历史原因的。
对于从业8年以上的资深运维来说,他们刚开始做运维的时候更多的是接触机房、机架、主机、交换机、防火墙等硬件设备。然后对接业务运维后,一般通过Shell、Python等脚本来辅助工作。
等到业界提出DevOps的时候,他们往往已经专注于团队管理、容量规划、架构调优、运维服务质量等高级范畴,所以基本不太可能抽出大块的时间来重新学习编码并开发自动化系统。
所以,当我们有自动化系统的建设需求时,需要更专业的程序员来协助。
但一般的非专职运维开发的程序员做出来的系统对于运维来说往往不太好使,这时候有部分年轻的运维工程师升级了研发技能,转型运维开发,把好使的运维系统做出来了,赢得了运维团队的好评,大家都为「运维开发」点赞。
所以,大家将「好使的运维系统」和「运维开发」等价起来,以为我们只要招来一个运维开发,那么一套完美的运维平台就能自动诞生出来,这是个很大的误区。
其实「好使的运维系统」真正等价于「运维理解」+「开发能力」,这两种能力也是可以分离的,不一定要强加在运维开发工程师一个人的身上。
类似其他业务形态的开发过程,需要产品经理和程序员两种角色分离,企业也不会说要招聘既会写代码、又会出需求的程序员。
所以,当资深运维能把运维自动化的需求细致地文档化下来,把自动化系统的设计、架构等关键环节确立下来,这就是最好的「运维理解」。
这时把这份靠谱、好使、细致的需求文档交给具备强「开发能力」的程序员,最终就可以得到「好使的运维系统」。
当然,资深运维要获取产品经理能力也不是那么简单,而且也需要和运维开发无障碍地探讨技术,个人觉得必须具备且不限于以下技能包:
产品规划、产品设计、面向对象、需求模型、领域模型、设计模型、设计原则、设计模式、产品工具和文档能力等。
所以,当运维需求被理解、分析得足够透彻,以及资深运维获得了「产品经理」能力后,运维开发就是一种普通的开发分支,按需求文档编码即可。
再往高级发展的话,运维开发也可以替代资深运维出需求,升级为运维产品经理,以程序员的思维角度来解决运维服务的工程效率和质量问题,我认为这也是类似Google所提倡的SRE文化。
最后,很多运维可能考虑要不要转运维开发,当你觉得编码的乐趣远远大于其他运维技能的时候,尽管争取努力去转!
把自己当成一个真正的程序员,以程序员的评价标准来要求自己,不要觉得运维能力和编码能力各自半桶水是好事,正如我前面的那句话:“运维开发首先是一个程序员,不是运维工程师。”