Guía de buenas prácticas para el desarrollo sobre Onesait Platform

Guía de buenas prácticas para el desarrollo sobre Onesait Platform

Trabajo en proceso

Introducción  

En este artículo, exploraremos una serie de buenas prácticas fundamentales para trabajar con Onesait Platform. Estas prácticas proporcionarán un marco sólido para aprovechar al máximo las capacidades de la plataforma y lograr los objetivos de negocio de manera eficiente y efectiva.  

Una vez dispongamos de nuestros entornos con la Plataforma instalada , podremos empezar a trabajar con la plataforma. Donde seguiremos diferentes pasos en el desarrollo y creación de elementos, optimizando y facilitando el desarrollo.  

image-20240412-071251.png

Arranque del proyecto  

Paso 0: Disponer de herramientas necesarias

Antes de comenzar un proyecto nuevo, debemos de disponer de todas aquellas herramientas y sistemas que nos darán soporte en el desarrollo continuo de nuestra solución. Por ello, necesitaremos los siguientes recursos:  

  1. Repositorio GIT: Es de obligatoriedad disponer de un repositorio, el cual utilizaremos como para el versionado de conceptos sobre GIT, facilitando no solo la migración entre entornos, sino también restauración completa o de manera individual de conceptos de plataforma.  

  2. Correo electrónico para el proyecto: el cual configuraremos para el envío de notificaciones y enlace del sistema. 

  3. Registry y Jenkins: Si en nuestro proyecto involucrados microservicios adicionales y que debemos de gestionar, es necesario disponer de un registry para las imágenes y un Jenkins para la configuración CI/CD mediante el soporte que ofrece Onesait Platform para este objetivo.

Paso 1: Configuración inicial en el Control Panel  

Antes de iniciar cualquier desarrollo o creación de conceptos en plataforma, debemos de adaptar nuestro sistema al proyecto mediante nuestro usuario administrador, para ello:  

  1. Adaptación del menú del control panel: para facilitar el trabajo, deberemos de ajustar y configurar el menú del controlpanel, dejando únicamente aquellos accesos habilitados por los módulos desplegados. Para ello desde el menú de configuración del usuario administración, podremos acceder a la gestión del menú.  

image-20240412-071310.png

Podremos acceder y modificar la estructura del menú para cada uno de los roles que tenemos definidos.  

image-20240412-071314.png

Editando cada rol, podremos eliminar aquellas partes del menú que no utilizaremos en nuestro proyecto. 

image-20240412-071346.png
  1. Configuraremos nuestro proyecto GIT para disponer del versionado de todos y cada uno de los conceptos generados en la plataforma, accediendo a version control > configuration. Y habilitaremos el versionado 

Paso 2: Creación de mi Aplicación

Una vez configurado nuestro entorno, generaremos nuestra aplicación, que será donde agrupemos todos los conceptos de plataforma y usuarios, generando un espacio colaborativo de trabajo.  

A partir de aquí, deberemos de trabajar con un rol analytics, ya que el rol administrador está reservado para la gestión y administración del entorno. 

Para la configuración de la aplicación debemos de crear espacio de trabajo. Desde el apartado development>my Apps daremos de alta nuestra nueva aplicación, donde posteriormente podremos ir asociando los diferentes recursos y gestionando las autorizaciones de los diferentes usuarios asociados.  

 

image-20240412-071435.png

 Una vez generado el espacio de trabajo, generaremos la aplicación deberemos de seguir los siguientes pasos: 

  1. Como primer paso y primordial, generaremos un Realm nuevo o asociar uno ya generado, el cual nos servirá no solo para gestionar desarrolladores, sino también para los roles de los usuarios finales de nuestra aplicación. 

image-20240412-071504.png
  1. En este apartado podremos añadir y generar cualesquiera recursos desde nuestra pantalla de la aplicación, tanto en la creación como en la edición de la misma. En el Paso 2, veremos cada tipo disponible. 

image-20240412-071641.png

  1. Por último, desde nuestra aplicación asociaremos el front que dispondrá nuestra aplicación web, como veremos en el último paso de nuestro proyecto.

Trabajando con Plataforma

Existen unas buenas prácticas de aplicación general al uso de plataforma y luego unas buenas prácticas para cada componente, estas se han agrupado por tipo de procesamiento en plataforma: Modelado de Datos, Adquisición, Procesamiento y Publicación.

Generales

  • Usar siempre una Aplicación como agrupador lógico para el desarrollo de plataforma.

  • Trabajar con usuarios nominales y no con usuarios genéricos.

Modelado de datos

El pilar principal de la plataforma es el dato, a continuación definimos las buenas prácticas no solo para la generación de entidades sino también para los datasources que utilizaremos para enriquecer el resto de conceptos que generaremos.  

Generación de Entidades 

Las pautas que se definen a continuación, tienen la finalidad de seguir y mantener una estructura similar para la generación de todas las entidades y para su posterior utilización. Para ello deberemos definir una estructura de nomenclatura para la creación de entidades (tanto para entidades como para cualquier concepto de plataforma) 

  • El nombre 

  • El nombre de todas las entidades las definiremos con minúsculas: entidad. 

  • Si queremos utilizar guiones para la separación entre pablaras en una entidad, siempre se utilizará guion bajo para la generación: entidad_casa 

  • Nunca se utilizarán signos de puntuación para la definición de una nueva entidad.  

  • Todas las reglas definidas previamente, son similares para la generación de los campos de la entidad.  {“entidad_casa”: { “parametro1”: “valor1”, “parametro2”: ”valor”}} 

  • Mejorar tiempos de consultas: para ello, una vez identificado los campos por los que realizaremos las consultas, deberemos de realizar índices, siendo una parte fundamental del diseño y optimización de consultas sobre Mongo.

Consultas sobre entidades

A la hora de realizar un datasource, deberemos de tener varias cosas en cuenta:  

  1. Utiliza Alias de Tabla Descriptivos: Asigna alias significativos a las tablas en la consulta para mejorar la legibilidad y comprensión del código 

SELECT o.order_id, c.customer_name  FROM orders o  JOIN customers c ON o.customer_id = c.customer_id;
  1. Evita el uso de "SELECT * ": Especifica solo las columnas necesarias en la cláusula SELECT en lugar de seleccionar todas las columnas de la tabla. Esto mejora el rendimiento y evita la transferencia de datos innecesarios. 

SELECT customer_id, customer_name  FROM customers; 
  1. Utiliza JOIN en lugar de Subconsultas: En general, es preferible utilizar la sintaxis JOIN para combinar tablas en lugar de subconsultas. Esto suele ser más eficiente y fácil de entender. 

SELECT o.order_id, c.customer_name  FROM orders o  JOIN customers c ON o.customer_id = c.customer_id; 
  1. Evita las Funciones en las Condiciones WHERE: Evita utilizar funciones en las condiciones WHERE, ya que pueden disminuir el rendimiento de la consulta. En su lugar, evalúa las funciones antes de la consulta o utiliza índices calculados si es necesario. 

-- Evitar  SELECT *  FROM products  WHERE YEAR(date_added) = 2023;    -- Preferible  SELECT *  FROM products  WHERE date_added >= '2023-01-01' AND date_added < '2024-01-01'; 
  1. Usa Paréntesis para Clarificar la Lógica de las Condiciones: Utiliza paréntesis para agrupar las condiciones y hacer la lógica de la consulta más clara, especialmente cuando se combinan AND y OR. 

SELECT *  FROM products  WHERE (category = 'Electronics' AND price > 100)     OR (category = 'Clothing' AND price > 50); 
  1. Evita el Uso Excesivo de Subconsultas: Las subconsultas pueden ser útiles, pero su uso excesivo puede hacer que las consultas sean difíciles de mantener y optimizar. Si es posible, busca formas de reescribir la consulta sin subconsultas. 

-- Evitar  SELECT *  FROM orders  WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');    -- Preferible  SELECT o.*  FROM orders o  JOIN customers c ON o.customer_id = c.customer_id  WHERE c.country = 'USA'; 
  1. Mejorar tiempos de consultas: para ello, una vez identificado los campos por los que realizaremos las consultas, deberemos de realizar índices, siendo una parte fundamental del diseño y optimización de consultas sobre Mongo. 

image-20240412-072019.png

(Adaptación por BBDD Completar)

Adquisición de información 

DataFlow 

El módulo de Dataflow proporciona una interfaz visual para la creación de flujos de datos de manera rápida y eficiente. En este punto, exploraremos una serie de buenas prácticas que ayudarán a los desarrolladores a trabajar de manera efectiva con esta herramienta. 

  1. Comprende la Plataforma: Dataflow está basado en la herramienta open-source StreamSets, potenciada con librerías específicas de Onesait Platform. Es esencial conocer todas las posibilidades que ofrece la plataforma, ya que no solo facilitan el trabajo, sino que optimizan las funcionalidades añadidas. 

image-20240412-072056.png
  1. Organiza tu Flujo: Divide el flujo en módulos o subflujos para mantenerlo ordenado y fácil de entender. Además, utiliza etiquetas y descripciones para documentar y facilitar el entendimiento del flujo. 

  2. Optimiza tu Flujo: Diseña tus flujos de manera eficiente para maximizar el rendimiento: 

  • Evita el uso excesivo de etapas y conexiones innecesarias. 

  • Utiliza etapas específicas de StreamSets en lugar de scripts personalizados siempre que sea posible para mejorar la eficiencia. 

  • Implementa estrategias de almacenamiento en memoria para evitar la repetición de tareas costosas, como consultas a bases de datos externas. 

  • Dependiendo de lVolumen de datos / etapas intermedias 

  • RAM volumen de datos. 

  1. Gestión del Ciclo de Vida: Utiliza el sistema de versionado sobre GIT ofrecido por la plataforma, para realizar un seguimiento de los cambios en tus pipelines y facilitar la colaboración entre equipos. Del mismo modo, documenta tus pipelines de manera exhaustiva, incluyendo arquitectura, diseño y configuración. Esto facilitará la comprensión y el mantenimiento a lo largo del tiempo. 

  2. Pruebas y Validación: crear test automáticos para garantizar su correcto funcionamiento y te ayudará a detectar posibles problemas antes de la implementación.  

  3. Amplía tus Conocimientos: Explora la documentación oficial de StreamSets y mantente informado sobre los avances en la comunidad.  En esta documentación.En esta documentación, encontrarás guías detalladas, tutoriales, referencia de API y otros recursos para ayudarte a utilizar y entender StreamSets Data Collector, Control Hub y otras herramientas ofrecidas por StreamSets para el procesamiento de datos en tiempo real. ( 

(onesait platform Dataflow V 3.23.1) 

Procesamiento de la información 

Flow Engine 

El módulo de Flow Engine, permite la programación visual mediante la creación de flujos de trabajo de forma rápida y eficiente. En este punto, exploraremos una serie de buenas prácticas que ayudarán a los desarrolladores a la hora de trabajar con la herramienta. 

  1. Explota la plataforma: Flow Engine, está basado en la herramienta open-source de Node-red y está potenciada con librerías específicas de Onesait Platform, que facilitan la orquestación e interacción con el resto de elementos. Para una buena práctica en el desarrollo, es imprescindible conocer todas las posibilidades que brinda plataforma y no solo facilitan el trabajo, sino optimiza las funcionalidades añadidas. 

image-20240412-072203.png
  1. Organiza tu flujo: en módulos o subflujos para mantenerlo ordenado y fácil de entender. Utiliza nodos de función para encapsular lógica compleja y promover la reutilización. Del mismo modo, recomendamos la utilización de anotaciones, lo cual facilitará en un futuro el trabajo a otros desarrolladores.  

image-20240412-072218.png

 

  1. Optimiza tu flujo: Diseña tus flujos de manera eficiente para minimizar el tiempo de procesamiento y maximizar el rendimiento:  

  • Evita el uso excesivo de nodos y conexiones innecesarias que puedan ralentizar el flujo. 

  • Limita el uso de funciones, aunque los nodos de función son versátiles, pueden ser menos eficientes que los nodos específicos. Utilízalos con moderación y considera si hay nodos específicos que puedan hacer el trabajo de manera más eficiente. 

  • Implementa Estrategias de Almacenamiento en Memoria, a partir de nodos de almacenamiento en memoria, como el nodo "Context", para almacenar datos temporalmente y evitar la repetición de tareas costosas, como consultas a bases de datos.

  1. Gestión del Ciclo de Vida: Utiliza el sistema de versionado sobre GIT ofrecido por la plataforma, para realizar un seguimiento de los cambios y facilitar la colaboración entre equipos. Del mismo modo, documenta tus flujos de manera exhaustiva, incluyendo su arquitectura, diseño y configuración. Esto facilitará la comprensión y el mantenimiento de tus flujos a lo largo del tiempo. 

  2. Pruebas y valida tu flujo: Realiza pruebas para validar el comportamiento de tus flujos en diferentes escenarios y condiciones. Lo cual permitirá confirmar su correcto funcionamiento.  

  3. Amplía tus conocimientos:  Explorar la documentación oficial e informarte sobre los avances en la comunidad, brinda valiosa información adicional y apoyo para tu desarrollo. 

  1. Expande el potencial de Flow Engine: Además de ampliar tus conocimientos, otra buena práctica fundamental en el desarrollo con Node-RED es aprovechar al máximo su flexibilidad y extensibilidad, mediante la integración de otras bibliotecas y herramientas que amplíen las funcionalidades del Flow engine.  

Además, también puedes explorar las bibliotecas disponibles directamente desde el editor de Node-RED. 

Publicación y visualización 

Api Manager

El módulo de Api Manager dispone de todas las configuraciones y gestión administrador por la misma plataforma, cubriendo gran parte de las buenas prácticas de la generación de APIS REST, como diseño basado en RestFul, validación de información, seguridad etc. En este punto lo que debemos de tener en cuenta es: 

  1. Utilización del versionado sobre GIT de cada API generada, permitiendo la evolución controlada de la API sin romper la compatibilidad con las versiones anteriores. 

  2. Genera una documentación clara y completa de cada API, que incluya detalles sobre los puntos finales, parámetros, tipos de respuesta y ejemplos de uso. 

  3. Expande el Potencial del API Manager: conocer e identificar las posibilidades y alcance que nos ofrece plataforma, es primordial para sacar el mayor potencial a la plataforma. Por ello se disponen de ejemplos y guías de trabajo del Api Manager