Я составил простой бенчмаркинг для простейшего случая: отправка строки Hello world через gRPC и отдых в ruby:
# REST example
require 'sinatra'
set :bind, '0.0.0.0'
set :logging, false
get '/' do
'Hello, world!'
end
Пример gRPC основан на официальных примерах
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
class GreeterServer < Helloworld::Greeter::Service
def say_hello(hello_req, _unused_call)
Helloworld::HelloReply.new(message: "Hello #{hello_req.name}")
end
end
развернул этот код на удаленном сервере и запустил тест производительности 1000 запросов (ab
для отдыха и зацикливания запросов клиентов для gRPC) и получил сопоставимые результаты 51 сек против 53 (REST против gRPS)
Итак, я пришел к выводу, что в этом случае (с небольшим количеством данных в ответ) нет никакой выгоды для gRPC. Итак, когда они появятся? Когда размер данных будет величиной в килобайты или даже мегабайты? Или для gRPC существуют существенно разные варианты использования, такие как потоковая передача и дуплексная передача данных между сервером и клиентом?