Thoughtworks第26期技术雷达——工具象限

优采云 发布时间: 2022-05-01 08:02

  Thoughtworks第26期技术雷达——工具象限

  

  采纳

  tfsec

  对于那些我们正在使用Terraform的项目来说,在需要检测潜在安全风险时,tfsec已经迅速成为默认的静态分析工具。它很容易被集成到CI流水线,而且拥有一个持续增长的检查库,可以用来检查所有主要的云供应商和诸如Kunernetes的平台。鉴于它的易用性,我们相信对任何Terraform项目而言,tfsec都会是一个非常好的补充。

  试验

  AKHQ

  AKHQ 是 Apache Kafka 的图形用户界面(GUI),可以帮助你管理主题、主题数据、消费者组等。我们的一些团队发现 AKHQ 是用来监控 Kafka 集群实时状态的有效工具。比如,你可以浏览集群上的主题,对于每个主题,你都能可视化它的名称、存储的消息数量、使用的磁盘空间、最后一条记录的时间、分区数、同步数量的复制因子和消费者组。通过 Avro 和 Protobuf 的反序列化,AKHQ 可以帮助你了解 Kafka 环境中的数据流。

  cert-manager

  cert-manager 是一款在 Kubernetes 集群里管理 X.509 证书的工具。它将证书和签发者建模为一等资源类型,并将证书作为服务安全地提供给工作在 Kubernetes 集群上的开发人员和应用程序。在使用 Kubernetes 默认 ingress 控制器时,cert-manager 是个显而易见的选择,但也推荐用在其他的控制器上,尤其在你不应该手动管理自己的证书的时候。我们的几个团队一直在广泛使用 cert-manager,而且发现它的可用性在过去几个月里有了很大的提升。

  云服务的碳足迹

  Cloud Carbon Footprint (CCF)是一款通过云 API来查看AWS、GCP、Azure云平台上碳排放的可视化工具。Thoughtworks的团队已经成功使用这个工具 与多个组织合作,其中包括能源科技公司、零售商、数字服务的供应商和使用人工智能的公司。云平台提供商意识到,帮助客户理解在使用云服务时产生的碳排放的影响是很重要的。所以他们开始自主构建类似的功能。因为CCF是独立于云架构的,它允许使用者在一个位置查看多个不同云服务商的能源使用和碳排放情况,同时将碳足迹转化为对现实世界的影响,比如排放量相当于多少次航班, 或者多少棵树。在最近的发布中,CCF已经开始包含针对Google云和AWS云上可能的节能与减少二氧化碳排放的优化建议,以及支持更多类型的云实例,比如GPU。考虑到现在这个工具已经备受关注和持续增加新功能, 我们对未来把它挪入试验状态充满信心。

  Conftest

  Conftest 是一款针对结构化配置数据编写测试的工具。它依赖于开放策略代理中的 Rego 语言,能够为 Kubernetes 配置、Tekton 的流水线定义、甚至 Terraform 计划编写测试。在我们的实际使用中,Conftest 的体验一直都非常棒,这也得益于它平缓的学习曲线。借助测试的快速反馈,我们的团队可以又快又安全地迭代变更 Kubernetes 的配置。

  kube-score

  kube-score 是一款针对 Kubernetes 对象定义,进行代码静态检查的工具。它的输出是一份建议列表,里面包含了如何提升你的应用程序安全性及弹性的相关建议。它有一份包含了最佳实践的预定义检查,比如以非root权限运行容器,正确指定资源限制等。它已经存在了一段时间,我们在一些项目中将它作为 Kubernetes manifests 构建的 CD 流水线的一部分来使用。kube-score 的一个显著缺陷是你无法添加自定义策略。在这种情况下,我们使用像Conftest 这样的工具,以弥补它的缺陷。

  Lighthouse

  Lighthouse 是一个由 Google 编写的工具,可以评估 Web 应用和页面,以及从出色的开发实践中收集性能指标和洞见等信息。我们一直主张性能测试乃第一公民, 五年前技术雷达中提到的对 Lighthouse 的补充内容对此也有帮助。我们关于适应度函数的思考,也为在构建流水线中运行 Lighthouse 这样的工具创造了强烈的动机。随着 Lighthouse CI 的引入,将 Lighthouse 纳入由不同工具管理的流水线,会变得比以往任何时候都容易。

  Metaflow

  Metaflow 是一个对用户友好的 Python 库和后端服务,可以帮助数据科学家和工程师构建和管理可用于生产的数据处理、机器学习训练及推理的工作流。Metaflow 提供一系列 Python API,将代码组织为由步骤组成的有向图。每一个步骤都可以灵活配置,例如其所需的计算和存储资源。每个步骤执行(也就是任务)的代码和数据副本都被保存起来,并可以在今后的运行或流程的下一步中被检索出来,帮助你从错误中恢复,重新执行任务,还可以追踪模型的版本以及多个运行之间的依赖关系。

  Metaflow 的价值主张是其惯用的 Python 库的简洁性:它与构建和运行时的基础设施完全集成,以支持在本地和规模化的生产环境中运行数据工程和科学任务。在撰写本条目时,Metaflow 和 AWS 服务高度集成,例如使用 S3 来做数据存储,step functions 来做编排。除 Python 以外,Metaflow 还支持 R 语言。其核心功能都是开源的。

  如果你正在 AWS 上构建和部署生产环境的机器学习和数据处理流水线,作为一个轻量级的全栈框架,Metaflow 可以替代例如 MLflow 这类更复杂的平台。

  Micrometer

  Micrometer 是一个跨平台的库,用于JVM的指标检测,支持 Graphite、New Relic、CloudWatch 和许多其他集成。Micrometer 让库作者和团队都受益:库作者可以在他们的库中包含指标检测代码,而无需支持库用户正在使用的每个指标系统;团队可以在后端注册表上支持许多不同的指标,这使组织能够以一致的方式收集指标。

  NUKE

  NUKE 是一个面向 .NET 的构建系统,也是传统的 MSBuild、Cake 以及 Fake 等自动化构建系统的替代品,我们曾在之前的技术雷达中介绍过它们。NUKE 以 C# 领域特定语言(DSL)的形式表达构建指令,不但降低了学习成本,而且 IDE 支持性也很好。在我们的实际体验中,使用 NUKE 进行 .NET 项目的自动化构建十分便捷。我们喜欢 NUKE 提供的精准代码静态检查和提示功能,并且它支持无缝使用各种 NuGet 包,这样可以编译自动化代码,避免运行时发生错误。尽管 NUKE 已不是新技术,但它采用 C# DSL 的全新方法,以及使用 NUKE 时全方位的良好体验,促使我们一定要将它收录在技术雷达里。

  Pactflow

  在长时间使用 Pact 进行契约测试的过程中,我们目睹了规模化带来的复杂性。我们的一些团队已经使用 Pactflow 成功减少了这种复杂性引发的后果。Pactflow 既可以作为 SaaS 运行,也可以部署在本地,并提供与 SaaS 产品相同的功能,它在开源产品 Pact Broker 的基础上,提升了可用性、安全性以及审计体验。到目前为止,我们很满意 Pactflow 的使用体验,并且很高兴看到它在持续致力于降低管理*敏*感*词*契约测试所带来的开销。

  Podman

  Podman 作为Docker 的替代方案,已经通过我们许多团队的验证。与 Docker 不同的是,Podman 使用一个无守护引擎来管理和运行容器,这是一种有趣的方案。此外,Podman 可以以普通用户身份运行而无需root权限,从而减少了攻击面。通过使用 Buildah 构建的开放容器倡议(OCI) 镜像或者 Docker 镜像, Podman 可以适用于大多数容器使用场景。除了与 macOS 的一些兼容性问题外,我们团队在 Linux 各发行版上使用 Podman 的总体感觉非常好。

  Sourcegraph

  在往期的技术雷达中,我们介绍了两个基于抽象语法树(AST)表征的代码搜索和替换工具,Comby 和Sourcegraph。它们尽管有一些相似之处,但也有一些不同的地方。Sourcegraph 是一个商业工具(也有最多支持10个用户的免费版本),特别适合在大型代码库中进行搜索、导航或交叉引用等操作,重视与开发者的交互体验。相比之下,Comby 是一个用于自动化重复性任务的轻量级开源命令行工具。由于 Sourcegraph 是一个托管服务,它能持续监测代码库,并在成功匹配时发出警报。现在我们对 Sourcegraph 有了更多的经验,决定将其挪到试验状态,以反映我们从中获得的良好体验——但这并不意味着 Sourcegraph 比 Comby 更好。每个工具都有各自专注的方向。

  Syft

  使用软件物料清单(SBOM) 是改善“供应链安全”的关键要素之一,因此在发布软件构件的同时,发布相应的 SBOM 正变得越来越重要。Syft是一个致力于为容器镜像和文件系统生成 SBOM 的 CLI 工具和 Go 语言库。它可以生成包括 JSON, CycloneDX 和 SPDX 在内的多种格式的 SBOM。Syft 输出的 SBOM 可以被 Grype 用于漏洞扫描。使用Cosign 将 SBOM 添加为证明文件,可以将生成的 SBOM 和镜像一起发布。这使得镜像的消费者可以对 SBOM 进行验证,并将其用于后续的分析。

  Volta

  当同时在多个 JavaScript 代码库上工作时,我们往往需要使用不同版本的 Node 和其他 JavaScript 工具。在开发机器上,这些工具通常安装在用户目录或本机中,这意味着需要一个解决方案,帮助开发者在多个版本之中进行切换。对于 Node 而言,nvm 能够做到这一点,但我们想重点强调一个替代方案 Volta ,我们的一些团队正在使用它。与使用 nvm 相比,Volta 有几个优点:它可以管理其他 JavaScript 工具,如 yarn;它还具备一个基于项目绑定工具链某个版本的理念,这意味着开发人员可以简单使用给定代码目录中的工具,而不必担心需要手动切换工具版本 —— Volta 是通过使用路径中的 shims 来选择被绑定的版本。Volta 采用 Rust 编写,速度极快,以独立二进制文件进行分发,没有任何依赖。

  Web Test Runner

  Web Test Runner 是 Modern Web 项目中的一个套件,该项目为现代 Web 开发提供了若干高质量的工具,支持像 ES 模块之类的 Web 标准。Web Test Runner 是一个针对 Web 应用的测试运行器。与其他现有测试运行器相比,它的一个优势是可以在浏览器中运行测试(也可以无图形界面运行)。它支持多种浏览器启动器——包括 Puppeteer , Playwright 和 Selenium ,并且使用 Mocha 作为默认测试框架。Web Test Runner 运行测试的速度非常快,我们很喜欢在调试的时候能打开一个带 devtools 的浏览器窗口。它在内部采用了 Web Dev Server ,这意味着我们可以利用其出色的插件 API,为测试套件添加自定义插件。Modern Web 项目的工具看起来是一套非常有前景的开发者工具链,我们已经在一些项目中使用它。

  评估

  CDKTF

  迄今为止,许多组织已经创造了广阔的云服务图景。当然,这只有在使用基础设施即代码和成熟的工具时才可能实现。我们仍然喜欢 Terraform,尤其是它丰富且日渐增长的生态系统。然而,Terraform 的默认配置语言 HCL 缺乏抽象性,导致了它的玻璃天花板。虽然使用 Terragrunt 缓解了这一点,但我们的团队越来越渴望像现代编程语言所能提供的那种抽象性。由AWS CDK 团队和 Hashicorp 合作开发的 Terraform云开发工具包(CDKTF),让团队有可能使用多种不同的编程语言,包括 TypeScript 和 Java,去定义并配置基础设施。通过这种方法,它在 Terraform 生态系统中紧跟Pulumi 的领先地位。我们已经对 CDKTF 有了很好的经验,但仍然决定将其暂留在评估状态,直到它脱离 beta 版本。

  Chrome Recorder panel

  Chrome Recorder panel 是 Google Chrome 97 的预览功能,允许简单地录制和回放用户旅程。虽然这绝对不是一个新想法,但它集成在 Chrome 浏览器中的方式能允许快速地创建、编辑和运行脚本。Chrome Recorder panel 也很好地集成了性能面板,这让获取重复、持续的页面性能反馈变得更加容易。虽然总是需要谨慎使用录制/回放风格的测试,以避免脆弱的测试,但我们认为这个预览功能值得评估,特别是如果你已经在使用 Chrome 性能面板来测量页面。

  Excalidraw

  Excalidraw 是我们团队喜欢使用的简单但功能强大的绘图工具。有时候团队只是需要一张草图而不是正式的图表,Excalidraw 为远程团队提供了一种可以快速创建和共享图表的方式。我们团队也喜欢它生成的低保真图表样式,这让人联想到团队在同地协作时绘制的白板图表。提醒一点:你需要注意它默认的安全性,在你进行绘制时,任何拥有链接的人都可以看见图表。付费版本则提供了进一步的身份验证功能。

  Github Codespace

  Github Codespace 允许开发者在云上创建开发环境,你可以通过 IDE 访问它,就像在本地环境一样。Github 不是第一家实现这个想法的公司,我们之前还提到过 Gitpod。我们喜欢 Codespace 允许通过使用 dotfiles 文件来标准化配置环境的功能,这能够帮助新团队成员更快上手;我们也十分中意 Codespace 能提供最高 32 核 64GB 内存虚拟机的特性,这些虚拟机可以在 10 秒钟内启动,有可能提供比开发笔记本电脑更强大的环境。

  GoReleaser

  GoReleaser 是一个通过多个库和通道来支持不同架构的 Go 项目自动化构建和发布的工具,这是面向不同平台 Go 项目的常见需求。你可以在本地机器或者 CI 上运行该工具,它支持在多种 CI 服务上运行,从而最大限度降低安装和维护成本。GoReleaser 能够用于每个发布版本的构建、打包、发布和声明,并且支持不同的包格式、包库和源代码控制的组合。虽然它已经出现好几年了,但我们惊讶并没有多少团队使用它。如果你经常发布 Go 代码库,这个工具值得一试。

  Grype

  保证软件供应链的安全性已经得到交付团队的普遍关注,这种关注也反映在越来越多的新工具涌现在该领域中。Grype 就是一个新的针对 Docker 和 OCI 镜像进行漏洞扫描的轻量级工具。它可以以二进制文件安装,能在镜像被推至仓库前对其进行扫描,而且不需要在你的构建服务器上运行 Docker 守护进程。Grype 与 Syft 出自同一个团队,后者用于为容器镜像生成不同格式的软件物料清单 。Grype 可以使用 Syft 输出的软件物料清单扫描安全漏洞。

  Infracost

  迁移到云端的一个常被提及的优势是将基础设施开销透明化。但根据我们的经验,情况却往往相反。团队并不总是从财务成本的角度来考虑他们围绕基础设施所做的决定,这就是为什么我们之前提到了将运行成本实现为架构适应度函数。我们对一个名为 Infracost 的新工具感到好奇,该工具可以在 Terraform pull request 中可视化成本权衡。它是一个开源软件, 在 macOS、Linux、Windows 和 Docker 均可访问,开箱即用支持 AWS 、 GCP 和微软 Azure 的定价。它还提供了一个公共 API ,可以查询到当前的成本数据。我们的团队对它的潜力感到兴奋,特别是它还将支持在IDE中提供更好的成本可见性。

  jc

  在之前的技术雷达中,我们将 现代 Unix 命令 放在了评估状态。在该工具集中, jq 命令实际上是一个支持 JSON 的 sed。而 jc 命令执行的是与之相关的任务:它获取常见 Unix 命令的输出,并将输出解析为 JSON。jq 和 jc 这两个命令一起为 Unix CLI 世界以及大量基于 JSON 工作的库和工具之间架起了一座桥梁。当编写一些像软件部署或者故障诊断信息收集的简单脚本时,将五花八门的 Unix 命令输出格式映射到定义明确的 JSON,可以为我们节省大量的时间和精力。与 jq 命令一样,你需要确保该命令可用。它可以通过许多著名的软件库进行安装。

  skopeo

  skopeo 是一款可以对容器镜像和镜像仓库执行各种操作的命令行工具。它的大部分操作都不要求用户以 root 角色执行,也不需要运行守护进程。它是 CI 流水线中的实用部分,在推广镜像时,我们可以用skopeo把镜像从一个注册表拷贝到另一个注册表。这样的操作比直接拉取和推送镜像更好,因为我们不需要在本地存储这些镜像。skopeo 不是一个新工具,但它足够有用且未被充分认识到,所以我们认为它值得一提。

  SQLFluff

  尽管代码静态检查已经是软件工程中的古老实践了,但它在数据领域中的应用仍十分缓慢。SQLFluff是一个python实现的跨SQL方言的linter,它提供了简单的命令行界面(CLI),可以很容易地整合进CI/CD流水线。如果默认配置就适合你,那么SQLFluff在安装后无需任何额外设定就可工作,它会强制执行一套鲜明风格的标准来格式化代码,当然,你也可以通过添加一个dotfile设定自己的代码规范。这个命令行工具还能自动修复诸如空格或者关键词大小写等违反代码规范设定的格式错误。SQLFluff虽然还很年轻,但是SQL代码静态检查圈内获得更多关注是一件让人兴奋的事。

  Terraform Validator

  一些已经采用了基础设施即代码和自服务基础设施平台的组织,正在寻找在执行良好安全实践和组织政策的同时,能给予团队最大限度自主权的方法。我们之前已经着重强调过 tfsec,并在这一期技术雷达中将它挪到了采纳中。对于使用谷歌云平台(GCP)的团队来说,可以使用 Terraform Validator 构建策略库,作为检查 Terraform 配置的约束条件。

  Typesense

  Typesense 是一个快速、容错的文本搜索引擎。在有大量数据的情形下,Elasticsearch 可能仍然是一个不错的选择,因为它提供了一个基于磁盘且可横向扩展的搜索解决方案。然而如果你正在构建一个对延迟敏感的搜索应用,并且搜索索引的尺寸可以容纳在内存中,那么 Typesense 会是一个强大的替代方案,你也可以考虑与 Meilisearch 等工具一起评估。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线