开发学院

您的位置:首页>教程>正文

教程正文

gRPC 基准测试

  gRPC旨在支持多种语言的高性能开源RPC。本文描述了性能基准测试工具、测试所考虑的场景以及测试基础设施。

概述

  gRPC是为分布式应用程序的高性能和高生产率而设计的,持续的性能基准测试是gRPC开发工作流程的关键部分。多语言性能测试每小时对主分支运行一次,这些数字会被报告给仪表板进行可视化。

  Multi-language performance dashboard @latest_release (lastest available stable release)

  Multi-language performance dashboard @master (latest dev version)

  C++ detailed performance dashboard @master (latest dev version)

  额外的基准测试提供了对CPU使用情况的精细洞察。

  C++ full-stack microbenchmarks

  C Core filter benchmarks

  C Core shared component benchmarks

  C Core HTTP/2 microbenchmarks

性能测试设计

  每种语言都实现了一个性能测试工作器,该工作器实现了gRPC工作器服务。该服务指示工作人员充当实际基准测试的客户端或服务器,表示为BenchmarkService。该服务有两种方法:

  •   一元RPC:简单请求的一元RPC,指定在响应中返回的字节数

  •   流式传输:一种流式RPC,允许重复ping请求和响应消息,类似于UnaryCall

testing_framework.png

  这些工作人员由一个驱动程序控制,该驱动程序将场景描述( JSON格式)和指定每个工作人员进程的host:port的环境变量作为输入。

测试语言

  作为主服务器上的客户端和服务器,以下语言具有连续的性能测试:

  •   C++

  •   Java

  •   Go

  •   C#

  •   node.js

  •   Python

  •   Ruby

  此外,来自C内核的所有语言在每次请求时都进行有限的性能测试(smoke testing)。

  除了作为性能测试的客户端和服务器端运行之外,所有语言都被测试为针对C++服务器的客户端,以及针对C++客户端的服务器。此测试旨在为给定语言的客户端或服务器实现提供当前的性能上限,而无需测试另一方。

  尽管PHP或移动环境不支持gRPC服务器(这是我们性能测试所需要的),但是他们的客户端性能可以使用用另一种语言编写的代理WorkerService进行基准测试。这个代码是为PHP实现的,但是还没有处于连续测试模式。

测试场景

  有几个重要场景正在测试中,并显示在上面的仪表板中,包括以下场景:

  •   无争用延迟:一次只有一个客户端使用StreamingCall发送单个消息时出现的中值和尾部响应延迟

  •   QPS :当有2个客户端和总共64个信道时的消息/秒速率,每个信道一次有100条未完成的消息使用StreamingCall发送

  •   可伸缩性(对于所选语言):每个服务器核心每秒的消息数

  大多数性能测试都使用安全通信和原型缓冲器。一些C++测试还使用不安全的通信和通用(非原型) API来显示最高性能。将来可能会添加其他场景。

测试基础设施

  所有性能基准都是通过我们的Jenkins测试基础设施在GCE中作为实例运行的。除了上述gRPC性能方案之外,我们还运行基准netperf TCP_RR延迟数,以了解底层网络特性。这些数字显示在我们的仪表板上,有时会因我们的实例在GCE中的分配位置而异。

  大多数测试实例是8核系统,这些用于延迟和QPS测量。对于C++和Java,我们还支持在32核系统上进行QPS测试。所有QPS测试对每台服务器使用两台相同的客户端机器,以确保QPS测量不受客户端限制。