API Stack – Broker, Server, y REST de Catapult

Introducción

En las últimas dos versiones, Catapult ha presentado algunos cambios arquitectónicos en la forma en que varias partes de la pila de tecnología trabajan juntas. Con la versión actual de Catapult, 0.5.0.1 (Elephant), la funcionalidad de la arquitectura está más “firme sobre sobre piedra”, por así decirlo, y estas opciones de diseño continuarán abriéndose camino en el hito de la versión F.

Si ha ejecutado “Catapult Bootstrap” por Tech Bureau, puede ver varios procesos que registran su actividad a la vez. Ilustra cómo Catapult utiliza varios componentes diferentes para ejecutar la Blockchain y proporciona un acceso fácil para los desarrolladores.

El propósito de este artículo es aclarar qué hacen estos diferentes componentes, cómo funcionan juntos y, en general, brindan más información sobre cómo ejecutar su propio nodo Catapult.

Tenga en cuenta que este artículo es específico de Catapult versión 0.5.0.1 en el momento de su escritura. 

Visión General

Crédito completo  mincoshi  por los diagramas. 

La figura anterior se refiere a la relación entre el nodo de API de Catapult y los procesos asociados. Cada componente, catapult.server, catapult.broker y catapult-rest, todos trabajan juntos de forma asíncrona. Los clientes también reaccionan de forma asíncrona al catapult-resto mediante websockets y el enfoque reactivo implementado en los SDK de Catapult.

Los datos fluyen desde la parte de la API catapult.server a una cola basada en archivos (llamada spool). En doonde el  catapult.broker lee y borra de acuerdo con esto. El catapult.broker luego escribe datos en mongoDB, de los cuales el proceso catapult-rest se lee y proporciona puntos finales REST fáciles de usar.

En total, esto compone cuatro componentes (incluido mongoDB). Cada una de estas partes son procesos separados que pueden ejecutarse en instancias separadas. Por ejemplo, catapult-service-bootstrap ejecuta cada uno de los cuatro componentes en un contenedor Docker separado, pero utiliza el mismo conjunto de directorios sin problemas:

// Log on excerpt when bootstrap is started
Creating docker_api-node-broker-0_1 … done
Creating docker_db_1 … done
Creating docker_peer-node-0_1 … done
Creating docker_peer-node-1_1 … done
Creating docker_api-node-0_1 … done
Creating docker_rest-gateway_1 … done

En este registro de catapult-service-bootstrap, podemos ver dos cosas sucediendo:

  1. Se están inicializando dos nodos iguales (peer-node-0_1 y peer-node-1_1). Estos manejan tareas de nodo críticas, como el consenso.
  1. Los cuatro componentes mencionados anteriormente: mongoDB (db_1), el nodo API catapult.server (api-node-0_1), catapult.broker (api-node-broker-0_1) y la instancia de catapult-rest (rest-gateway_1). Estos se utilizan para fines de API.

Ahora que tenemos una idea general de cómo estos componentes trabajan juntos, podemos desglosarlos uno por uno para una mejor comprensión:

catapult.server

El catapult.server es el núcleo de Catapult. Es responsable de conectarse a otros nodos, el consenso y la sincronización con otros pares. catapult.server escribe cada bloque en el directorio de spool a medida que avanza el blockchain.Así mismo también acepta y confirma transacciones de catapult-rest y devuelve información sobre el propio nodo.

catapult.broker

El aspecto de agente de Catapult es una adición relativamente nuevo stack  de Catapult. Fue introducido en Dragon (0.4.0.1). y resuelve el cuello de botella anterior al tener que escribir en mongoDB después de que los nodos API se hayan sincronizado. Antes de esto, catapult.broker era solo otra extensión de API incluida en catapult.server:

Issue: reduce bottleneck in BlockChainSyncConsumer::commit in API nodes
abierto por Jaguar0625 el 2019-02-05
cerrado  Jaguar0625 el 2019-06-03

Intente poner en ejecución estos  cambios respaldada por archivos y aplicarlos a mongo / zmq mientras lee la ejecución del archivo 

Como se puede ver, ZeroMQ se utiliza para la mensajería asíncrona eficiente. Esto permite a un cliente obtener actualizaciones de estado de blockchain en tiempo real. Una posibilidad interesante con catapult.broker es su posibilidad de escribir en otro tipo de bases de datos en el futuro, lo que permite una mayor flexibilidad.

Catapult.rest

catapult-rest es el componente con el que los desarrolladores interactúan más. Las aplicaciones, como las billeteras, se comunican directamente con esta puerta de enlace REST.

catapult-rest lee la información directamente desde la instancia de mongoDB en la que catapult.broker escribe. catapult-rest también utiliza websockets, que a su vez utilizan el mensaje asíncrono ZMQ de catapult.broker para obtener actualizaciones de estado en tiempo real.

Como se muestra en la figura anterior, parte de la funcionalidad de catapult-rest también incluye la propagación de transacciones del cliente a catapult.server, donde se confirmaron y agregaron a la cadena.

El cliente

Los clientes son los “usuarios finales”, como carteras, aplicaciones web y aplicaciones móviles que interactúan con la Blockchain. Los clientes interactúan con catapult-rest a través de llamadas a la API y websockets.

Conclusión

Este propósito de este artículo es resaltar la naturaleza de trabajo de la pila de Catapult. Cada componente funciona de forma asíncrona para formar un nodo rápido y eficiente con el que los clientes pueden interactuar fácilmente.

Tener múltiples partes móviles a Catapult es realmente una ventaja. En NIS 1, los nodos P2P y API se combinan en uno; lo que significa que una simple actualización significaría actualizar la totalidad del software del nodo.

En Catapult, sin embargo, la abstracción de múltiples procesos permite actualizaciones fáciles solo en ciertas partes de la pila, es decir, solo en la capa REST sin alterar el software del nodo central.

Si bien esta configuración puede parecer compleja, en el momento del lanzamiento veremos que se empaquetará de una manera fácil de abordar.

¡Felicitaciones a @MIJ1024  por este asombroso artículo y el desglose de Catapult!

Links 

Repositorios de Github 

nemtech

Centro de Desarrolo de NEM

https://nemtech.github.io

Documentos Relacionados

https://nemtech.github.io/en/concepts/node.html

https://nemtech.github.io/en/server.html 1

NEM2 Slack

Https://Join.Slack.Com/t/nem2/shared_invite/enQtMzY4MDc2NTg0ODgyLTFhZjgxM2NhYTQ1MTY1Mjk0ZDE2ZTJlYzUxYWYxYmJlYjAyY2EwNGM5NzgxMjM4MGEzMDc5ZDIwYTgzZjgyODM

Otra colección de enlaces

https://github.com/mijinc0/my-catapult-docs/blob/master/reverse_lookup.md

Fuente: Foro NEM