Guía de buenas prácticas para el desarrollo sobre Onesait Platform
- 1 Introducción
- 2 Arranque del proyecto
- 3 Trabajando con Plataforma
- 3.1 Generales
- 3.2 Modelado de datos
- 3.2.1 Generación de Entidades
- 3.2.2 Consultas sobre entidades
- 3.3 Adquisición de información
- 3.3.1 DataFlow
- 3.4 Procesamiento de la información
- 3.4.1 Flow Engine
- 3.5 Publicación y visualización
- 3.5.1 Api Manager
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.
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:
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.
Correo electrónico para el proyecto: el cual configuraremos para el envío de notificaciones y enlace del sistema.
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:
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ú.
Podremos acceder y modificar la estructura del menú para cada uno de los roles que tenemos definidos.
Editando cada rol, podremos eliminar aquellas partes del menú que no utilizaremos en nuestro proyecto.
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.
Una vez generado el espacio de trabajo, generaremos la aplicación deberemos de seguir los siguientes pasos:
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.
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.
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:
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;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; 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;
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'; 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);
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'; 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.
(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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Primordial, conocer e identificar las posibilidades y alcance que nos ofrece plataforma, por ello, no olvides revisar y apoyarte en la documentación disponible en el portal del desarrollador para Flow Engine.
El sitio web oficial de Node-RED, proporciona una guía completa para desarrolladores, que incluye tutoriales, ejemplos y mejores prácticas.
Adicionalmente, explora el foro de la comunidad de Node-RED, donde puedes encontrar discusiones sobre buenas prácticas, consejos y soluciones para problemas comunes.
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:
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.
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.
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