Какой вариант использования для gRPC, где он определенно может преодолеть REST? - PullRequest
1 голос
/ 13 марта 2019

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

...