构建云规模软件的10项基本实践(二)

云规模团队将其大部分设计和开发用于避免、处理、测试和自动从故障场景中恢复,尤其是那些源自他们无法控制的系统的故障场景。

本文来自开源云中文社区。

开发

有无数的资源可以帮助团队改进软件开发实践。编码最佳实践甚至有自己的维基百科页面。虽然所有这些实践都很重要,但在比较常规开发团队和云规模开发团队时,两种不同的实践尤为突出。

实践7——故障场景专职工程师

分布式系统越大,系统中至少一个独立组件发生故障的可能性越大。考虑一个10步工作流,它依赖于10个独立服务,每个服务的可用性预期为99%。纯粹基于服务可用性,你认为该工作流的失败概率会超过9%吗?将所有服务的可用性提高到99.9%,仍会使整个工作流有近1%的失败机会。这似乎并不重要,但如果该工作流每天执行数百万次,而你对此负责的话,就得重视了。

提高服务可用性和可靠性会有所帮助,正如我们在前面的示例中看到的那样,每个服务都添加了一个额外的“9”。但是,很多时候,服务交互涉及到团队控制之外的服务或完全超出其组织的服务。尽管分布式系统中的故障普遍存在,但许多团队在设计和妥善处理这些故障时,都会减少时间、精力和对细节的关注。这部分是因为实践1和实践2中存在差距。毕竟,团队可能不具备分布式系统知识,无法理解错误处理故障的级联效应。同样,团队可能不太了解他们的库和云服务选择,无法涵盖所有可能的故障场景。

常规团队使用基本技术开发捕获和处理基本故障的代码,可能会忽略不太常见但更具影响力(如果处理不当)的故障场景。

云规模团队将其大部分设计和开发用于避免、处理、测试和自动从故障场景中恢复,尤其是那些源自他们无法控制的系统的故障场景。

实施8——频繁进行广泛的代码审查

代码审查补充了小批量工作的团队和基于主干的开发。它们通常在开发期间(用于定期反馈)和拉取请求期间(在合并到主干之前)应用。这允许开发人员在代码成为每个人的代码库的一部分之前,征求团队成员的反馈。

有很多代码审查清单,但大多数只关注审查代码。一些检查表将范围进一步扩大,以涵盖测试和文档。以上所有内容都很重要,但为了增加代码审查的价值,请通过使用其他镜头来扩大审查范围:

设计——从代码本身后退一步,了解所开发的代码是否/如何适合总体设计,以及在进行更改的情况下,设计是否仍然有效。

可用性——考虑正在构建的功能的用户体验,如果它面向用户;适用于web界面和命令行界面(包括内部和外部工具)。

一致性——验证代码和应用程序中的一致性,从变量命名约定到按钮名称、命令行参数和缩写,再到文档中的术语。

可扩展性——推断出当一种方法不再足够时为预测所做的更改,并寻求在潜在的可扩展性问题存在之前解决这些问题。

常规开发团队使用代码评审来提高代码质量。而云规模团队使用代码审查来提高代码质量、软件设计、操作可见性、用户体验、自动化和工具工具。

帮助他人

实践9——在第一天提供开发人员环境

2019年DORA报告发现,72%的“精英”团队(在评估中发挥最高水平的团队)“自动化测试环境的资源调配和部署”,但自动化性能和安全测试要少得多(分别为28%和31%)。性能和安全测试通常不自动化的原因之一是环境设置和拆卸的复杂性。

这些统计数字与帮助他人有什么关系?

软件开发团队不断变化,包括当新的团队成员加入时。通常,云规模团队是高增长组织的一部分,在一年内,这些团队的规模是已知的两倍(或三倍)。当一个新的团队成员加入时,拥有一组他们可以操作的环境可以让该团队成员快速跟上进度。还有什么比通过自动化性能测试来了解大型、复杂的分布式系统如何工作更好的方法呢?这种自主性与DORA中提到的团队实验实践相一致。更好的是,对于开发云原生软件的团队,团队成员在第一天就可以访问单个云账户,并拥有足够的权限使其有用。

常规团队通常会被允许其运行的环境所限制,新团队成员通常需要等待数天或数周才能访问所需的系统,以提高效率。而当加入云规模团队时,你拥有快速提升、频繁交付价值和自由试验所需的工具。

实践10——通过开源回报

如实践4所述,内部能力的开源通常是一种有益的强制功能,使能力值得共享。知道自己的工作可能会被成千上万甚至数百万的开发人员使用,这通常是令人畏惧的,但分享工作对其他人来说是一个巨大的帮助。

常规团队严重依赖开源库,但很少做出贡献。而云规模团队广泛使用开源库并创建自己的库,他们知道,通过这样做,他们正在改进自己的手艺和其他人的手艺。

关键要点

云规模开发团队在许多方面与常规开发团队相似。在某些情况下,云规模团队对现有实践(如运维可见性)应用额外的(或两个)严格性。在其他情况下,它们扩展了通用实践的范围,或将其应用于以前不打算使用的领域(代码审查)。当结合一组优秀的基础实践时,上面定义的10个实践足以将云规模团队与其他团队区分开来。

努力实现云规模并不适合每个团队或每个应用程序。将本文概述的实践执行到云规模所需的程度是时间、精力和资源密集型的。然而,无论其解决方案的预期规模如何,任何开发团队都可以选择性地或在适当的程度上应用这些实践。更妙的是,因为其他人已经掌握了这些实践,并继续寻找新的方法来满足大量用户或工作负载的需求,大多数团队可以通过依赖与这些实践一起开发的云、平台和软件来获得这种掌握的好处。

THEEND

最新评论(评论仅代表用户观点)

更多
暂无评论