引言

最初考虑引用“ DevOps 已死,平台工程才是未来”作为标题,但这样的表达可能太过于绝对。最终,决定用了“扯淡的”这个词来描述 DevOps,但这并不是一种文明的表达方式。 文章旨在重新审视 DevOps 和平台工程,将分别探讨 DevOps 和平台工程的概念,并重点分析平台工程所倡导的一些核心内容。同时,希望通过本文能够给从事内部开发平台(IDP)工作的同学们带来一些思考。

DevOps的目标

在 2009 年,DevOps 这一概念就被提出,重点强调团队协作、自动化工具和流程改进,旨在提高软件开发和部署的速度和质量。然而,提出之后有近 15 年了,发现这一方法并未如预期完美实现了目标。在我们公司内部,我们也会发现软件交付成本仍然还是较高,从部署发布工具的角度来看,无论是 J-ONE、JDOS 还是目前的行云部署,对于研发人员日常部署发布仍存在一定的成本,但这种现象好像不仅仅是工具层面的问题。

DevOps 本身是一种理念,强调团队协作,使开发团队和运维团队能够紧密合作。尽管强调了自动化和工具的重要性,但它并没有明确指出具体的发展方向。因此,出现了平台工程(Platform Engineering)这一理念。虽然最早是谁提出的已无法考证,但在 2022 年 7 月份,一条Twitter上的消息“DevOps is dead, long live Platform Engineering” 在国内外的 DevOps 圈子迅速传播开来,并得到了广泛的回应。

平台工程(Platform Engineering)是一种新的运维理念,强调内部开发平台应该提供技术研发人员自服务的能力。其核心观点之一是通过屏蔽基础设施的复杂性,为技术研发人员提供灵活的工具链和工作流程。这样,可以利用平台的基本能力,自主解决问题,无需依赖平台层的参与,使得开发团队能够更加高效地开展工作,提高软件交付的速度和质量。

平台工程的定义

平台工程是设计和构建工具链和工作流的学科,可在云原生时代为软件工程组织提供自助服务功能。平台工程师提供的集成产品通常被称为“内部开发人员平台”,涵盖了应用程序整个生命周期的运营需求。 --定义来自 platformengineering.org (关于平台工程的定义较多,但大部分意思较一致:主要是倡导自助服务减少底层基础支撑工具的复杂性和不确定性,减化工作流程,减少最终用户在使用过程中的认知成本,从而改善了最终用户的体验,和提高生产效率)

平台工程和 DevOps 都是软件开发和运维领域的概念,它们共同关注提高软件开发和部署的效率和质量,但它们的重点和方法有所不同。平台工程着重于构建可重用的平台架构,提供场景化的能力,提供自助化的体验。而 DevOps 则侧重于团队协作、自动化工具和流程改进,以提高软件开发和部署的速度和质量。

在 2023 年,Gartner 已将平台工程列为顶级战略趋势之一。最近发布的 2024 年十大技术趋势中,Gartner 再次提到了平台工程,并且将其提升了一个级别,这表明平台工程在业界的认可度得到进一步提升。

在过去的几年中,人们一直追求 DevOps,并从能力成熟度的角度推动提升。然而,对于投入和产出的量化评估却相对模糊。平台工程提出了一些衡量其价值产出的方式,包括自助式体验和尽可能减少人力投入。通过致力于建设自助化、场景化的能力,提供有价值的平台。

回到本文的标题,我们来谈谈为什么开发人员不愿意承担运维的工作。

开发为什么不想做运维

DevOps 强调团队协作,并鼓励开发人员承担一定的运维工作。然而,在现实中,为什么这一点往往难以实现?我认为主要有以下几个方面的理由:

专注于核心开发任务:开发人员通常更倾向于日常软件开发任务,他们可能没有太多时间和精力在其他方面,否则会影响日常任务的工作进展。
不熟悉或不感兴趣:开发人员可能没有足够的经验来处理运维的工作,或者他们对运维工作不感兴趣,导致在运维方面缺乏积极性。
运维的锅太重、事太杂:运维工作涉及到生产环境,因此其责任和影响范围较大。任何运维失误都可能导致系统故障、服务中断或数据丢失等严重后果。因此,对于开发人员来说,承担运维工作可能带来额外的压力和责任。此外,运维工作通常包括各种琐碎而繁杂的任务,包括7*24值班。
缺乏好用的工具和平台支持:缺乏易用且高效的自动化工具和平台,运维工作就会更加依赖手工操作,从而增加了运维的成本和复杂性。

以上可能是开发人员不太愿意承担运维工作的一些可能的理由。我接下来看下运维的本质是什么?

运维工作的本质

运维工作重点是保障系统的安全和稳定运行。它不仅需要 7x24小时监控线上环境的稳定性,还需要处理各种日常的运维任务。这些任务可能包括资源管理、日常巡检、故障排查与修复、工单处理等。

最近,一些大厂经历了重大的线上稳定性故障,这给业界带来了很大的关注。

最近的这些线上故障对整个行业产生了极大的警示,所有企业都一样面临着线上稳定性挑战。

带来的一些思考

安全生产,警钟长鸣:面对线上问题,我们绝不能单纯地追求速度和省事,对于任何线上操作,都必须保持敬畏之心。

安全生产,人人有责:无论是开发人员编写的错误代码逻辑,还是运维人员错误的升级操作,最终都有可能给公司带来无法估量的损失。

生产环境的稳定性,最难得不是技术,而是依赖无数细节的落地,稳定性的保障需要大量的投入,然而这个事最大的问题就是,难被认可,以及怎么来衡量做的好呢?网上曾经一个段子,大概意思就是“那些代码写的没有 Bug 的人,往往默默无闻,甚至可能被干掉;相反,那些经常写 Bug 的同学,因为日常忙碌于修复 Bug ,反而能风生水起”,当然,开发不愿意承担运维的原因,确实是因为线上稳定性的责任重大,同时运维工作的负担也很重,并且缺乏适用的工具和平台来支持。

然而,平台工程被提出,作为一种新的理念,旨在解决这些问题,并提高软件交付流程。接下来聊一聊,与 DevOps 相比【平台工程】的成功关键因素有哪些。

平台工程成功的关键因素

如何在公司内推动平台工程

作为一个相对新颖的概念,平台工程已连续两年获得 Gartner 的认可,将其推向了我们不得不关注的重要地位。要在公司内推动平台工程,我认为需明确以下几个方面:

平台范围:内部有许多工具,首先要确立权威或认证的工具,进行持续投入与迭代,而非各自发展,以免造成重复建设和成本的浪费。
平台文化:平台到底是为谁而做,为谁服务,技术研发人员是我们的上帝,建立以服务技术研发人员为主的平台文化,同时满足公司管理角度。
平台目标:核心目标是构建场景化的工具,使技术人员能在平台中自助化使用,把场景化、自助化作为核心目标。
平台Owner:企业内的IPD不可能集中在同一个部门,因此确定特定场景的 Owner 至关重要,可以消除职责边界不清晰的问题。
需求来源:一切以研发需求为主,要兼顾研发人员的使用体验,避免大而全的版本升级改动,导致研发迁移系统,迁移资源,从而带来的额外使用成本。
平台API:内部平台天然就应具备丰富API,满足内部研发的需求,并也应提供详细的文档让技术人员使用。

综上,从全局的维度讨论了如何在内部推动平台工程。接下来,我们探讨一下平台工程下的工具应具备哪些特质:

平台工程下建设什么样的工具

个人认为,相较于面向消费者的产品,内部工具更为重要。因为消费者产品用户有选择权,但内部人员并无太多选择余地,最多只是抱怨几句,却仍需继续使用。要打造令内部人员满意的工具,个人觉得至少需要以下关键属性:

产品化:内部的工具平台一定要产品化,定位于服务全集团,而非局限自己所在部门的几个人,或者几十人使用,一定要把目标用户定位是集团内所有研发同学,只有这样才能把工具做好。
用户体验:重视用户体验,除了提供基础的GUI界面,API等能力之外,另外也要注意屏蔽复杂的后端逻辑,降低用户的使用成本。
集成化:这里讲集成,不仅是像目前行云/泰山一样通过工具市场把各个工具集成到平台上就行了,这些仅完成了第一步,还是以研发使用场景为目标,以应用为视角工作区,例如在发布时,整合监控、日志、预案、告警等可观测的视图,让用户在一个地方满足所有该场景的需求。
自助化:用户无需平台同学的协助,能满足一切功能,这里举个例子,我们去银行取钱,在柜台人工可以取,但需银行人员的协助,但我们通过ATM,一样也可以完全自助的取钱。

平台工程下的内部开发团队

在平台工程背景下,内开发团队可能会有以下共性情况,例如这四方面:

产品化:内部工具再需求把控方面特别容易被定制,经过一段时间后,可能会演变成了某个人或者某个小部门的定制产品。
优先级:经常接到或面临“某C-x老板”的高优先级需求。
认可性:由于与业务脱节,难以衡量价值,长期下来,对产出的价值认可可能会产生疑虑。
重复建设:内部工具和平台的重复建设问题较为严重。

个人觉得内部平台团队应要坚持做以下几件事:

•持续收集用户需求,并对平台长远规划路线图。
•完善用户使用手册和最佳实践,提升用户体验。
•保持开放心态,一定要提供API。
•持续推广和运营所负责的平台。(生孩子和养孩子)
•针对重复建设问题,加强合作共建,避免陷入小范围的自嗨式“个人/部门工具”建设

如何衡量平台工程的成功呢?

主要在于要从一些指标维度进行衡量评估。如果一个平台或者工具,在做了一年后,对于自身的使用情况一无所知,而仅专注在做功能开发,那么怎么来衡量这个平台带来的价值呢?我觉得最关键的在于要寻找一个关键的指标,这个指标可以是业务维度,也可以是产品维度或组织维度,我抛出几个维度仅供参考:

用户维度(第一个就是要用户维度,提升用户体验)
◦周活跃用户数
◦赋能业务数
◦NPS净推荐值
产品维度
◦访问效率
◦执行效率
◦执行成功率
组织维度
◦XX周期
◦XX用时

平台工程的未来

针对平台工程的未来发展,目前国内外的情况如下:

国外的情况

当前,国外各大厂像Google、Spotify、Netflix、Walmart等一大批公司均在积极推动平台工程在企业内部的实施,11月份,CNCF正式发布了平台工程的能力成熟度模型,分别从5个维度上划分了4个级别,CNCF发布的成熟度模型维度比较粗粒度,主要从团队/人员、平台应用、用户体验、自服务以及平台迭代等方面进行评估,并未对平台功能维度进行详细划分。

国内的情况

在国内,目前平台工程也逐渐受到大家的关注,特别是原来就负责DevOps工具相关的人员,更加关注平台工程带来的新的概念和倡导方向。中国信息通信研究院也正在组织行业内的专家,共同梳理一份符合国内现状的平台工程能力要求标准,会明确平台工程功能维度。我目前也参与了部分工作,如有对此感兴趣的同事,欢迎联系我一同参与。

最后,放个一个Gartner预测的数据,Gartner预测,到 2026 年, 80% 的软件工程组织将建立平台团队,其中 75% 将包含开发者自助服务门户。80%的软件工程组织将建立平台团队作为可重复使用的服务、组件和工具的内部提供者,用于应用程序交付。

可见,平台工程不仅仅是一种趋势,它是软件交付的未来

作者:京东零售 井亮亮

来源:京东云开发者社区 转载请注明来源

扯淡的DevOps,我们开发根本不想做运维!的更多相关文章

  1. Python 开发个人微信号在运维开发中的使用

    一.主题:Python 开发个人微信号在运维开发中的使用 二.内容: 企业公众号 介绍开发微信公众号的后台逻辑,包括服务器验证逻辑.用户认证逻辑 个人微信号 面对企业微信的种种限制,可以使用 Itch ...

  2. 微服务平台(Micro Service Platform : MSP)旨在提供一个集开发、测试、运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效。

    微服务平台(Micro Service Platform : MSP)旨在提供一个集开发.测试.运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效. MSP采用业界 ...

  3. 百度王一男: DevOps 的前提是拆掉业务-开发-测试-运维中间的三面墙

    这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变. 由数人云.优维科技.中生代社区联合发起的 系列 Meetup < DevOps&SRE 超越传统运维之道&g ...

  4. Go语言Golang DevOps运维开发实战

    Go语言Golang DevOps运维开发实战 提高运维意识.从下到上,从上到下的工作都要做好,对上运维工作的价值和含金量可以得到认可,对下我们的工作能够提高效率解放运维.运维意识是很重要,并不是你技 ...

  5. 《DevOps故障排除:Linux服务器运维最佳实践》读书笔记

    首先,这本书是Linux.CN赠送的,多谢啦~ http://linux.cn/thread-12733-1-1.html http://linux.cn/thread-12754-1-1.html ...

  6. 基于.net的微服务架构的开发测试环境运维实践

    眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...

  7. 基于.net的微服务架构下的开发测试环境运维实践

    眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...

  8. DevOps 发展融合运维可视化

    DevOps,是开发(Development)和运维(Operations)的组合,代表一种文化.运动或实践,旨在促进软件交付和基础设施变更软件开发人员(Dev)和 IT 运维技术人员(Ops)之间的 ...

  9. 从 DevOps 到 Serverless:通过“不用做”的方式解决“如何更高效做”的问题

    作者 | 徐进茂(罗离) JAVA 开发工程师  导读:近年来,Serverless 一词越来越热,它已经逐渐成为了一种新型的软件设计架构.和 DevOps 概念提倡的是通过一系列工具和自动化的技术来 ...

  10. DevOps生命周期,你想知道的全都在这里了!

    在大多数情况下,软件应用程序开发由于其规范性和复杂性而变得很耗时. 为了在短时间内交付高质量应用程序,软件开发人员正在遵循一套通用的实践,称为DevOps生命周期. 那么,DevOps在软件应用程序开 ...

随机推荐

  1. mvn 编译异常:Fatal error compiling: 无效的标记: -parameters

    错误信息: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin::compile (defaul ...

  2. [转帖]Data Types

    https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Data-Types.html#GUID-A3C0D836-BA ...

  3. [转帖]记druid 连接池没满,但超时问题 GetConnectionTimeoutException active 5, maxActive 100

    记druid 连接池没满,但超时问题 GetConnectionTimeoutException active 5, maxActive 100 问题说明 线上服务突然出现报错,通过日志查找发现是因为 ...

  4. Python处理Oracle数据库的学习过程

    Python处理Oracle数据库的学习过程 背景 产品数据存在一些大小写敏感的数据迁移到不敏感的数据库时出现报错的情况. 基于此, 我这边跟帅男同学学习了下Python的使用. 因为这一块一直比较菜 ...

  5. OpenSSH 9.2P1升级以及版本显示的处理过程

    说明 本次维护的时间是 2023-2-9 最新已发布的补丁是 OpenSSH9.2P1版本 其他本本应该是类似处理. 下载介质 在 OpenSSH官网打开相关界面. http://www.openss ...

  6. Linux上面批量更新SQLSERVER SQL文本文件的办法

    1. 今天同事让帮忙更新几个SQL文件.. 本着自己虽然low 但是不能太low的想法, 简单写一个 shell 脚本来执行. 2. 因为我的linux 里面都安装了 sqlcmd 的工具 所以办法就 ...

  7. JVM内存初步学习

    JVM内存初步学习   最近在学习容器内的JVM运行, 简单总结了下学习结果, 但是感觉还是分不清楚很多地方: 同事帮忙进行了 native memory的监控, 主要信息简要如下: jvm刚运行起来 ...

  8. fiddler如何抓取https请求

    pc端browse 1.打开下载好的fiddler,点击tools选择options后进入https tab下,勾选Decrypt  HTTPS CONNECTS 和Ignore server cer ...

  9. 如何处理开发环境没有问题,线上环境有问题这个bug

    解决思路 首先确认开发环境有没有这个问题: 如果没有这个问题: 将你的地址切换为线上的环境,看看线上环境有没有这个问题: 如果切换为线上环境有这个问题,就可以调试了: 如果切换为线上环境没有这个问题, ...

  10. 安装Visual Studio的详细流程

      本文介绍Visual Studio 2022软件Community(社区版)的下载.安装.运行与使用方法.   首先需要提一句,本文介绍的是Visual Studio 2022软件的下载:而其它版 ...