Каков вариант использования gRPC, где он определенно может преодолеть REST

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


person Andrey Khataev    schedule 13.03.2019    source источник


Ответы (1)


Это сообщение в блоге указывает на то, что gRPC работает лучше, хотя его немного сложнее использовать.

Я думаю, что улучшение производительности происходит за счет использования буферов протокола для передачи данных; Я считаю, что это означает, что данные передаются в двоичном формате, что будет означать повышение производительности, когда у вас будет больше данных, особенно нестроковых данных.

person ActualRandy    schedule 11.11.2019