gRPC
&
Protocol Buffers
Porque hay vida más allá de REST/JSON
¿Qué es gRPC?
Framework RPC moderno y de alto rendimiento que puede correr en cualquier ambiente, desarrollado inicialmente por google.
¿Qué es RPC?
Técnica para la comunicación entre procesos en una o más computadoras conectadas a una red.
Las RPC son muy utilizadas dentro de la comunicación cliente-servidor. Siendo el cliente el que inicia el proceso solicitando al servidor que ejecute cierto procedimiento o función y enviando este de vuelta el resultado de dicha operación al cliente.
RPC
Workflow
Un proceso básico de RPC puede separarse en 6 estaciones.
- Origen (Origination)
- Presentación/Ordenamiento (Marshalling)
- Emisión (Broadcast)
- Recepción (Reception)
- Procesamiento (Processing)
- Respuesta (Response)
gRPC
Principales usos
- Conecta eficientemente servicios multilenguajes diseñados en arquitectura de microservicios.
- Conecta
dispositivos móviles, Browsers yservicios backend. - Genera
eficientes bibliotecas cliente .
Funcionalidades Core
- Bibliotecas
cliente en 10lenguajes - Comunicación bidireccional con soporte HTTP/2
- Autenticación, Tracing y balanceo de carga conectable
gRPC
Resumen
gRPC está basado en la idea de definir servicios, especificando métodos que pueden se llamados remotamente con parámetros y respuesta con tipos definidos.
Por defecto, gRPC usa Protocol Buffers (¿?) como el lenguaje de definición de interfaces para describir ambas interfaces del servicio y la estructura del payload de los mensajes.
¿Qué son los Protocol Buffers?
Es el Mecanismo extensible creado por Google para serializar data estructurada, independiente del lenguaje o plataforma.
Google desarrollo Protobuf de manera interna desde el 2001, actualmente sigue realizando aportes a los generadores de código en distintos lenguajes.
Los principales objetivos de los ProtoBuf ha sido alcanzar simpleza y alto desempeño, ha sido diseñado para ser más rápido y pequeño que XML.
Protocol Buffers
Para usar un Protocol Buffers se debe:
- Especificar una estructura de datos del mensaje en un archivo .proto, estos archivos se escriben utilizando el lenguaje de descripción de interfaz propio.
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
Protocol Buffers
- Ejecutar el compilador de ProtoBuff, para el lenguaje de la aplicación, sobre el archivo .proto con el objetivo de generar las clases de acceso a los datos. Estas generan métodos accesores para cada campo.
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: person.proto
require 'google/protobuf'
Google::Protobuf::DescriptorPool.generated_pool.build do
add_message "Person" do
optional :name, :string, 1
optional :id, :int32, 2
optional :email, :string, 3
end
end
Person = Google::Protobuf::DescriptorPool.generated_pool.lookup("Person").msgclass
Protocol Buffers
- Incluir las clases generadas en nuestra aplicación y usarlas para generar instancias del mensaje, serializarlas y enviar los mensajes codificados o leer dichos mensajes, deserializarlos y reconstruir las instancias de los mensajes para acceder a sus campos.
john = Person.new()
john.id = 1234
john.name = 'John Doe'
john.mail = 'jdoe@example.com'
Some::Module.method(person: john)
Aplicación gRPC

Diagrama
Aplicación gRPC
Diseño
- Se define el servicio en la sintaxis de protobuf (versión 3)
syntax = "proto3";
package helloworld;
// 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;
}
Aplicación gRPC
Diseño
- Generar (compilar) el código del servicio
protoc --ruby_out=lib \
--grpc_out=lib \
--plugin=protoc-gen-grpc=`which grpc_ruby_plugin` \
./path_to_file.proto
Ruby
$ protoc -I helloworld/ helloworl/helloworld.proto \
--go_out=plugins=grpc:helloworld
Go
Aplicación gRPC
Diseño
- Iniciar el servidor y el cliente
Ruby
Go
$ ruby greeter_server.rb
$ ruby greeter_client.rb
$ go run greeter_client/main.go
$ go run greeter_server/main.go
Aplicación gRPC
Vamos al código
Gracias
gRPC Readme as presentation
By Gustavo Giménez
gRPC Readme as presentation
- 774