gRPC
Basics
Qué es gRPC
Es un framework open source que hace uso de RPC (Remote Procedure Call) fue desarrollado por Google, en Marzo de 2015 decide hacerlo de código abierto.
Quiénes usan gRPC
Netflix, Cisco, Jupiter Networks, CoreOS entre otras empresas usan gRPC para la comunicación de sistemas y servicios
Cómo funciona gRPC
Una aplicación (cliente) puede llamar directamente un método que se encuentra en un servidor diferente ya sea en la misma maquina o en otra maquina diferente.
En el servidor de gRPC se implementa una interfaz que permite que cualquier cliente sin importa el lenguaje envíe y reciba mensajes (datos)
Cómo se comunica gRPC
gRPC usa por defecto Protocol Buffers (profobuffer) para su comunicación, los Protobuffers son un mecanismo para serializar los datos similar a como funciona un serializer en DRF
Algunas de las ventajas que tienen los Protobuffers son:
- Son fuertemente tipados
- Los datos serializados son convertidos a bytestings lo que permite que sean más ligeros.
- Tienen valores por defecto (Pro o Contra)
Servicios gRPC
gRPC usa el concepto de definición de servicios, estos servicios son métodos que pueden ser llamados de forma remota pasando ciertos parámetros y retornar una respuesta.
Tipos de Métodos en los servicios
Unary -> El cliente envía un mensaje al server y recibe una respuesta.
Server Stream -> El cliente envía un mensaje al server y el server retorna un stream de mensajes.
Client Stream -> El cliente envía un stream de mensajes al
server y el server retorna un mensaje.
Bidirectional Stream -> Tanto cliente como servidor envían streams
rpc Sayhello(HelloRequest) returns (HelloResponse)
rpc Sayhello(HelloRequest) returns (stream HelloResponse)
rpc Sayhello(stream HelloRequest) returns (HelloResponse)
rpc Sayhello(stream HelloRequest) returns (stream HelloResponse)
gRPC vs. Rest
gRPC | Rest | |
---|---|---|
Formato | Profobuffer (binary code) | Json |
Protocolo | HTTP/2 | HTTP/1.1 |
Peticiones | Unary Client Stream Server Stream Bidirectional Stream |
Request / Response |
Protobuffer
Los profobuffer son los archivos que se usan para definir los servicios (métodos) que se van a usar, cual va a ser el mensaje que reciben y cual el mensaje que responden.
Dentro de las ventajas que encontramos al usar protobuffers podemos mencionar.
- Fuertemente tipados
- Los datos son convertidos a bytestrings reduciendo el tamaño del mensaje
Los archivos protobuffer tiene la extensión .proto
Protobuffer
syntax = "proto2";
// Definición del servicio
service Greeter {
// Definición del método con el mensaje que espera
// y el mensaje que retorna
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// Definición de mensajes
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Los atributos de los mensajes están definidos así:
<tipo de dato> <nombre del atributo> = <id de atributo>;
Protobuffer
Los id de los atributos deben ser únicos.
Si un atributo es eliminado no se debe usar su indice para evitar problema de compatibilidad.
Todos los atributos tienen un valor por defecto dependiendo del tipo de dato.
Preguntas?
gRPC Basics
By gollum23
gRPC Basics
- 212