Enable javascript in your browser for better experience. Need to know to enable it? Go here.

工具

采纳 ?

  • 代码签名是发布 iOS 应用中的一步。虽然这一步已经有 Apple 的工具链支持,但过程仍易出错,充满了意外和不便之处。我们非常高兴地告诉你, fastlane 已经成为了我们自动发布移动应用时的选择。 fastlane 为代码签名提供了一个更好的解决方案 —— match 。它已被集成在 fastlane 顺滑的流程中,并且为管理团队的代码签名实现了一个新的方法。这种方法并不将签名密钥缺省存入开发者 macOS 的钥匙串中,而是将密钥与证书存入一个 Git 仓库中。这不仅让新上项目的成员更加方便地设置开发机器,而且在我们的体验中,这也是把代码签名融入持续交付流水线的最简单的方式了。

试验 ?

  • 近年来,工作流管理工具越来越受到大家的关注,不管它是专注某个特定领域还是领域无关,这样的趋势归功于越来越多的数据处理流水线以及机器学习(ML)模型开发流程的自动化。Airflow 是早期开源的工作流编排引擎之一,它用代码将流水线定义为有向无环图(DAGs),这是对传统 XML/YAML 定义方式的一大改进。尽管 Airflow 仍然是被广泛使用的编排工具之一,但是我们还是鼓励你根据实际情况评估其他工具。例如, Prefect , 它的关键特性是支持动态的数据处理任务,任务本身通过 Python 范型函数实现。如果你需要和 Kubernetes 深度集成,那么可以考虑 Argo 。如果你需要编排机器学习(ML)工作流,那么 KubeflowMLflow 可能更合适。考虑到越来越多的新工具不断涌现,再加上 Airflow 本身的功能短板(比如缺少对动态工作流的支持,中心化的流水线调度机制),我们不再推荐 Airflow 作为首选的编排工具。

    我们相信,随着流式处理越来越多地用于数据分析和数据流水线,以及通过去中心化的 Data Mesh来管理数据,人们使用编排工具来定义和管理复杂数据流水线的需求会越来越少。

  • Batect 持续赢得我们开发者的欢迎,并被很多人作为配置本地开发和测试环境的默认方式。这个开源工具(碰巧由一名 Thoughtworker 开发)基于 Docker ,让设置和分享构建环境变得特别简单。这样,Batect 就可以成为你构建系统的入口,取代那个 “check out and go” 方法里无处不在的go脚本。Batect 会根据开发者的反馈持续演进,最近它新增了对 Docker BuildKit 和 Shell tab 补全的支持。

  • Berglas 是一款用来管理 Google 云平台(GCP)上私密信息的工具。我们此前已经推荐过“密码即服务”作为在现代分布式架构中存储和分享私密信息的技术,GCP 为此提供了 Secret Manager,而 Berglas 与 Secret Manager 配合使用效果良好。这对那些尚未直接集成 Secret Manager 的 GCP 服务来说尤其有用,在这种情况下,另一选择则是自行编写代码或脚本。Berglas 作为命令行工具和库,同时也能在密码即服务以外的场景中派上用场。Berglas 的作者——恰好也正是 HashiCorp Vault 的原作者,他目前正在 Google 工作,但 Berglas 并不是 Google 的官方工具。

  • Contrast Security 提供一个包括了静态应用安全测试(static application security testing,SAST)、交互式应用安全测试(interactive application security testing,IAST)、开源扫描、运行时应用自保护(runtime application self-protection 、RASP)等多种组件的安全平台。至今它已经有几年历史了,我们也在多个项目上使用过它。关于 Contrast 平台,我们尤其喜欢的一点是它的运行时库分析。它帮助我们定位没被使用的库,这反过来帮助了我们对漏洞安排优先级,并移除掉潜在未使用的库。这和与日俱增的保障软件供应链安全的重要性密切相关。我们也相当喜欢它的IAST组件。我们发现它在持续交付(continuous delivery,CD)流水线中很有效率,误报更少,并且能发现相当范围的漏洞。

  • Dive 是一个针对 Docker 镜像的分析工具,用于检查镜像文件中的每一层级、识别每一层上发生的变化。Dive 可以估测出镜像文件的镜像效率已浪费空间,还能集成到持续集成(CI)流水线,根据效率得分或者已浪费空间让构建失败。我们已经在一些项目上使用了该工具,实践证明它的确非常有用,尤其在你构建镜像时,对额外的工具或空间消耗容忍度极低的情况下。

  • 我们的团队一直都在说使用 Lens 可视化和管理 Kubernetes 集群的良好体验。Lens被称为“Kubernetes的IDE”,它让与Kubernetes集群的交互成为可能,而不需要你记住命令或显示文件结构。Kubernetes可能很复杂,我们知道集群指标和部署负载的可视化工具可以节省时间,并减少维护Kubernetes集群的人力成本。Lens没有将维护Kubernetes的复杂工作隐藏在简单操作的UI界面之后,而是引入了管理员可以从命令行运行的工具。但是对于正在运行的集群,要谨慎使用UI交互方式修改,我们通常倾向于将基础架构变更 用代码实现 ,这样它们是可重复的、可测试的,并且不容易出现人为错误。不过,Lens确实是一款很好的一站式工具,可以交互式地浏览和理解集群状态。

  • 多年来,我们一直在争论是否应该把 monorepos 放入技术雷达中。 每次我们得出的结论都是:monorepos 引入的代价需要进行细致入微的讨论,该技术“太复杂了以至于无法进入技术雷达”。 现在我们看到 JavaScript 社区对 monorepos 越来越感兴趣,例如,在这期播客中讨论的构建由微前端组成的应用程序。 这是否是一个好主意,很大程度上取决于你的实际情况,我们当然不想给出一般性建议。 我们想要评论的是工具。 在团队中,我们看到了纷纷舍弃 Lerna ,而强烈倾向于使用 Nx 来管理基于JavaScript 的 monorepos。

  • Wav2Vec 2.0 是用于语音识别的自我监督学习框架。 在这个框架里,模型被分为两个阶段进行训练。 首先,它从使用未标记数据的自我监督模式开始,并尝试实现最佳的语音表达。 然后它进行有监督的微调整,在此期间,已被标记的数据指导模型去预测特定的单词或音素。使用 Wav2Vec 后,我们发现它的方法非常强大,即使有标记数据的可用性有限,它也可以为区域语言构建自动语音识别模型。

评估 ?

  • cert-manager 是一款在 Kubernetes 集群里管理X.509证书的工具。它将证书和签发者建模为最高级的资源类型,并将证书作为服务安全地提供给工作在 Kubernetes 集群上的开发人员和应用程序。得益于对 Let's EncryptHashiCorp Vault 和 Venafi 的内置支持, cert-manager 是一款非常有趣的,值得评估的证书管理工具。

  • 利益相关者越来越希望企业考虑到其决策对外部环境的影响,正如环境、社会和公司治理 (ESG) 投资和员工围绕气候变化积极行动的兴起所证明的那样。迁移到云提供了更高效使用能源的潜力——云提供商有更大的规模来证明对绿色能源和研发的投资是合理的——但云用户的软件抽象的缺点是,这些抽象也隐藏了对能源的影响,因为真实的数据中心被隐藏起来,并且是由另一家公司提供的资金。 Cloud Carbon Footprint 是一款新的开源工具,它通过云 API 提供了基于 AWS、GCP 和 Azure 使用情况的碳排放估算的可视化。除了使用 Etsy 的 Cloud Jewels 等启发式方法来估算能源消耗,它还利用了像云区域所在地的基础能源网的碳强度(GCP 已经发布 了此数据)这样的公共数据源,将能源消耗换算为碳排放量。这种云区域与基础能源网碳强度的关联,为将高能耗工作负载转移到提供更绿色能源的区域提供了推动力。

  • JetBrains 的协作编码工具 Code With Me 在远程优先的世界越来越受欢迎,因为许多团队都在使用各种 JetBrains 工具。与其他远程协作工具如 VSCode Visual Studio Live Share 相比,Code With Me 为开发团队提供了更好的远程结对编程和协作体验。 Code With Me 在邀请队友加入 IDE 项目并实时协作的能力值得探索。 但是,我们已经看到了它在无缝重构方面的一些限制,以及高延迟环境中的一些问题。 我们将持续在该领域关注这个工具。

  • 本期技术雷达引入了两款使用抽象语法树表示进行搜索和替换代码的工具。它们与jscodeshift有相似的定位,但包含适用于多种编程语言的解析器。尽管它们有一些相似之处,但它们在某些方面还是有所不同。其中 Comby 工具的独特之处,在于其简单的命令行界面,该命令行界面是根据awksed等Unix工具的精神设计的。虽然 Unix 命令基于操作匹配文本的正则表达式,但 Comby 使用特定于编程语言结构的模式语法,并在搜索之前解析代码。这有助于开发人员在大型代码库中搜索结构模式。和sed一样,Comby 可以用新的结构替换它匹配的模式。这对于大型代码库进行自动批量更改,或在一组微服务存储库中进行重复更改非常有用。由于这些工具相当新,我们希望看到一系列尚未发现的创造性用途。

  • Conftest 是一款为结构化配置数据编写测试的工具。它使用开放策略代理 (OPA)中的策略定义语言 Rego ,来为 Kubernetes 的配置文件、 Tekton 的 pipeline 定义文件、甚至是 Terraform 的计划文件编写测试。配置是基础设施的的关键部分,我们推荐您评估使用 Conftest 来进行假设验证并得到快速反馈。

  • Sigstore 是云原生计算基金会(Cloud Native Computing Foundation,CNCF)旗下的项目,旨在简化软件签名和透明度。其中的 Cosign 用于容器签名及验证。Cosign 不仅支持 Docker 和开放容器计划(Open Container Initiative,OCI)镜像,还支持可以存储在容器注册表中的其他类型镜像。技术雷达介绍过功能类似的 Docker Notary。但 Notary v1 的问题在于需要维护单独的 Notary 服务器,而不能原生集成在容器注册表中。Cosign 将签名与镜像一起存储在注册表中,因此不存在这个问题。目前 Cosign 可以通过 Webhook 与 GitHub actionsKubernetes 集成,并可以进一步集成在流水线中。我们已经在一些项目中使用了 Cosign,效果不错。

  • Crossplane是基于Kubernetes Operator模式实现的另一种类型的工具,但它的副作用延伸到了Kubernetes集群之外。在上一期技术雷达中,我们提到了将Kube管理的云服务作为一种技术使用,而Crossplane正是这样做的。其思想是利用Kubernetes控制平面来提供你部署所依赖的云服务,即使它们还没有部署在集群上,例如管理数据库实例、负载平衡器和访问控制策略等。这款工具有两个值得关注的理由。首先,它展示了Kubernetes底层控制平面强大而灵活的执行环境。支持的自定义资源范围没有限制。其次,Crossplane为我们提供了除TerraformCDKPulumi这些常用方案之外的另一种选择。Crossplane为主要的云服务提供了一组预定义的Provider,这些Provider涵盖最通用的配置服务。它并不是要试图成为一个通用的基础设施即代码 (IaC) 工具,而是要成为与Kubernetes部署工作相配套的工具。Crossplane通常与GitOps的实践联系在一起,它是独立的,并且允许你在需要管理外部云资源时,仍然留在Kubernetes的生态系统中。然而,Crossplane并不能帮助配置Kubernetes,你至少需要一个其他的IaC工具来引导集群。

  • gopass 是一个基于 GPG 和 Git 的团队密码管理器。它以 pass 为基础 ,并添加了多项功能,包括交互式搜索和单个树中的多密码存储。自提到 gopass 以来,我们已经在多个项目中使用它,有时甚至超出了它的极限。我们非常期待的一个功能是弃用保密信息的能力。可发现性是已知问题,但无法将保密信息标记为不再使用让这个问题变得更加复杂。不过,最大的问题是伸缩性。当你有 50 多人的团队多年使用同一个存储库时,我们发现存储库的大小可能会增长到数 GB。在新成员入职时重新加密可能需要半个多小时。潜在的问题似乎是,在我们的团队中,一切都在不断变化:人来人往,密钥转手,架构不断发展,添加新密钥,不再需要旧密钥。当变化较少时,即使对于大量用户,gopass 似乎能很好地工作。

  • Micoo 是拥挤的视觉回归测试工具赛道中又一新入竞争者,它是开源的解决方案,独立完备,通过提供 Docker 镜像实现简单快捷的环境设置。Micoo 还为 Node.js 、 Java 和 Python 提供了不同的客户端,以及 Cypress 插件,方便集成市面上大多数常见的前端UI自动化测试框架或解决方案。尽管 Micoo 没有提供某些基于SaaS或其他商业解决方案的所有功能,但我们的团队已经广泛使用 Micoo ,并获得了积极的体验。他们特别强调了 Micoo 不仅适用于移动端、桌面应用程序,也适用于网页。

  • 有时候,你会遇到一个工具,但在意识到之前,你不会觉得有多需要它;mob 就是这样的工具。对很多团队来说,远程结对编程已是常态,生活在这样的世界当中,如果能拥有一个可以在结对或 远程集体编程 期间帮助无缝切换的工具会非常有效。mob 将所有版本控制的命令和工具隐藏在一个命令行界面后,这让人参与 集体编程更加容易。mob 也为如何远程加入提供了具体建议,例如在 Zoom 当中“偷偷接管屏幕共享”而不是中断屏幕共享,这能保证参与者的视频布局不会发生改变。这样一个有用的工具,这样周到的建议,还有什么不喜欢的?

  • 爱上 Unix 有很多理由,其中一个对行业产生深远影响的是 Unix 的哲学:应用程序应当“只做一件事,而且做好它”。在 Unix 中,一组简单的命令可以被管道串在一起形成更复杂的解决方案,这正体现了 Unix 的哲学。近年来,开发者贡献出了越来越多的 现代 Unix 命令 ,他们通常用 Rust 编写,试图把命令变得更小更快。这些命令引入了附加的功能,比如语法高亮,并且充分支持了现代化终端的特性。它们的目的在于,在原生层面帮助开发者更好的和 git 集成,并能识别出源码文件,例如,batcat 的替代品,它支持分页和语法高亮;exa 替代 ls,它支持显示文件的额外信息;还有 ripgrep,它默认忽略 gitignore、二进制和隐藏文件,是比 grep 更快的替代品。Modern Unix 仓库列举了其中的一些命令。我们很喜欢使用这些 Unix 命令,你也应该试试用它们改善命令行使用体验。不过,注意不要在脚本中用它们代替默认 OS 发行版中的标准命令,这会降低脚本在其他机器上的可移植性。

  • 把密钥当作普通文本放到版本控制(通常是 Github)中是开发者最常犯的错误之一。在某些难以将误提交的密钥内容从遗留代码库移除的情况下,我们认为 Mozilla Sops 工具所提供的加密文本文件中的密钥功能是很有用的。我们在过去也多次提到有类似功能的工具(Blackbox, git-crypt),而 Sops 因几项功能脱颖而出。比如,Sops 集成了 AWS KMS,GCP KMS,以及 Azure Key Vault 等全托管密钥存储服务,可将其作为加密密钥的来源。Sops 也支持跨平台使用,并且支持 PGP key。这使得用户可以在单个文件级别上对密钥进行细粒度的访问控制。同时,Sops 也以纯文本的方式留下了识别密钥,以便通过 git 来定位和比对文本中的原始密钥。我们始终支持能更容易确保开发者安全的事情。但是,也请记住,你并不需要在一开始就把密钥放到源码中。请参阅我们于 2007 年11 月发布的雷达内容 Decoupling secret management from source code

  • 我们持续看到Kubernates在新场景中的应用。比如,Kubernetes 被扩展为在集群之外跨多个基础设施提供商管理运行的资源,或者被用来管理超出 Kubernetes 初始范围的有状态应用程序。这些扩展功能可能正在使用Kubernetes Operator模式:构建具有被管理自定义资源所特定领域知识的控制器。比如,管理有状态应用程序的operator可以使用 Kubernetes 原始类型,自动执行应用程序部署之外的特定任务,例如恢复、备份和升级数据库。

    Operator Framework是一组开源工具,可简化构建和管理Kubernetes operators的生命周期。尽管有多种框架可以帮助你构建 Kubernetes operator,但 Operator Framework 仍然是一个不错的选择。它通过 Operator Lifecycle Manager 模块支持丰富的 operator 生命周期管理;通过 Operator SDK ,它可以支持多种语言,自行构建 operator 代码,并提供用于发布和共享 operator 的 目录。如果你计划构建 Kubernetes operator,我们建议你尝试使用 Operator Framework,从而可靠地加速你的开发。

  • 我们认为对于那些拥有大型复杂API生态系统的组织,特别是当他们已经在使用 Pact 的情况下,非常值得评估一下 Pactflow 。Pactflow 可以管理那些使用 Pact 编写的工作流程和持续部署测试代码,从而降低通往 消费者驱动的契约测试 的门槛。多个生产者和大量不同的消费者之间协作的复杂性往往会让人望而却步。很多团队投入了大量的精力,尝试通过手动的方式来解决这个问题,因此我们认为很值得评估一下 Pactflow,看它是否可以帮我们解决这个问题。

  • Prefect 是一款数据工作流管理工具,可以轻松地在数据管道中添加语义,如重试、动态映射、缓存和失败通知。你可以将 Python 函数标记为任务,并通过函数调用将它们串联起来构建数据流水线。将 Python API 与一些为通用数据操作预定义的任务相结合,这样在评估你的数据流水线工作流需求时,Prefect 会是一个值得考虑的选择。

  • 它可能并不是你每天都需要的工具,但是当你在诊断令人讨厌的网络问题手忙脚乱时,它能帮你获得功能丰富的 HTTP 调试代理。 Proxyman 就是这样一个工具。 我们的一些团队已经使用它有段时间了,作为在 macOS 上 Charles 的直接替代品,我们非常喜欢它最新型的界面和证书管理。

  • 基础设施即代码(infrastructure as code,IaC)的其中一个信条是自动化测试。假设我们的测试金字塔强壮,在底层的代码层面的测试有良好的覆盖,那我们能产出更好而且更安全的基础设施。不幸的是,支持这个领域的工具相当稀缺。Conftest 经常被用于测试 Terraform 的 JSON 和 HCL 代码,然而它是一个普通用途的工具。Regula 是一个有吸引力的替代品。和 Conftest 类似,Regula 以 Open Policy Agent 的 Rego 语言编写的规则,来检查基础设施代码的合法性,但它同时提供了一系列的基础类型来对基础设施配置进行特别的验证。因为两个工具都是基于 Rego 语言的,Regula 规则也可以由 Conftest 运行。然而,Regula 有自己的命令行工具,它可以在流水线上不依赖 Conftest 或者 OPA 来运行测试。我们的开发者认为 Regula 可以节约时间并产出更可读、可维护和简练的测试代码。即便如此,两个工具都只验证基础设施代码。一个完整的测试集应该也去测试基础设施本身,以确保代码被正确地翻译了。

  • 另一个引起我们注意的基于抽象语法树的代码搜索工具是 Sourcegraph 。与开源的 Comby 相比,Sourcegraph 是一个商业工具(有 10 个用户的免费套餐)。 Sourcegraph 特别适合在大型代码库中搜索、导航或交叉引用。你可以通过 Sourcegraph 的网站访问云托管版本,进而搜索公开可用的开源存储库。 Comby 是用于自动执行重复性任务的轻量级命令行工具,而 Sourcegraph 的重点在于理解和导航大型代码库的交互式开发人员工具。与 Comby 类似 sed 的界面不同,Sourcegraph 的自动代码重写功能是由 UI 驱动的,允许用户在修改之前查看变更。由于 Sourcegraph 是一项托管服务,因此它还能够持续监控代码库并在匹配发生时发送警报。

  • Telepresence 是一款帮助缩短代码变更反馈周期的工具,在这之前,这些变更通常需要进行部署才能进行适当的测试。开发人员可以用它将本地机器上运行的进程插入到远程 Kubernetes 集群中,这样本地进程可以访问远程集群的服务和特性,本地服务也可以临时替代集群中的服务。

    在服务集成设置变得有些笨拙的情况下,Telepresence可以提高开发人员的生产力,并实现更有效的本地测试。然而,如果你习惯了使用这样一个聪明的工具,那可能会遭遇到更大的问题。例如,如果你是因为无法为本地开发设置所有必要的依赖而使用了 Telepresence,那更应该去调查设置和架构的复杂度。如果它是你进行服务集成测试的唯一方法,那请参考消费者驱动的契约 测试 或者其他自动化的集成测试方式。

  • 快速反馈是优质开发体验的关键。代码更改后,得到反馈前等待的一两分钟可谓最影响开发流程的。可惜随着应用规模和复杂性的增长,流行的前端构建工具大多已经不够快了。之前我们介绍了esbuild,它通过编译为本机语言而非JavaScript来实现,显著地改善了性能。Vite基于esbuild构建,相比其他工具带来了重大改进。它主要由两个部分组成:一个开发服务器,基于原生ES模块提供了丰富的内建功能,如极快的模块热更新(HMR);以及一套构建指令,它使用Rollup打包你的代码。不同于大多数旧工具,Vite依赖于ES模块,它不提供shim和polyfills,这表示它不兼容那些不支持ES模块的旧浏览器。如果要支持旧浏览器,我们部分团队会在开发时使用Vite,而生产构建时使用其他工具。

暂缓 ?

 
新建
移进/移出
没有变化

无法找到需要的信息?每期技术雷达中的条目都在试图反映我们在过去六个月中的技术洞见,或许你所搜索的内容已经在前几期中出现过。由于我们有太多想要谈论的内容,有时候不得不剔除一些长期没有发生变化的条目。技术雷达来自于我们的主观经验,而非全面的市场分析,所以你可能会找不到自己最在意的技术条目。

无法找到需要的信息?每期技术雷达中的条目都在试图反映我们在过去六个月中的技术洞见,或许你所搜索的内容已经在前几期中出现过。由于我们有太多想要谈论的内容,有时候不得不剔除一些长期没有发生变化的条目。技术雷达来自于我们的主观经验,而非全面的市场分析,所以你可能会找不到自己最在意的技术条目。

Radar

下载第25期技术雷达

English | Español | Português | 中文

Radar

获取最新技术洞见

 

立即订阅

查看存档并阅读往期内容