RSS

在 ARM64(Linux)上运行 gRPC 和 Protobuf

ARM 处理器最近在许多计算领域变得越来越重要,包括那些传统上被认为是 x86_64 专属的领域。得益于 ARM 生态系统的发展势头,我们可以预期 ARM 平台的采用率将显著增长。对于支持基于 ARM 的平台软件来说,情况亦是如此。

鉴于 gRPC 和协议缓冲器的主要目的是连接分布式系统,它们在支持 ARM 计算方面的作用尤为重要。随着 ARM 云计算的兴起,我们预计许多系统实际上将是 x86 和 ARM 服务器的混合组合,根据需要混合和匹配各个生态系统的特性。gRPC 和协议缓冲器是理想的构建块,可以帮助用户无缝地构建跨多种架构的系统。

为满足 gRPC 用户对 ARM 支持的强烈需求,gRPC 团队已决定官方全面支持部分基于 ARM 的平台。前段时间,我们开始着手测试所有内容并修复遇到的任何问题。今天,我们很高兴地宣布,C++、C#、Go、Java、Node、PHP、Python 和 Ruby 中的 gRPC 和协议缓冲器实现已为 ARM64 Linux 上的生产工作负载做好准备(详见下文)。

当前情况最好通过我们已完成的几个主要领域列表来描述

  • 错误修复/改进: 我们进行了一系列修复,以确保 gRPC 和 protobuf 在 ARM64 Linux 上可靠运行。
  • 软件包与分发: 对于提供特定二进制架构软件包的语言,我们添加了 ARM64 Linux 软件包,并作为我们标准发布流程的一部分,在每个版本中发布它们。拥有即用型二进制软件包极大地改善了开发人员的体验。对于不发布二进制软件包的语言,我们测试了构建过程按预期工作,并且可以在 ARM64 Linux 上毫无问题地安装 gRPC 和 protobuf。
  • 持续测试: 我们投入了大量资源设置持续测试,以确保 gRPC 和 protobuf 得到充分测试并防止未来出现任何回归。测试拥有大量测试和支持多种语言的大型项目无疑是一个挑战,尤其是在 ARM 架构上的开源测试生态系统仍处于起步阶段的情况下,但我们通过交叉编译、模拟测试和在真实硬件上运行测试的组合,成功地测试了 gRPC 和 protobuf。

ARM64 Linux 上 gRPC 和 Protobuf 支持概述

下表显示了按语言划分的详细状态。每个条目总结了 ARM64 Linux 上 gRPC 和 Protobuf 的支持级别。

语言持续测试分发/软件包附加信息
C++✔️使用 cmake 或 bazel 从源代码构建(与 x86_64 上的方法相同)
C#✔️Grpc.Core nuget 软件包现在支持 aarch64 Linux(从 v2.38.1 开始)Grpc.Tools nuget 软件包现在支持在 aarch64 Linux 上进行代码生成
Go✔️ 1使用 golang 中安装库的标准方式(与 x86_64 上的体验相同)
Java✔️每个版本发布的 Maven artifacts 在 aarch64 Linux 上运行良好aarch64 protoc 和 grpc-java protoc 插件随每个版本发布
Node/Javascript✔️使用现有 npm 软件包(它们是平台独立的)
PHP✔️现有 PECL 和 composer 软件包在 aarch64 Linux 上运行良好
Python✔️aarch64 Linux 的预构建 wheels 随每个版本发布(从 v1.38.1 开始)grpcio-tools 软件包现在支持在 aarch64 Linux 上进行代码生成
Ruby✔️aarch64 Linux 的预构建原生 gems 尚不可用。为了使用 grpc-ruby 和 protobuf-ruby,用户需要从源代码构建 gems持续测试已就位并稳定通过,但我们尚未提供预构建软件包。Ruby 中的 gRPC 和 protobuf 可以安全使用,但安装体验欠佳

1 grpc-go 的持续测试已就位,protobuf-go 的持续测试正在进行中。protobuf-go 已在 aarch64 上手动测试,并被发现运行可靠。

ARM64 / aarch64 / ARMv8 术语

虽然 ARM64、aarch64 和 ARMv8 这些术语表示略有不同的事物,但实际上它们经常互换使用。就本文而言,它们基本都指代相同的事物,可以视为同义词。

ARM64 官方支持目前仅限于 Linux

目前,我们仅正式支持 Linux 上的 ARM64 gRPC 和 Protobuf。我们确实意识到对其他平台(例如搭载新 Apple M1 芯片的 MacOS X)的 ARM64 支持也有需求,但其中一些平台带来了显著的挑战(硬件配置、缺乏模拟等)。与其因为这些复杂性而推迟 ARM64 支持的发布,不如首先专注于为 Linux 提供官方 ARM64 支持——这就是我们所做的。

附录:更改/修复/改进列表

grpc/grpc 仓库

grpc/grpc-java 仓库

grpc/grpc-go 仓库

protocolbuffers/protobuf 仓库