Lección 9: Serialización de mensajes y optimización Flashcards

1
Q

Serialización de mensajes

A

La serialización de mensajes se utiliza para convertir los datos de un objeto a un formato que se pueda almacenar o enviar y volver a recuperar después.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Objeto en lenguaje de programación.

A

Un objeto en un lenguaje de programación es una instancia de una clase con unos valores específicos.

El valor de los datos de un objeto es una estructura de datos almacenada en memoria.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Formatos de serialización

A

XML, JSON, CSV, Binario…
• Pero finalmente todos terminan convertidos a binario.
• Los medios de almacenamiento y red en última instancia
necesitan los datos en binario.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Serializando directamente en binario

A

• Es la opción mas rápida de todas y la que genera resultados mas pequeños (los objetos ocupan menos).

  • Problemas:
    • No está estandarizada, depende de la librería que utilicemos.
    • No suele ser compatible entre lenguajes de programación.
    • A la hora de leer si algo falla es complejo o imposible saber que ha pasado.
    • No podemos ver o hacer “logging” del objeto salvo que tengamos el código de deserialización.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Serializando primero a texto

A
  • Es la opción mas versátil y sencilla pero mucho mas lenta.
  • Los formatos de texto como XML, Json o CSV son estándares.
  • Existen estándares de conversión de texto a binario que entienden todos los lenguajes de programación (character encoding).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Formatos de serialización en texto.

A
  • XML: más completo pero también más lento y pesado.
  • JSON: gana velocidad respecto a XML y también reduce el tamaño.
  • CSV: es el más rápido, pero solo soporta mensajes muy simples.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Serialización binaria: Librerías

A
  • Existen múltiples librerías que intentan resolver el problema de serialización binaria, creando sus propios “estándares”.
  • Algunas como Google Protocol Buffers requieren que especifiquemos como es el objeto y como serializar cada campo.
  • Otras como Kryo leen las clases usando “reflection” y crean sus propios serializadores en tiempo real.
  • No existe ningún estándar en la industria mas allá del uso de librerías.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Serialización binaria: Java

A

• Java incluye por defecto su propia versión de serialización binaria. • Funciona de forma similar a Kryo, no es necesario indicar los
campos a serializar.
• Lo único que necesitamos es que la clase implemente la interfaz
“Serializable”.
• Es relativamente lenta comparada con mecanismos como Kryo o Google Protocol Buffers.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Serialización binaria: ¿cómo funciona?

A
  • El objetivo es convertir un objeto a una secuencia de bytes consecutivos y ser capaces de hacer el paso contrario.
  • Debemos convertir cada tipo simple, cada String, cada sub- objeto, cada lista, cada array a una secuencia de bytes.
  • Cada uno de estos tipos de convierte de forma distinta.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Convirtiendo un entero a binario

A

• Primero necesitamos un array de bytes para contener el resultado.
- Uso de operadores shifr y and binario:
• Shift permite ”desplazar” el valor binario a la derecha o a la izquierda. El operador suele ser “<>”
• And binario realiza un “and” bit a bit. El operador suele ser “&” (solo coge los elementos comunes a ambos sets)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Extracción del entero

A
  • Primero usamos shift para colocar la parte que queremos al final.
  • Después usamos and para extraer únicamente lo que nos interesa.
  • Se pueden serializar en tamaño variable (más lento, pero ocupan menos)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Tamaño enteros

A

4 bytes (32 bits)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Tamaños en bytes de los distintos tipos.

A
  • int -> 4 bytes
  • long -> 8 bytes
  • float -> 4 bytes
  • double -> 8 bytes
  • char -> 1 byte o 2 (4) bytes según el lenguaje
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Char y String según el lenguaje

A

• Un string es un array de “chars”.
• Un char en C o C++ ocupa 1 byte y representa un carácter
ASCII.
• Únicamente puedo representar 256 caracteres distintos.
• En java un char ocupa 2 bytes, son caracteres unicode pensados para representar todo el rango de caracteres posible (árabe, chino, japonés, emoji, etc)
• En unicode puedo representar 65.535 valores distintos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

UTF-8

A
  • Es uno de los tipos de codificación mas utilizados.
  • La mayoría de los ficheros de texto están codificados en UTF-8.
  • Los HTML o CSS de las peticiones web están codificados en UTF-8.
  • UTF-8 soporta el rango de caracteres completo de Unicode.
  • La ventaja es que no siempre utiliza 2 bytes para representar un carácter, depende del tipo de carácter.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

ASCII

A
  • Es un código de caracteres (método que permite convertir un carácter de un lenguaje natural en un símbolo de otro sistema de representación) basado en el alfabeto latino, tal como se usa en inglés moderno.
  • Solo puede representar 128 caracteres (tamaño de 1 byte, 8 bits: solo se usan 7 de los bits, el octavo es el bit de paridad que sirve para comprobar errores).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Unicode

A

Unicode es un estándar de codificación de caracteres diseñado para facilitar el tratamiento informático, transmisión y visualización de textos de numerosos idiomas y disciplinas técnicas, además de textos clásicos de lenguas muertas.

  • Cada caracter ocupa 2 bytes (tiene un montón de combinaciones posibles)
18
Q

Optimización: La importancia del hardware

A

• Para optimizar código es fundamental conocer no solo el lenguaje si no también el hardware sobre el que se ejecuta.
• Uno de los puntos mas importantes es el acceso a datos. • Los procesadores utilizan “caches” para evitar tener que
acceder siempre a memoria.

19
Q

Cache en CPUs modernas

A
  • Cada ”core” tiene sus propios registros y cache L1 y L2

* Los cores comparten una cache común L3

20
Q

Optimización

A
  • Reutilizar objetos y arrays incrementa la posibilidad de que el dato se mantenga en cache, evitando accesos a memoria.
  • Los tipos de datos que asignan memoria en bloque (por ejemplo arrays) son mas eficientes
21
Q

Solución al problema de las colas: patrón disruptor

A
  • Se suelen utilizar “colas” en mercados financieros para desacoplar productores y consumidores.
  • Cada objeto estará en un lugar distinto en la memoria y casi siempre serán posiciones no consecutivas
  • El patrón disruptor intenta resolver estos problemas, aprovechándose del funcionamiento del hardware y las caches.
  • La cola se crea como un buffer circular de tamaño fijo donde todos sus elementos se inicializan a valores por defecto.
  • Se crea toda la memoria necesaria desde el principio.
  • Tenemos 1 puntero de escritura y varios de lectura.
  • Los punteros de lectura no pueden superar al de escritura.
22
Q

Los elementos de un complex type definidos en el XSD deben aparecer en su correspondiente XML en el mismo orden.
Seleccione una:
Verdadero
Falso

A

Falso

23
Q

De las siguientes, ¿cuales son ventajas de serializar objetos en formatos basados en texto como XML o JSON frente a utilizar binario directamente?
Seleccione una o más de una:
a. Los formatos de texto como XML o JSON están estandarizados
b. La conversión de texto a binario sigue formatos estándares que entiende casi cualquier lenguaje de programación
c. Aunque la lectura falle, es posible “leer” los datos del objeto a simple vista para buscar el problema
d. Son mas rápidos que la serialización binaria

A

a. Los formatos de texto como XML o JSON están estandarizados
b. La conversión de texto a binario sigue formatos estándares que entiende casi cualquier lenguaje de programación
c. Aunque la lectura falle, es posible “leer” los datos del objeto a simple vista para buscar el problema

24
Q

Cuando el procesador accede a memoria para obtener un dato, lo extrae y almacena directamente en sus registros internos.
Seleccione una:
Verdadero
Falso

A

Falso

25
Q

Reutilizar objetos y arrays es una buena forma de optimizar, ya que además de evitar crear memoria nueva, aumentamos la posibilidad de que el dato ya se encuentre en la caché del procesador al haberlo usado previamente.
Seleccione una:
Verdadero
Falso

A

Verdadero

26
Q

Para serializar un número entero a binario necesito al menos un byte array 4 bytes de forma que pueda almacenar los 4 bytes que ocupa el entero.
Seleccione una:
Verdadero
Falso

A

Falso

27
Q

Para realizar serialización binaria se suele utilizar operadores como&raquo_space; (shift binario) o & (and binario) para aislar los bytes que se quieren serializar o deserializar.
Seleccione una:
Verdadero
Falso

A

Verdadero

28
Q

Al igual que con anotaciones JAXB para modelar un XSD en Java especificamos el “namespace”, es necesario realizar el mismo proceso con anotaciones Jackson si vamos a preparar la clase para serializar en JSON.
Seleccione una:
Verdadero
Falso

A

Falso

29
Q

La extensión de tipos complejos XSD se modela en Java mediante mecanismos de herencia de clases.
Seleccione una:
Verdadero
Falso

A

Verdadero

30
Q

Un “fallo a caché” se produce cuando el procesador intenta acceder a un dato de memoria y no puede encontrarlo en caché. En ese caso debe buscarlo en memoria que es mas lento que obtenerlo directamente de la caché.
Seleccione una:
Verdadero
Falso

A

Verdadero

31
Q

Los objetos se almacenan en memoria de forma continua para mejorar los tiempos de acceso a los datos del mismo.
Seleccione una:
Verdadero
Falso

A

Falso

32
Q

¿Cuales son las “claves” del patrón disruptor para mejorar el rendimiento de las colas?
Seleccione una o más de una:
a. Se reduce la necesidad de sincronización mediante el uso de punteros de escritura y lectura
b. Toda o casi toda la memoria del disruptor se almacena de forma consecutiva para reducir los “fallos a caché”
c. Se crea toda la memoria en arranque, evitando creación y destrucción de objetos.
d. Utiliza mecanismos de control de hilos de tipo “no bloqueante”

A

a. Se reduce la necesidad de sincronización mediante el uso de punteros de escritura y lectura
b. Toda o casi toda la memoria del disruptor se almacena de forma consecutiva para reducir los “fallos a caché”
c. Se crea toda la memoria en arranque, evitando creación y destrucción de objetos.
d. Utiliza mecanismos de control de hilos de tipo “no bloqueante”

33
Q

El objetivo de serializar un objeto es poder convertirlo a un formato almacenable o enviable y que pueda ser recuperado después.
Seleccione una:
Verdadero
Falso

A

Verdadero

34
Q

Los “charsets” se utilizan para definir el formato de conversión de cadena de texto a binario y viceversa de forma estándar.
Seleccione una:
Verdadero
Falso

A

Verdadero

35
Q

En los procesadores “multi-core” cada core tiene su propia caché y además existe una caché compartida entre todos los cores.
Seleccione una:
Verdadero
Falso

A

Verdadero

36
Q

No es posible modelar elementos de tipo “choice” de un XSD en un objeto Java con anotaciones Jaxb.
Seleccione una:
Verdadero
Falso

A

Falso

37
Q

¿Cuales son algunos los problemas de los mecanismos de colas tradicionales que limitan su rendimiento?
Seleccione una o más de una:
a. Los objetos almacenados no suelen estar en posiciones consecutivas en memoria, incrementando los “fallos a caché”
b. Se crea y destruye memoria continuamente al añadir y eliminar objetos de la cola una vez procesados, lo que requiere tiempo y puede producir problemas de GC en Java

A

a. Los objetos almacenados no suelen estar en posiciones consecutivas en memoria, incrementando los “fallos a caché”
b. Se crea y destruye memoria continuamente al añadir y eliminar objetos de la cola una vez procesados, lo que requiere tiempo y puede producir problemas de GC en Java

38
Q

Algunas limitaciones o problemas de la serialización directamente a binario son…
Seleccione una o más de una:
a. No es compatible entre distintos lenguajes de programación
b. No existe ningún estándar, depende de la librería o del lenguaje utilizado
c. Es difícil encontrar el problema cuando falla el proceso de lectura
d. No podemos hacer logging del objeto recibido a un formato “legible” hasta que no se ha deserializado

A

b. No existe ningún estándar, depende de la librería o del lenguaje utilizado
c. Es difícil encontrar el problema cuando falla el proceso de lectura
d. No podemos hacer logging del objeto recibido a un formato “legible” hasta que no se ha deserializado

39
Q

En Unicode puedo representar hasta 65535 caracteres distintos, permitiéndome representar caracteres de casi cualquier lenguaje como el chino, árabe, japonés, etc.
Seleccione una:
Verdadero
Falso

A

Verdadero

40
Q

El tamaño necesario para almacenar un “char” en binario es estándar en todos los lenguajes de programación
Seleccione una:
Verdadero
Falso

A

Falso

41
Q

La mejor forma de convertir un objeto a binario es almacenar su contenido en bytes tal y como se encuentra en la memoria RAM de la máquina.
Seleccione una:
Verdadero
Falso

A

Falso

42
Q

Para serializar en binario utilizando Java es necesario hacer uso de librerías especiales de serialización de terceros.
Seleccione una:
Verdadero
Falso

A

Falso