ThoughtWorks技术雷达Vol.20中的采纳

主要内容来自Thoughtworks

总体分布情况

在这里插入图片描述

技术象限

四个关键指标Four key metrics

详尽的DevOps现状报告侧重于对高绩效组织的数据驱动型统计分析 。这项研究持续多年,结果发表在Accelerate,证明了组织绩效和软件交付效能之间存在直接关联。研究人员证实,只需四个关键指标就能区分低绩效、中绩效和高绩效人员:前置时间、部署频率、平均修复时间(MTTR)和变更失败率。的确,我们已经发现这四个关键指标是个简单却强大的工具,可帮助领导和团队专注于衡量并改进重要的环节 。实施构建流水线是一个良好开端,以便你能够捕获四个关键指标(Four keymetrics),并使软件交付价值流可见。例如,作 为GoCD Analytics的一等公民,GoCD流水线能够衡量这四个关键指标。

微前端Mirco frontends

引 入微服务令 我 们 受 益 匪 浅,使 用 微 服 务,团队可以扩展那些独立部署和维护的服务的 交 付 。遗 憾 的 是,我 们 也 看 到 许 多 团 队 创建了单体前端——一个建立在后端服务之上的大而混乱的浏览器应用程序——这在很大程度上抵消了微服务带来的好处 。自从第一次将微前端( Micro frontends)描述为能够解决这一问题的技术以来,我们在微前端领域积累了近乎普遍的积极经验,并且随着越来越多的代码从服务器转移到浏览器,我们还发现了微前端的一些使用模式 。但到目前为止,Web组件在这个领域仍然令人难以捉摸

代码风格自动化Opinionated and automatedcode formatting

在我们的记忆里,对代码进行格式化所用的风格取决于个人品味、公司政策和激烈的辩论。最终,行业似乎厌倦了这无休止的争论,停止这些讨论、简单地采纳有态度的代码格式化工具(Opinionated and automated codeformatting),能够为团队节省大量时间。即使你不完全同意某个工具的代码风格,但大多数团队都应该能够理解专注于代码用途(而非其外观)所带来的好处。对于JavaScript,Prettier一 直 在 争 取 我 们 的 一 票 支 持,类 似 的 还 有Python的Black,而且越来越多的语言开始内置这样的工具,比如:Golang,Elixir。此处的关键在于不要花费数小时来讨论要强制执行哪些规则,而是选择一个有态度的、最低可配置的自动工具,最好是把这个自动化过程配置到pre-commit hook中。

多语言编程Polyglot programming

我们将多语言编程(Polyglot Programming)归入最早一期技术雷达中的“试验”部分,是为了表明为工作选择正确的语言可以大幅提高生产效率,并且出现了值得考虑的新语言。我们想要重申这一点,因为我们最近看到了开发人员和企业在共同发起的标准化语言技术栈方面的努力。虽然我们承认,如果毫无约束的使用语言,所产生的问题要比解决的问题更多,但如果企业要加快流程和上线速度,以及开发人员需要合适的工具来解决手头的问题,推广几种支持不同生态系统或特性的语言就显得非常重要

秘密存储服务Secrets as a service

在构建和运维软件的价值流中,人和机器都会使用密码凭据。构建流水线需要使用密码凭据来与容器注册中心等安全基础设施进行交互,应用程序需要使用API密钥作为密码凭据来获得业务功能访问权限,而服务间通信则需要以证书和密钥作为密码凭据来保护其安全。这些密码凭据可以使用不同的方式进行设置和检索。我们经常提醒开发人员注意不要使用源代码管理方法来存储密码凭据。我们建议将密码凭据与源代码分开管理,并且建议使用git-secrets和Talisman等工具,以免将密码凭据凭据存储在源代码中。我们习惯于使用密码凭据即服务(Secrets as a service)作为存储和访问密码凭据的默认技术。利用这种技术,你可以使用Vault或AWS Key Management Ser vice(KMS)等工具来读写HTTPS端点上的密码凭据,同时实现精细的访问控制。密码凭据即服务使用外部“身份提供方”(例如AWSIAM)来确定请求访问密码凭据的“行为方”的身份。“行为方”利用“密码凭据即服务”来认证自己的身份。要使这种流程有效运行,就必须使“行为方”、“密码凭据即服务”和应用程序的身份引导过程实现自动化。很多基于SPIFFE的平台已经提高了向服务分发身份的自动化水平。

工具象限

UI开发环境UI dev environments

随着越来越多的团队拥抱DesignOps,该领 域 的 实 践 和 工 具 也 日 渐 成 熟 。U I 开 发 环境专注于用户体验设计师与开发人员之间的 协 作(U I dev e n v i ro n m e n ts),为 U I 组件 的 快 速 迭 代 提 供 了 综 合 环 境 。目 前 在 该领域可用的工具包括:Storybook、R e a c tStyleguidist、Compositor和MDX。这些工具既可以在组件库或设计系统的开发过程中单独使用,也可以将其嵌入到web应用程序中使用。通过使用这些工具,许多团队在开发准备工作中缩短了UI反馈周期并改善了UI工作的时间。于是,使用UI开发环境成为了我们合理的默认选择。

Terraform

端到端测试工具Cypress

我们不断收到关于Cypress、TestCafe和Puppeteer等“后Selenium”web UI测试工具的积极反馈。运行端到端测试时经常会遇到一些棘手的问题,如运行时间过长、测试过于零碎、还需要修复无头模式下运行的测试所导致的CI失败。我们的团队借助Cypress很好地解决了性能差、响应时间长、资源加载慢等常见问题。Cypress已成为我们团队内部执行端到端测试的首选工具。

笔记本Jupyter

在过去几年里,我们注意到用于数据分析的notebooks越来越受欢迎。这些notebooks受到Mathematica的启发,将文本、可视化和代码结合到一个可动态交互计算的文档中。我们的团队广泛使用Jupyter notebooks进行数据分析和机器学习方面的探索和原型设计。在本期雷达报告中,我们将Jupyter移至“采纳”来体现其已成为现今默认的Pythonnotebooks。然而,我们仍对在生产环境中使用Jupyter notebooks持谨慎态度。

云服务本地工作栈LocalStack

使用云服务时面对的一个挑战是如何在本地进行开发和测试。LocalStack为AWS解决了这个问题。它提供了各种 AWS 服务的本地测试替身实现,包括S3、Kinesis、Dynamodb和 L a m b d a 等 。它 基 于 现 有 的 最 佳 工 具 如Kinesalite、Dynalite、Moto等构建,并增加了进程隔离与错误注入的功能。LocalStack的使用很简单,可以通过其附带的一个简单的JUnit运行器和JUnit 5扩展来使用,也可以在一个docker容器中运行。它已成为许多团队在测试部署在AWS上的服务时选用的默认工具。

平台象限

内容化Contentful

无头内容管理系统(CMS)正在成为数字化平台的常用组件。Contentful是一款现代化的无头CMS,我们的团队已成功将其集成到开发工作流程中。我们尤其喜爱它的API优先和CMS即代码的实现特点。它支持强大的“内容建模原语即代码”和内容模型演化脚本等特性,因此可以对其像处理其他数据存储schema那样进行处理,并且能将演进式数据库设计的实践应用于CMS的开发中。Contentful的稳健性和一系列新功能(包括沙盒环境),给我们团队留下了深刻的印象,成为我们在这个领域的第一选择。

语言和框架象限

GraphQL工具Apollo

我们团队的报告中指出,在构建使用GraphQL从 后 端 服务中访问数据的 React 应 用时,Apollo已经成为首选库。虽然Apollo项目还提供服务器框架和GraphQL网关,但其客户端之所以引起我们的关注,是因为它简化了将UI组件绑定到和GraphQL后端提供的数据这一问题。简言之,这意味着与使用REST后端和Redux相比,Apollo可以减少代码量。

kotlin测试工具MockK

为Kotlin应用程序编写测试时,MockK是我们的首选模拟工具。我们喜欢使用该库是因为其对协程或lambda块等Kotlin语言特性提供一流支持。作为原生库,它帮助我们的团队编写清晰简洁的Kotlin应用程序测试代码,无需使用蹩脚的的Mockito或PowerMock包装器。

TypeScript

TypeScript 是 一 种 静 态 类 型 语 言 ,也 是JavaScript的超集,现已成为我们明确的默认之选。大型项目从类型安全中获益最多。我们的开发人员喜欢它简单的配置管理、良好集成的IDE支持、安全地重构代码以及逐步采纳类型的能力。凭借其优秀的TypeScript类型定义资源库,我们可以从丰富的JavaScript库中受益,同时也获得类型安全的好处。

总结

云原生的应用还是浪潮风向

kotlin也是方兴未艾

微服务技术持续蔓延,比如微前端,UI dev environments

发布了142 篇原创文章 · 获赞 70 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/zhaoenweiex/article/details/92128951