Я сделал простой бенчмаркинг для самого простого случая: отправка строки 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, такие как потоковая передача и дуплексирование данных между сервером и клиентом?