Netflix 技术博客分享了 Netflix边缘工程团队尝试采用新方法构建和运维服务的历程,最终产生了一种新的角色,叫作“全周期开发人员”。开发人员在交付服务的过程中也负责部分运营工作,他们经过培训,并可使用一系列自助服务工具。整体团队一起创建和维护平台和工具,但每个团队都可以自由地偏离“平地”。
博客文章的作者Philip Fisher-Ogden、Greg Burrell 和Dianne Marsh 指出,软件交付生命周期的目的是优化“获得价值的时间”,以便有效地将想法转化为产品和服务。这与Dan North 和Jessica Kerr 的提议类似,即现代软件开发应侧重于“努力缩短交付周期以减少对业务的影响”。开发和运行软件服务涉及多方面的责任:设计、开发、测试、部署、运行和支持。传统上,这些责任被分隔开,并在组织内形成孤岛。这在《凤凰项目》中是一个典型的例子。
这些特定角色在每个细分领域中带来效率,但在整个生命周期中可能效率低下。Netflix 边缘工程团队负责视频流所需的第一层AWS 服务,他们从 DevOps 原则中汲取灵感,重新思考了传统软件交付方法。特别是 Gene Kim 所推广的“DevOps 三方法”,强调了系统思维、扩大反馈循环、培养持续实验和学习文化的重要性。
边缘工程团队的新方法专注于“运营自己构建的东西”(就像亚马逊 CTO Werner Vogel 所说的:“你构建它,并运行它”),并将DevOps 原则付诸行动,让开发系统的团队同时也负责系统的运维和支持工作。
将这一责任分配给每个开发团队,而不是将其外化,从而创建直接反馈循环并调整激励措施。团队因此可以感受到运维的痛点,就会想办法改进系统的设计或代码来缓解痛点。他们需要对这两项职能负责。
这种方法面临的挑战是,负责整个开发生命周期给开发人员带来额外的负担,并且往往需要学习新的技能。个人和团队在承担责任的同时也会感到倦怠。为了缓解这些问题,可以利用工具来简化和自动化相关的开发和运维工作。Netflix 已经创建了集中式支持团队,比如“云平台”、“性能和可靠性工程”和“工程工具”,目标是开发出一个通用的平台和工具来解决每个开发团队的问题。这些工具中已经有很多作为 Netflix OSS 的一部分开源出来,如 Spinnaker 持续交付平台。
思维方式的变化和公共基础设施和工具的创建相结合,于是出现了“全周期开发人员”。全周期开发人员应该要掌握软件生命周期所有领域的知识。转向全周期开发人员模式需要思维方式方式转变。一个全周期开发者需要像软件工程师(SWE)、测试开发工程师(SDET)和站点可靠性工程师(SRE)那样思考和行动。并非所有的开发人员都具备了相关技能,为此Netflix 提供了相应的培训。此外,博客文章还讨论了并非所有的开发人员都希望这样工作,Netflix 中还有其他更多特定的工作角色。
全周期开发人员(图片来自 Netflix 技术博客)
博客文章警告说,要在 Netflix 之外应用此模型,需要作出必要的调整。行业思想领袖 Gareth Rushgrove 强调要避免盲目崇拜和盲目复制“软件独角兽”公司的最佳实践,他在 2016 年的演讲“ Two Sides of Google Infrastructure for Everyone Else ”中提出了这一观点。正如 Matthew Skelton 和 Manuel Pais(InfoQ 编辑)在“ DevOps 团队拓扑”网站上所讨论的那样,现在已经有很多方法和各种组织结构用于解决开发和运维问题。
对于希望采用全周期方法的组织,Netflix 博客作者建议从分析潜在价值和相关成本开始,然后进行思维转换。 Netflix 博客上提供了很多相关信息,网络上也有很多相关信息,还有很多基于开源和 SaaS 的平台和工具解决方案,它们可以满足很多公司的需求。归根结底,最重要的是保持简单:“搞清楚你的需求是什么,并把复杂性降到最低。”
查看英文原文: Full Cycle Developers at Netflix: From Mindsets to Self-Service Tooling
评论