Thoughtworks第26期技术雷达——平台象限

2022-04-15 17:40:07 浏览数 (1)

试验

Azure DevOps

随着 Azure DevOps 生态系统的不断发展,我们的团队正在更多的使用它,并取得了成功。这些服务包含一组托管服务,包括托管 Git 代码仓库、构建和部署流水线、自动化测试工具、待办工作管理工具和构件仓库。我们已经看到我们的团队在使用该平台时获得了良好的体验,这意味着 Azure DevOps正在走向成熟。我们特别喜欢它的灵活性;它甚至允许用户使用来自不同供应商的服务。例如,你可以在使用 Azure DevOps的流水线服务的同时也使用一个外部 Git 数据仓库。我们的团队对 Azure DevOps Pipelines 尤其感到激动。随着生态系统的成熟,我们发现越来越多的团队已经加入了 Azure 技术栈,因为它可以轻松地与微软世界的其他部分集成。

Azure Pipeline模板

Azure Pipeline模板提供了两种机制来对 Azure Pipeline定义去重。通过 "includes" 模板,你可以引用一个模板使其像参数化的 C 宏一样内联展开,从而以一种简单的方式将各个阶段、任务和步骤的公共配置分解出来。通过 "extends" 模板,你可以定义一个具有公共流水线配置的外壳,结合所需模板检查机制,如果流水线没有扩展特定的模板,你可以拒绝构建以防止对流水线配置本身的恶意攻击。Azure Pipeline模板、CircleCI Orbs 以及刚崭露头角的GitHub Actions 可复用工作流,是流水线设计模块化趋势在不同平台上的体现,我们从多个团队收到了好的反馈。

CircleCI

我们的许多团队选择 CircleCI 来满足他们的持续集成需求,他们很欣赏它高效运行复杂流水线的能力。CircleCI 的开发人员在持续增加 CircleCI 的新功能,现在是3.0版本。我们的团队认为其中 Orbs 和 executors 非常有用。Orbs 是可重复使用的代码片段,可用来自动化重复的流程,进而加快项目的配置,并使其易于与第三方工具集成。多种多样的 executor 为在 Docker、Linux、macOS 或 Windows 虚拟机中配置作业提供了灵活性。

Couchbase

当我们最初在 2013 年收录 Couchbase 时,它主要被视为是一个由 Membase 和 CouchDB 合并而来的持久化缓存。从那时起,它经历了持续的的改进,一个由相关工具以及商业产品组成的生态系统也围绕着它成长了起来。它新增的产品套件包括 Couchbase Mobile 和 Couchbase Sync Gateway。这些功能协同工作,即使在设备由于网络不稳定而离线的时间段内也能够使数据保持最新。随着这些设备的激增,我们看到了市场对嵌入式数据持久化的需求不断增加,无论设备是否被连接,这种数据的持久化都能够保证设备继续工作。近期,我们的一个团队对 Couchbase 的离线同步能力进行了评估,发现这种现成的功能为他们节省了大量的精力,避免了投入成本自己去构建这种离线同步能力。

eBPF

近些年来,Linux 内核已经包括了扩展的伯克利数据包过滤器(eBPF),一个提供了将过滤器附加到特定套接字能力的虚拟机。但是,eBPF 远远超出了包过滤的范围,它允许在内核的不同点位上触发自定义脚本,而且开销非常小。虽然这项技术并不新鲜,但随着越来越多的微服务通过容器编排来部署,eBPF 逐渐自成一体。Kubernetes 和服务网格技术(如 Istio )被普遍使用,它们采用“边车” (sidecars) 来实现控制功能。有了诸如 Bumblebee 这样使 eBPF 程序的构建、运行和发布变得更加容易的新工具, eBPF 可以被看作是传统边车的替代品。Cilium 的维护者甚至宣布了边车的消亡。基于 eBPF 的方法减少了一些由边车带来的性能和运维上的开销,但它不支持如本地终结 SSL 会话这样的常见功能。

GitHub Actions

GitHub Actions 的使用量在去年大幅增长。之前的使用经历已经证明它可以处理更复杂的工作流程,并在复合操作中调用其他操作。但是,它仍存在一些缺点,例如无法重新触发工作流的单个作业。尽管 GitHub Marketplace 中的生态系统有其明显的优势,但让作为第三方的 GitHub Actions 访问你的构建流水线可能会以不安全的方式共享机密信息(我们建议遵循 GitHub 关于安全强化的建议)。尽管如此,GitHub Actions 以其在 GitHub 中的源代码旁直接创建构建工作流的便利性,结合使用 act 等开源工具在本地运行的能力,是一个利于团队刚开始开展工作以及新人上手的强有力选项。

GitLab CI/CD

如果你正在使用 GitLab 管理软件交付,可以看看 GitLab CI/CD 能否满足持续集成和交付的需求。我们发现配合本地部署的 GitLab 以及自托管运行器时,GitLab CI/CD 尤其好用,因为这种组合可以解决使用基于云的解决方案经常会遇到的授权问题。自托管运行器可以完全根据需求进行配置,并安装合适的操作系统以及依赖项,因此流水线的运行速度比使用云供应的运行器要快得多,因为云供应的运行器每次都需要配置。

除了基本的构建、测试和部署流水线,GitLab 的产品还支持 Services、Auto Devops、ChatOps 以及其他高级功能。Services 十分适合将 Docker 服务(如 Postgres 或 Testcontainer )连接至用于集成测试与端到端测试的作业。Auto Devops 功能无需配置即可创建流水线,非常适用于刚开始进行持续交付的团队,以及有许多代码仓库的组织,可以避免手动创建许多流水线。

Google BigQuery ML

自从雷达上次收录了 Google BigQuery ML 之后,通过连接到 TensorFlow 和 Vertex AI 作为后台,BigQuery ML 添加了如深度神经网络以及 AutoML Tables等更复杂的模型。BigQuery 还引入了对时间序列预测的支持。之前我们关注一个问题是模型的可解释性。今年早些时候,BigQuery Explainable AI 被宣布为公众开放使用,在解决上述问题上迈出了一步。我们还可以将 BigQuery ML 模型作为 Tensorflow SavedModel 导出到 Cloud Storage,并将它们用于在线预测。但仍有一些需要权衡的事情,例如是否需要降低"机器学习持续交付"的难易程度以使其低门槛好上手,BigQuery ML 仍然是一个有吸引力的选择,特别是当数据已经存储在 BigQuery 中的时候。

Google Cloud Dataflow

Google Cloud Dataflow 是一个基于云平台的数据处理服务,适用于批量处理和实时流数据处理的应用。我们团队正在使用 Dataflow 来创建用于集成、准备和分析大数据集的数据处理流水线,在这之上使用 Apache Beam 的统一编程模型来方便管理。我们在2018年首次介绍了 Dataflow,它的稳定性、性能和丰富的功能让我们有信心在这一次的技术雷达中将它移动到试验环。

Github Actions 中的可复用工作流

自从在两期技术雷达之前首次发布了GitHub Actions后,我们关注到业界对于 GitHub Actions 的兴趣在持续上升。GitHub 一直在持续迭代演进该产品,可复用工作流的发布解决了一些早期的缺陷。Github Actions 中的可复用工作流将流水线设计模块化,只要工作流依赖的代码仓库是public状态,你甚至可以跨代码仓库进行参数化复用。可复用工作流不但支持将机密值作为秘钥显示传递,也支持将输出结果传递给调用任务。无需离开GitHub这个平台,只需配置几行 YAML 文件,GitHub Actions就能为你提供CircleCI Orbs或Azure Pipeline Templates在 CI 方面的灵活性。

Sealed Secrets

Kubernetes 原生支持称为“机密”(secret)的键值对象。然而默认情况下,这些 Kubernetes 的“机密”其实并不真的那么机密。尽管它们与其他键值数据分开处理,可以单独采取预防措施或访问控制,且支持在将“机密”存储在 etcd 之前,对其进行加密,但在配置文件中,“机密”是以纯文本字段的形式保存的。Sealed Secrets 提供组合运算符和命令行实用程序,使用非对称密钥来对“机密”进行加密,以便仅在集群中用控制器将其解密。此过程可确保“机密”在 Kubernetes 用于部署的配置文件中不会泄漏。一旦加密,这些文件就可以安全地共享或与其他部署制品一起存储。

VerneMQ

VerneMQ 是一个开源、高性能的分布式 MQTT 消息服务器。在之前的技术雷达中我们评估过一些 MQTT 消息服务器,比如 Mosquitto 和 EMQ 。与它们类似,VerneMQ 也基于 Erlang/OTP 开发,具有高度可扩展性。它可以在硬件上水平和垂直扩展,以支持大量并发客户端的发布和订阅,同时保持低延迟和容错性。在我们的内部基准测试中,它已经能够帮助我们在单个集群中实现几百万个并发连接。它并不是新技术,我们在生产环境中使用了一段时间,目前运行良好。

评估

actions-runner-controller

actions-runner-controller 是一种Kubernetes 控制器,它在 Kubernetes 集群上为 GitHub Actions 运行自托管运行器。这个工具可以在 Kubernetes 上创建一个运行器资源,它可以运行和操作自托管运行器。当你的 GitHub Actions 运行的作业需要访问 GitHub 云运行器主机无法访问的资源,或者依赖于某些特定的操作系统和环境而 GitHub 没有提供时,自托管运行器会很有帮助。当你有一个 Kubernetes 集群,你可以将自托管运行器作为一个 Kubernetes pod 运行,并根据 GitHub webhook 事件来伸缩。actions-controller-runner 具有轻量级和可伸缩的特性。

Apache Iceberg

Apache Iceberg 是一个面向超大的分析数据集的开放表格格式。Iceberg 支持现代数据分析操作,如条目级的插入、更新、删除、时间旅行查询、ACID 事务、隐藏式分区和完整模式演化。它支持多种底层文件存储格式,如 Apache Parquet、Apache ORC 和 Apache Avro。已有许多数据处理引擎支持 Apache Iceberg,包括一些 SQL 引擎,如 Dremio 和 Trino,以及(结构化)流处理引擎,如 Apache Spark 和 Apache Flink。

Blueboat

Blueboat 是一个无服务器 web 应用的多租户平台。它采用了被广泛使用的 V8 JavaScript 引擎,同时,出于安全和性能的考虑,它使用 Rust原生地实现了常用的网络应用程序库。Blueboat 可以被看作是 CloudFlare Workers 或 Deno Deploy 的替代品,但与它们之间存在一个重要区别——你必须操作和管理底层基础设施。因此,我们建议你仔细评估 Blueboat 是否满足你的本地无服务器需求。

Cloudflare Pages

当 Cloudflare Workers 发布的时候,我们着重介绍它是一个面向边缘计算的早期函数即服务(FaaS)方案,实现方案十分有趣。去年(2021年)四月发布的 Cloudflare Pages 并没有特别引人注目,因为 Pages 只是众多基于 Git 的网站托管解决方案中的一个。虽然 Cloudflare Pages 的确有一个大多数替代方案不具备的有用功能——持续预览。不过,现在 Cloudflare 已经将 Workers 和 Pages 更紧密地集成了起来,创建了一个运行在 CDN 上的、完全集成的 JAMstack 解决方案。键值存储和高度一致的协调原语让新版 Cloudflare Pages 更具吸引力。

Colima

Colima 正成为 Docker 桌面版的一个热门开放替代方案。它通过在 Lima VM 中配置 Docker 容器运行时环境,可以在 macOS 上配置 Docker CLI 并处理端口转发和挂载存储。Colima 使用 containerd 作为容器运行时,这也是大多数托管 Kubernetes 服务采用的容器运行时(提升了开发与生产环境的一致性)。您可以基于 Colima 轻松地使用和测试 containerd 的最新特性,例如容器镜像的惰性加载。凭借其良好的性能,我们期待 Colima 成为 Docker 桌面版的强有力开源替代方案。

Collibra

在日益拥挤的企业数据目录市场中,我们的团队很喜欢使用Collibra。他们喜欢 SaaS 或自托管实例的部署灵活性,许多功能可以开箱即用,包括数据治理、数据血缘、数据质量和数据的可观测性。用户还可以选择使用仅需更小功能集合的更加去中心化的管理方法(如 Data mesh) 。真正令人引以为傲的的是他们经常被忽略的客户支持,对此我们认为是一种协作与支持。诚然,简单的数据目录和更全功能的企业平台之间存在矛盾,但到目前为止,使用它的团队对使用 Collibra 支持其需求的方式非常满意。

CycloneDX

CycloneDX 是一个用来描述机器可读的软件物料清单 (SBOM) 的标准。随着软件和计算架构日渐复杂,软件变得越来越难以定义。CycloneDX 起源于 OWASP,它对旧的 SPDX 标准进行了改进,提供了更广泛的定义,不仅包含了本地机器依赖,还包含运行时服务依赖。你还会发现它提供了一个用于集成的生态系统,包括多种编程语言的实现,以及允许你通过适当的签名和验证来分析和更改 SBOM 的命令行工具。

Embeddinghub

Embeddinghub 是一个与 Milvus 十分类似的,面向机器学习嵌入领域的向量数据库。不同的是,它提供了开箱即用的近似最邻近运算、表分区、版本及访问控制等功能,我们建议你根据你的嵌入向量化场景对Embeddinghub进行评估。

Temporal

Temporal 是一个用于开发长期运行工作流的平台,尤其适用于微服务架构。作为 Uber 开源项目(OOS)Cadence 的衍生项目,Temporal 对于长期运行的工作流采用了事件溯源 (event-sourcing) 模式,因此它们可以在进程或主机的崩溃后恢复。尽管我们不推荐在微服务架构中使用分布式事务,但如果你确实需要分布式事务或者长期运行的 Sagas,你或许会对 Temporal 有兴趣。

点击【阅读原文】查看最新一期技术雷达


- 相关阅读 -

第26期技术雷达正式发布!部分内容抢先了解

点击【阅读原文】获取本期完整技术雷达。

本文版权属Thoughtworks公司所有,如需转载请在后台留言联系。

0 人点赞