La serialización de Java es el caballo de batalla de la JVM, donde los fallos de seguridad no parecen llegar a su fin. Además, con las arquitecturas de microservicios en la nube, el intercambio de información entre múltiples plataformas de forma rápida y segura se ha vuelto mas indispensable qu...
La serialización de Java es el caballo de batalla de la JVM, donde los fallos de seguridad no parecen llegar a su fin. Además, con las arquitecturas de microservicios en la nube, el intercambio de información entre múltiples plataformas de forma rápida y segura se ha vuelto mas indispensable que nunca. JSON se ha impuesto como el intercambio de datos en la WEB, pero tiene sus limitaciones: transformar a objetos de json puede resultar lento por su naturaleza basada en texto.
Protocol Buffers, Protobuf, es un mecanismo para serializar datos de forma binaria entre múltiples plataformas. Protobuf es estructurado, compacto, rápido y simple.
¿Cómo utilizar Protobuf en tus aplicaciones distribuídas y servicios? ¿Merece la pena?
En esta charla, través de ejemplos sencillos con proyectos que utilizan Protobuf, espero que descubras esto y mucho más.
Size: 1.05 MB
Language: es
Added: Apr 13, 2021
Slides: 26 pages
Slide Content
Protocol Buffers Fantásticos
y donde encontrarlos
Katia Aresti, Infinispan Team, Red Hat
@karesti
Objetivo y reto de la próxima hora
Compartir el interés de utilizar Protocol Buffers en Java.
@karesti
Serialization in Java - Desde 1997
public class PersonalShopper implements Serializable
{
private String id;
private String name;
private City city;
...
-ObjectInputStream
-ObjectOutputStream
@karesti
“The gift that keeps on giving”
"Ask The Architect" session from the
Devoxx UK 2018 conference,
Oracle's chief architect, Mark
Reinhold, shared his thoughts
about Java’s serialization
mechanism which he called a
“horrible mistake” and a
virtually endless source of security
vulnerabilities.
https://www.infoq.com/articles/java-serialization-aug18/
✅ HTTP/JSON es el estandard en la web, REST API standard
✅ Formato que podemos leer los seres humanos
✅ Javascript Nativo
❗ Marshalling lento para formatos numéricos (problemas de latencia)
❗No es tan eficiente en la red (compresión de datos ayuda)
❗Sistema de tipos pobre
❗Java <-> Json Jackson, Gson
@karesti
@karesti
Protocol buffers - Protobuf
●Google (utilizado masivamente en interno)
●Formato Binario
●Open Source desde 2008
●Interoperabilidad entre muchos lenguajes languages: C++, C#, Java, Dart,
Python,Go
●Estructurado tipo XML, más ligero, compacto y rápido
●Mejor rendimiento que JSON
https://github.com/protocolbuffers/protobuf
@karesti
Paso 1: Define tu *.proto esquema
syntax = "proto2";
package mycompany;
message PersonalShopper {
optional string id = 1;
optional string name = 2;
optional string city = 3;
}
@karesti
Paso 2: Compila y genera el código
People.PersonalShopper shopper1 =
People.PersonalShopper.newBuilder()
.setId(UUID.randomUUID().toString())
.setCity("BILBAO")
.setName("Oihana").build();
…
shopper1.writeTo(output);
@karesti
Demo
Protoc
@karesti
Algunos lugares donde encontramos Protobuf
@karesti
Caso 1: gRPC
Remote Procedure Call (g-google)
https://grpc.io/docs/what-is-grpc/introduction/
gRPC Conf 2020
@karesti
gRPC + Quarkus
https://quarkus.io/blog/quarkus-grpc/ by Clément Escoffier
@karesti
Demo
gRPC
@karesti
Caso 2: Infinispan (Datagrid )
●100% Open-source, In-memory Distributed Data
Store*
○~ Redis, Apache Ignite, Hazelcast
●Cachés distribuidas con múltiples casos de uso
●Diseñado para soportar 50.000 peticiones en
paralelo
●High Availability/High Scalability
@karesti
Client/Server
Data
Data lives here
Defines encodings
Client APP
Connect a client
(Java, Node, C#...)
Use a marshaller
@karesti
Comparing Cache Encodings
Marshalled
Java
Text Protobuf
Infinispan Server Web Console ✅ + ❌ ✅ ✅
REST Client ✅ ✅ ✅
Java Hotrod* Client ✅ ✅ ✅
Other Hotrod Clients (C#, Node…) ❌ ✅ ✅
Search ✅ + ❌ ❌ ✅
Custom Java Objects - ❌ ✅
* Hot Rod is the Infinispan binary communication protocol implemented by Infinispan Server