草庐IT

一条推特燃炸情绪:开发者并不想做运维!

云昭 2023-03-28 原文

编译 | 云昭

软件开发的工作正在难以想象的速度变得越来越复杂。

从在服务器上的单体架构中构建应用程序,到将它们分解为多个微服务、打包到容器中、与 Kubernetes 编排并托管在分布式云环境中,再加上消费者功能丰富、追求体验的预期,设计上又需要安全且有弹性,软件复杂度正在以一种非常快的速度攀升。如果说软件正在吞噬世界,那么云正在吞噬软件,而无处不在的“云”端之下,则是运维工作正在慢慢把开发者拖垮。

新带来的复杂性正在折磨开发人员。开发和运维专家也许到了重新分开的时刻了。但是,在不重复过去的错误的情况下可以做到这一点吗?

用过了的 DevOps

​随着敏捷方法和云计算的兴起,随着软件开始吞噬世界, DevOps 出现了。作为“开发”和“运维”的简洁组合,DevOps 试图将两个先前独立的负责构建和部署软件的团队聚集在一起。这也恰逢软件工程师需要收紧用户反馈循环并更频繁地将更新推送到生产环境,甚至无意中推动了这一点。

虽然许多组织抓住这个机会,将两组专家聚集在一起,以前所未有的速度解决常见问题,但也有一些组织将 DevOps 的兴起作为开发人员负责运维任务的许可证,并试图建立一个半神话般的超级全栈的开发团队。

一条推特燃炸情绪

​“在大多数情况下,开发人员不想处理运维问题,” 《DevOps for Dummies》一书的作者、AWS 网络服务社区参与负责人 Emily Freeman 在推特上写道。

这一条推特显然触动了全球软件开发者的神经,数百条同样不想做运维的开发人员的回复纷至沓来。“我是一名开发人员,我不想处理运维问题,”快餐公司 Chipotle 的软件工程师 Scott Pantall 回答说。

“开发人员和运维人员应该密切合作,同时扮演不同的角色。团队之间的同理心才是真正的重点,”SUSE 的开发人员布道师 Andrew Gracey 表示。

虽然将更多的运维和安全问题“左移”到软件开发侧这种做法有着明显的优点,比如可以提高测试效率并提高交付质量,但它也有可能成为带来危险的瓶颈。

“如果你把开发者拉到太多与他们不匹配的领域,最终会自食苦果。他们拥有不同的技术栈。”Kubernetes 存储专家、Ondat 的产品负责人 James Brown 。

或者正如 Harness 的现场首席技术官 Nick Durkin 所说,“人们开始意识到我们不会聘请电工来做我们的管道工。”

负荷“大量”增加 

​相信连开发者都想不到,时至今日,同行的“存量”已经变得如此之高,但他们的工作负担非但没有下降,反而一路飙升。与之形成鲜明对比的是,技术运维的专业知识在某种程度上已经淡出人们的视线。

正如 DevOps 工程师、前系统管理员 Mathew Duggan在《运维部不是IT研发部》一文中所提及的,虽然运维人员“仍然承担着以前的所有职责,确保应用程序可用、受监控、安全和合规”,但他们还负责构建和维护软件交付管道,“在开发人员即使在没有我们参与的情况下,为快速安全地发布代码奠定基础。”

图:传统IT部门由开发、QA、运营团队组成每个团队专注于不同的分工和角色。

这些不断扩大的职责涉及到大规模的再培训工作,尤其是云工程和基础设施作为代码技能变得至关重要。

管理层过高预期 

​“在我看来,情况从未像现在这样惨淡,”Duggan 写道。“开发者的职责范围 (RIP QA) 大幅增加,但管理层对效率的期望却不切实际,现已变得不堪重负。”下面这个对话体现了这种情况——我:领导,我已经厌倦了,到处都是“钥匙孔”,太累人了!

领导:我们希望你做开发工作,但这一切都需要放在墙后面,所以你必须跳过障碍才能得到。哦,我们也不会为你提供一种标准化的方式来获取。

领导:为什么要花这么长时间?我:这不是真正的 DevOps!领导:不要那么消极。与任何宏大的想法一样,当应用于高度复杂的企业时,这通常都会落空,因为有数百种产品或服务以及各种团队为每个产品或服务提供自己独特的流程和技术栈。戴尔科技资本(Dell Technologies Capital)总经理 Tyler Jewell 在一份研究报告中写道: “要建立一个能够实现可持续发展组织,是非常具有挑战性的。随着系统复杂性的增加和最终用户反馈的增多,我们越来越难以预测一个改动对于系统可能产生的影响。”

认识到问题 

情况可能不像 Duggan 和其他人认为的那样绝望,但解决问题的前提是意识到这个问题,尽管它可能需要对工程团队及其职责进行重大调整。

“目的不是要给开发者增加负担,而是在正确的时间为开发者提供正确的信息,”Harness 的 Durkin 认为。“他们不想配置所有东西,但他们确实希望在正确的时间从这些系统中获取信息,以使运营、安全和基础设施团队能够正常工作。除非出现问题,否则开发人员不用关心。”沃尔特·迪斯尼公司(Walt Disney Company)的前董事奈杰尔森(Nigel Simpson)希望公司能认识到这个问题,“应该努力让开发人员摆脱‘担忧机器如何工作’的状态,并回归到构建软件,这是他们最擅长的。”重要的是,DevOps 是一个统一体,其实施应该因组织而异。开发人员现在可以做一些运维的工作并不意味着他们应该把运维的活也做了。

开发和运维如何平衡 

​正如 Gartner 分析师 Lydia Leong 所言: “开发人员对基础设施的控制并不是一个全有或全无的命题。” “在软件生命周期中做好职责划分,这样采可以从‘构建它,然后运行它’中获益,而不必将开发人员空降到一个未驯服、未知的荒野,然后祝他们好运,因为这已经不是一个‘基础设施和运维团队’的问题了。”换句话说,“允许开发人员完全自助访问开发和测试环境,并将基础设施构建为生产代码模板的能力,而不是让开发者完全负责生产,”Leong 写道。事实上,根据VMware 的《2022 年 Kubernetes 状况》报告,776 名受访者中有 54% 的人表示,更高的开发人员效率是采用 Kubernetes 的关键原因,超过三分之一(37%)的人表示他们希望提高运维人员的效率。

Ondat 的 Brown 认为,Kubernetes 的容器编排正在成为这两个团队之间的分离层,将两者的关注点剥离开,以便开发人员可以专注于他们的代码,而运维可以确保底层基础设施和管道经过优化以运行它。“让我们不要回到那些不互相交谈的团队,”Brown 说。Humanitec 的创始人 Kaspar von Grunberg曾在他的电子邮件中写道:不要相信试图让每个人都成为专家的谬论。在高绩效团队中,很少有 Kubernetes 方面的知名专家,并且让其他成员尽量保持低认知负荷。​​

DevOps 已死,SRE接力 

如果 DevOps 的时代真的走到了尽头,或者其光彩刚刚出现褪色的迹象,那接下来会发生什么?

我们之前在《DevOps失败了​》一文中,提到了“SoftOps”的概念,但目前更为被大家认可的是“SRE”(站点可靠性工程)。SRE  是在 Google 遭遇与 DevOps成长的阵痛中诞生的,它已被证明是一种流行的解决方案。

“从根本上说,当你要求软件工程师设计一个运维功能时,就会发生这种(痛苦的)情况,”谷歌工程副总裁、SRE 教父 Ben Treynor 这句话经常被引用。

以两家大型金融机构 Vanguard 和摩根士丹利为例,它们在向更多云原生实践过渡时发现难以平衡开发和运维之间的职责。

在中央运维层和单个开发人员之间插入 SRE 安全缓冲带,能够帮助在两家公司建立信心,在开发人员效率和运维稳定性之间做到恰当的平衡。

然而,SRE 功能也受到了一些批评。正如摩根士丹利的 DevOps和企业技术架构负责人 Trevor Brosnan 所说,建立 SRE 原则“有时被误解为对运维团队的品牌重塑”。

“这是一个需要解决的细节问题,”Vanguard 的站点可靠性工程师 Christina Yakomin 说。“引入 SRE 确实会让人觉得,我们正在再次将运维孤立到这个角色中。”

相反,Yakomin 希望鼓励 Vanguard 开发人员和运营专家分担安全责任,并确保拥有共享平台的团队为他们承担全部运营责任。

平台工程:让人直呼万岁 

“内部开发人员平台”或“平台工程学科”的想法也已成为组织为开发人员提供所需工具的一种方式,并配有适当的组织护栏以保护开发人员能够承担最合适的工作。

内部开发人员平台通常由代码投入生产所需的 API、工具、服务、知识和支持组成,并将其结合到由专门的专家团队或产品所有者维护的公司标准平台中。“DevOps 已经死了,平台工程万岁,”软件工程师和 DevOps评论员 Sid Palas 在推特上写道。“开发人员不喜欢与基础设施打交道,公司在成长过程中需要控制他们的基础设施。平台工程使这二者能够和谐共存。”软件咨询公司 Thoughtworks 的技术主管布兰登·拜尔斯(Brandon Byars)表示,他经常“看到该部门在平台工程团队中运作良好,这些团队为开发人员消除摩擦,同时让他们可以良好地运转。”

然而,有利必有弊。他补充说,“缺点是需要开发人员在没有集中的专业知识和工具支持的情况下完成所有这些工作。”在其工程团队中,任何致力于实施 DevOps 原则的组织,都将熟悉软件开发团队和运维团队之间的平衡做法。在云原生复杂性时代下,做到这种平衡的难度无异于“高空走钢丝”。

写在最后 

云计算的流行和开源软件运动的结合使得开发人员的“性能可选项”越来越多:可扩展性、弹性、模块化和可更新等等。这导致许多人质疑这种“可选项”是否对普通软件开发人员来说是一个净积极因素。在某些情况下,庞大的可用服务目录所固有的复杂性,与其说是一种优势,不如说是一种负担。

Google Cloud 的首席开发倡导者 Kelsey Hightower 将开发人员“可选择水平”视为“礼物和诅咒”。“礼物”是可以使用几乎无限的技术目录来构建软件。“诅咒”是指“基础设施泄漏到开发者的工作流程中的情况"。

现在,随着许多供应商专注于托管服务和抽象。这种托管无异于开发和运维的二次分裂,在这之前,我们是否应该进行大整合?

或许于开发者而言,正如 Hightower 所说:“(开发者)这个职业不仅仅是写代码;这是达到目的的手段。也许我们已经建立了足够多的东西,可以停下来建造新事物,以便让我们现有的东西更加成熟,并让不同岗位回归到各自的角色。这或许就是在过去十年中,人们所看到的 Devops 和协作运动的美好结局。”

有关一条推特燃炸情绪:开发者并不想做运维!的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  4. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  5. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  6. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  7. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  8. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  9. ruby-on-rails - environment.rb 中设置的常量在开发模式中消失 - 2

    了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl

  10. ruby - Rails 开发服务器、PDFKit 和多线程 - 2

    我有一个使用PDFKit呈现网页的pdf版本的Rails应用程序。我使用Thin作为开发服务器。问题是当我处于开发模式时。当我使用“bundleexecrailss”启动我的服务器并尝试呈现任何PDF时,整个过程会陷入僵局,因为当您呈现PDF时,会向服务器请求一些额外的资源,如图像和css,看起来只有一个线程.如何配置Rails开发服务器以运行多个工作线程?非常感谢。 最佳答案 我找到的最简单的解决方案是unicorn.geminstallunicorn创建一个unicorn.conf:worker_processes3然后使用它:

随机推荐