Aspectos técnicos sobre Blockchain

Aspectos técnicos sobre Blockchain

En el artículo anterior: “Introducción a Blockchain Empresarial”, conocimos esta tecnología, sus principales características y bondades, junto a su clasificación y algunos casos de uso consolidados. En esta ocasión, aprenderemos sobre los aspectos técnicos que la conforman y presentaremos brevemente cinco de las principales plataformas disponibles para la implementación de un Blockchain empresarial.

Cadena de bloques
El nombre Blockchain deriva de la estructura de datos, donde un grupo de transacciones son agrupadas en bloques, encadenados de manera secuencial. Sin entrar en los detalles de una implementación particular, cada bloque suele estar compuesto por un índice (1, 2, 3, n), una marca de tiempo (fecha y hora de creación), los datos (transacciones o pequeños programas denominados contratos inteligentes), un campo denominado nonce (number only used once) obtenido a través de consenso, y dos hashes (representación alfanumérica de ancho fijo, que se obtiene de aplicar una función criptográfica), el del bloque anterior y el propio.

El cálculo de un hash es una operación matemática sencilla, que entrega un resultado irrepetible, a partir del cual es imposible reconstruir la información de origen. Gracias a la inclusión del hash previo en el bloque actual, cualquier modificación o eliminación de un bloque, invalida automáticamente a todos los siguientes, de aquí que solo pueden ser agregados.

Red entre pares y consenso
Las redes blockchain son siempre distribuidas, del tipo peer-to-peer (P2P, o entre pares). En las mismas, en lugar de confiar en un servidor central, los equipos están directamente conectados unos con otros. Cada integrante contribuye al poder de cómputo (consumido para generar consenso) y al almacenamiento. Se consideran más seguras que una red centralizada, dado que no hay un punto de ataque único, y además ofrecen tiempo de actividad del 100% (la red permanece funcionando mientras haya miembros conectados).

Las información que se envía para ser agregada a la cadena, está criptográficamente firmada por una clave privada, y va acompañada de la correspondiente clave pública, para que los integrantes de la red puedan verificar su origen. Para consolidarse como un nuevo bloque, las partes deben acordar empleando un protocolo de consenso, el cual asegura que la cadena es la misma en cada nodo y que no hay actores maliciosos manipulando los datos.

Los protocolos de consenso, son mecanismos empleados para que los miembros de una red blockchain se pongan de acuerdo. En redes públicas y abiertas, como Bitcoin y Ethereum, se usan protocolos computacionalmente complejos, siendo uno de los más conocidos Proof-of-work (PoW). Básicamente, se busca que además de ser extremadamente difícil de modificar (hace falta entender al detalle cómo funciona y contar con el control de al menos el 51% de la red), sea totalmente inviable intentarlo (precisa equipamiento especializado, basado en dispositivos tales como GPUs o FPGAs, más el consumo de energía para nada despreciable, requerido para volver a calcular el hash de los bloques).

Contratos Inteligentes
Los Smart Contract, son programas del estilo if…then, que se guardan y son ejecutados por el blockchain. Derivan su nombre de principios legales, y la idea es que de manera segura, evitando un posible actor malicioso humano, a partir de cumplirse ciertas condiciones se ejecuten transacciones automáticas.

Existen algunos lenguajes específicos, como Solidity y Vyper, y otros más generales, como Golang, Node y Java. El soporte varía de plataforma en plataforma, habiendo algunas, por lo general destinadas a criptomoneda, que no los soportan.

Principales plataformas empresariales
La implementación de una blockchain a nivel programa informático, lleva al extremo consideraciones respecto a seguridad, rendimiento y escalabilidad del sistema. Es muy poco probable, y nada recomendable si no es el objetivo crear una nueva alternativa, realizar una codificación desde cero. En su lugar, disponemos de cientos de plataformas libres, una característica destacable dada la seguridad y transparencia que deben brindar, listas para ser implementadas. Si bien muchas están destinadas a criptomonedas, las hay también para su uso empresarial. A continuación daremos una breve descripción de cinco de las plataformas más conocidas con dicha finalidad.

Ethereum: presentada a finales de 2013, y desplegada para su uso entre 2015 y 2016, es una de las alternativas más maduras. Fue de las primeras en separar el concepto blockchain del caso particular de criptomonedas, y quien introdujo el concepto de Contratos Inteligentes. Posee moneda propia, el ETH, y es ideal para la realización de aplicaciones descentralizadas sobre redes públicas, pero también, pese a su falta de permisos, es ampliamente utilizada en ámbitos empresariales. Es respaldada por la Ethereum Enterprise Alliance (EEA, creada en 2017), una organización sin fines de lucro, que cuenta con más de 200 miembros, entre los que se incluyen empresas de las 500 más grandes del mundo, instituciones académicas, start-ups y proveedores de soluciones basadas en Ethereum.

Hyperledger Fabric: Hyperledger es un proyecto de la Linux Foundation lanzado a fines de 2015, que nuclea desarrollos de blockchain empresarial. Su integrante más conocido es Hyperledger Fabric, inicialmente desarrollado, y luego donado, por IBM. Es fuertemente permisionada y privada, al extremo de permitir comunicaciones entre dos integrantes de la red. Por su enfoque empresarial, utiliza protocolos de consenso más ligeros, permitiendo mayor cantidad de operaciones por segundo. Su primera versión para producción, la 1.0, es de mediados de 2017, habiéndose lanzado la 2.0 a principios de 2020.

Ripple: posee su raíces en un proyecto previo a Bitcoin, con lo cual presenta algunas características técnicas distintivas. Surge como plataforma en 2012, principalmente para usos financieros, teniendo a los principales bancos entre sus usuarios. Se basa en el uso de una criptomoneda, el XRP, y a diferencias de las principales plataformas modernas, no cuenta con soporte para Contratos Inteligentes (están siendo agregados a fines del 2020).

Corda: lanzada en 2016 por el consorcio R3, formado principalmente por instituciones financieras. Es permisionada y no posee moneda asociada. Su primer versión estable es de 2017, donde estaba fuertemente enfocada en la banca, aunque con el tiempo fueron surgiendo otros usos.

Quorum: un desarrollo de J.P. Morgan, anunciado en 2016. Básicamente, es una variante de Ethereum enfocada en el mundo empresarial, donde se reemplazó el mecanismo de consenso por uno más veloz y se agregaron permisos. Promediando el 2020 pasó a manos de ConsenSys, un proveedor de soluciones tecnológicas empresariales basadas en Ethereum.

Conclusiones
La estructura de datos, el tipo de red distribuida, el tratamiento criptográfico y la utilización de consenso, confieren a la tecnología las características de inmutabilidad, trazabilidad y seguridad. En cuanto al desarrollo de Contratos Inteligentes, precisa conocimientos específicos sobre la plataforma donde se ejecutará, saber interactuar con su API y acostumbrarse a un nuevo paradigma de programación.

Más allá de las diversas plataformas disponibles, el mundo empresarial parece principalmente distribuido entre Ethereum e Hyperledger Fabric, con la primera más volcado a B2C (Business to Consumer) y la segunda a B2B (Business to Business). Sus principales diferencias radican en si la red es pública y sin permisos, o privada y permisionada. Para decidir sobre una u otra, debe tenerse en cuenta la posible necesidad de consumo de monedas en el primer caso, y que en el segundo caso, basado en el conocimiento acerca de los miembros que pasan a ser entes registrados e identificados en la red, pueden utilizarse protocolos de consenso más ligeros, lo que incrementa la posible cantidad de operaciones por segundo.

Introducción a Blockchain Empresarial

Introducción a Blockchain Empresarial

Bitcoin, la criptomoneda que empezó a operar a comienzos del 2009, es la primera implementación de lo que se conoce como Blockchain: un libro contable digital, distribuido e incorruptible, donde es posible registrar todo lo que sea valioso. Al independizarse como tecnología entre 2013 y 2015 y, gracias al agregado de la ejecución de pequeños programas denominados Contratos inteligentes, surgieron nuevos casos de uso. Alrededor de 2017, aparecieron las versiones privadas permisionadas, pensadas para el ámbito empresarial. En 2020, las principales implementaciones ya se encuentran al menos en su segunda generación, con casos de uso consolidados, varios propuestos y muchos por descubrir.

Si bien el término está en boca de todos, con promesas de revolución en cualquier ámbito, exagerado en más de un caso, está claro que es una tecnología a tener en cuenta y la cual aprovechar. Entre sus principales bondades, se destacan la inmutabilidad (imposibilidad de cambiar la historia de los registros realizados), trazabilidad y seguridad que brinda, lo que permite eliminar intermediarios, acelerando tiempos y reduciendo costos.

Concepto general

Un blockchain es una estructura de datos secuenciales, replicada en una red entre pares, criptográficamente segura, compuestas por bloques que sólo pueden ser agregados a través de consenso entre los integrantes.

El cambio de estado de la red implica la agrupación de datos en unidades conocidas como bloques. Los mismos solo pueden ser agregados, incluyen una marca de tiempo y se validan matemáticamente contra todos los bloques previos. Cualquier intento de eliminación o modificación de un bloque, invalida todos los subsiguientes. De aquí surgen principalmente las características de inmutabilidad y trazabilidad.

Con el uso de una red entre pares, en lugar de confiar en un servidor central propenso a ataques o momentos de inactividad, los miembros pueden comunicarse unos con otros para, entre todos, consensuar matemáticamente el nuevo estado de la red. Este mecanismo y el empleo intensivo de técnicas criptográficas, proveen un grado de seguridad informática nunca antes visto. Además de ser capaces de romper la criptografía, y de precisar controlar al menos el 51% de los miembros de la red, haría falta un poder de cómputo capaz de reconstruir el nuevo estado de la red, características que combinadas hacen inviable e inconveniente cualquier intento de alteración.

Clasificación

Las redes blockchain pueden ser del tipo públicas o privadas, con o sin permisos, donde las principales categorías que se forman son:

  • Pública, no permisionada: cualquiera puede participar y toda la información está abiertamente disponible. Es la opción preferida para la implementación de criptomonedas y aplicaciones distribuidas (donde se provee transparencia y evitan censuras). Son las que utilizan mayor complejidad computacional, y por lo tanto más lentas. No hay un dueño.
  • Pública, permisionada: se verifica la identidad de cada participante para otorgar acceso, pero la información está abiertamente disponible para los participantes. Suele utilizarse en sistemas de votación, e implementarse por consorcio de actores públicos y privados.
  • Privada, permisionada: se verifica y decide quién participa. Suele ser la opción empresarial. El dueño de la implementación es una empresa o un grupo reducido de ellas. Relajan la complejidad matemática, basándose en la cantidad reducida de participantes y sus permisos, por lo que son mucho más veloces. Algunas llegan a la granularidad de crear canales específicos entre dos participantes, sin afectar a la seguridad matemática que la red provee.

Consideraciones

Una blockchain está en el backend de una aplicación, ocupando el lugar de una base de datos tradicional. Dado que su espacio de almacenamiento solo se incrementa, y además se replica en todos los integrantes de la red, se recomienda guardar en la misma solo lo estrictamente necesario y convivir con una base de datos para todo lo demás.

No se necesita Blockchain per sé, sino una solución que derivaría en su uso.

Dos puntos fundamentales para decidir su implementación, es analizar si habrá distintos actores primero, y de ser afirmativo, si más de uno tendrá permiso de escritura. Si no se cumplen ambas condiciones, hay soluciones más sencillas. Una buena razón para su implementación es querer eliminar intermediarios, permitiendo que dos o más partes interactúen basando su confianza en la blockchain. 

Si la confianza no es un problema, el empleo de blockchain no representan ninguna ventaja sobre el de una base de datos.

Casos de Uso

Es posible detectar algunos patrones de uso comunes, entre los que se destacan:

  • Finanzas Descentralizadas (DeFi), a través de una plataforma segura para la realización de pagos de forma optimizada, la ejecución de seguros, etc.
  • Gestión de activos digitales, para el intercambio de todo tipo de bienes entre individuos o entidades, tales como entradas a espectáculos, puntos de programas de fidelidad, inmuebles, etc.
  • Cadenas de suministro, para la trazabilidad completa de cualquier producto, desde el productor hasta el consumidor final, ya sean materias primas, alimentos o medicamentos, en el caso de la Farmacovigilancia. Es común además la utilización de dispositivos IoT (Internet-of-Things) para el registro automatizado en las distintas etapas del flujo.
  • Gobernanza, con la implementación de sistemas de Identidad Ciudadana, votación, presupuestos y licitaciones públicas para aumentar la eficacia, calidad y transparencia del Estado.
  • Manejo de la Propiedad Intelectual, creando un registro con fecha, hora y autoría como prueba fehaciente que certifique esos datos.
  • Información certificada de todo tipo, asegurando su veracidad, por ejemplo: Títulos Universitarios.
  • Compartición de datos de forma segura, centralizando la información y permitiendo brindar acceso a ella a quienes la necesiten, por ejemplo, historias clínicas o investigaciones.

Conclusiones

Blockchain, como concepto, es relativamente nuevo, con su primera implementación (Bitcoin) en 2009, su apertura a otros usos en 2015, versiones empresariales surgidas en 2017 y múltiples pruebas de concepto en 2020. No obstante, se trata de la unión de múltiples tecnologías que han existido por largo tiempo, combinadas de forma creativa en una plataforma con usos disruptivos.

Hay quienes consideran que escuchar la palabra Blockchain en la actualidad, es como escuchar Internet a mediados de los 90, y nos invitan a pensar como la misma transformó el mundo en que vivimos para los negocios, comercios, comunicaciones y multimedia. De hecho, muchas veces se compara a las redes blockchain públicas con internet, mientras que las redes privadas serían más bien el sinónimo de intranet.  

Sin necesidad de tener certezas sobre el futuro, resulta evidente que se trata de una herramienta a conocer, dominar y utilizar. No solo aporta valor y seguridad en casos de uso conocidos, sino que también abre la puerta a nuevas oportunidades. Además, en el mundo globalizado en el que vivimos, es cuestión de tiempo para que sumarse a una red existente exija su empleo. Desde Huenei, podemos ayudar a su negocio, ofreciendo servicios de Consultoría, Diseño de la arquitectura de la red y Desarrollo de Aplicaciones, acompañando desde el planeamiento y definición de requerimientos, hasta la puesta en marcha del proyecto final.

Buenas prácticas sobre DevOps

Buenas prácticas sobre DevOps

En nuestro artículo anterior, “Puntos clave sobre DevOps” conversamos sobre qué es DevOps y cómo puede ayudarte a optimizar elementos clave en tu empresa, como acortar tiempos de lanzamiento, acelerar la realización de nuevos productos y servicios y reducir costos. En este artículo conoceremos más sobre unas buenas prácticas para empezar a implementar esto a la brevedad posible.

Haciendo un breve repaso, DevOps se refiere a las palabras ‘Desarrollo’ y ‘Operaciones’, se trata de una disciplina que, a pesar de ser relativamente reciente, ha permitido que muchas empresas y organizaciones puedan replantear sus procesos por otros más eficientes y ágiles, logrando aumentar su competitividad y eficiencia.

Buenas prácticas sobre DevOps
A ciencia cierta, existen incontables beneficios sobre la implementación de esta metodología, teniendo en cuenta que esta no implica una mejora en lo que respecta la tecnología o productividad en sí misma, sino que permite agilizar el nivel de comunicación y colaboración entre los departamentos para óptimas ejecuciones de operaciones, tiempo y calidad de entrega.

Adoptar este nuevo proceso no ocurre de la noche a la mañana, y los resultados esperados podrían verse afectados negativamente si la empresa realiza una implementación ineficaz.

En Huenei usamos esta metodología para aumentar la efectividad de nuestros equipos de desarrollo de software, así como en mejorar la calidad de las constantes entregas en Software a Medida, Aplicaciones Móviles, involucrándola en los procesos de Testing & QA y UX/UI. Por lo que recomendamos seguir estas prácticas:

1 – Proceso continuo de integración (PCI)
Este proceso se sustenta fuertemente en las metodologías ágiles, su principio es el de reducir los tiempos de implementación y despliegue (deployment), logrando en dividir en más partes un proyecto, realizando entregas paulatinas.

¿En qué podrían ayudar? Como el equipo de desarrolladores constantemente revisa los cambios en el código del repositorio, pueden detectar más rápidamente cualquier tipo de falla e incluso, mejorar constantemente la ejecución de la operación. Son estos hallazgos tempranos en el ciclo de vida del software los que ayudarán al departamento de desarrollo a resolver problemas casi en el acto (e incluso, prevenirlos).

2 – Entrega continua
Podría decirse que este paso acompaña al anterior, ya que, al comenzar con el desarrollo, la construcción, las pruebas unitarias, el análisis de código estático y las pruebas de seguridad del análisis estático en el PCI, promueve una automatización de pruebas funcionales, de integración, de rendimiento y de seguridad, junto con la administración y la implementación de la configuración.

Como estas últimas son áreas críticas para la automatización y, en un contexto de DevOps, son esenciales, es un tipo de práctica que aumenta la cantidad de pruebas y verificaciones en las distintas etapas en ciclos manuales y automatizados del código.

Además de permitir a un equipo el construir, testear y lanzar la base de código de una forma rápida y con mayor frecuencia, que al dividirlo en ciclos de menor tamaño y duración, acelera los procesos de las organizaciones, permitiendo que puedan realizar más lanzamientos, reducir despliegues manuales y disminuir los riesgos de fallas en producción.

3 – Gestión en la comunicación
Elemento clave en la gestión DevOps, ya que tiene como foco el mantener informada a todas las partes interesadas relacionadas con el desarrollo, la operación y la implementación, teniendo en cuenta de que estamos integrando las tareas de distintos departamentos. Por ende, la comunicación es imprescindible y se vuelve un elemento fundamental para una total adopción, manteniendo a todos en la misma página para involucrarlos en todo el proceso, estar al día con la organización y evitar dudas entre ellas o los productos finales.

Para aplicar la estrategia correctamente, es vital mantener a todos los equipos y miembros al tanto, de esa forma se garantiza que los líderes de la organización (desde los departamentos de ventas, producción y gerencia) se puedan involucrar en los proceso y guíen al equipo de desarrollo a realizar los cambios exitosos, desde sus perspectivas y conocimientos.

4 – Automatización de pruebas
En el desarrollo de software, la realización de pruebas periódicas es imprescindible para crear código de calidad, lo cual es algo vital para implementarlo en una gestión de DevOps, no solo porque se ahorra tiempo al realizar rápidamente tareas tediosas y lentas, sino porque permite identificar rápidamente fallas tempranas en los procesos previos al despliegue.

Este es en sí el núcleo de la agilidad y la innovación, ya que el tiempo adicional que tendrán los miembros del equipo puede ser invertido en tareas de mayor valor agregado o en monitorear los resultados de los nuevos procesos, identificando fallas y oportunidades de mejora.

5 – Monitoreo continuo
Como todo cambio cultural y de procesos de trabajo, este requiere un monitoreo cercano y continuo para prever e identificar que todas las acciones se estén realizando correctamente y que el desempeño es el esperado.

La entrega continua de los comentarios de todos los miembros de la organización en tiempo real es vital para la organización; desde el equipo de producción que ejecutar la aplicación hasta el cliente final en la etapa de lanzamiento oficial. De esta manera, logramos que el desarrollador pueda beneficiarse de todos los comentarios valiosos sobre la experiencia del usuario final en el proceso y a su vez, modificar el código para cumplir con las expectativas del usuario final.

Conclusiones
Con un entorno empresarial en constante evolución y un panorama tecnológico en continua mejora y crecimiento, las organizaciones deben buscar mantenerse a la vanguardia, con DevOps pueden aumentar la velocidad y la calidad de las implementaciones de software al mejorar la comunicación y la colaboración entre las partes interesadas.

En sí, estas buenas prácticas permiten crear una guía clara para orientar a cualquier compañía, de cualquier tamaño e industria, a sumergirse en el cambio cultural necesario, logrando aumentar la productividad y eficiencia a través de entregas de alta calidad, sumando transparencia a sus procesos y colaboración abierta a través de equipos de desarrollo y operaciones.

Si querés conocer más sobre nuestros procesos, te invitamos a visitar nuestra página sobre Software Development.

Frameworks y librerías aceleradas por Hardware con FPGAs

Frameworks y librerías aceleradas por Hardware con FPGAs

Introducción
En los artículos anteriores, hablamos sobre la Aceleración por Hardware con FPGAs, los Conceptos clave tras la Aceleración que proveen y las Aplicaciones de la Aceleración por Hardware. En esta última entrega de la serie, nos enfocaremos en Librerías y Frameworks acelerados por Hardware con FPGAs, lo que implica cero cambios en el código de una aplicación. Haremos un repaso por distintas alternativas disponibles, para aplicaciones de Machine y Deep Learning, Procesamiento de Imágenes y Video, así como también de Bases de Datos.

Opciones para el desarrollo con FPGAs
Históricamente, el trabajo con FPGAs siempre estuvo asociado a la necesidad de un desarrollador de Hardware, principalmente Ingenieros Electrónicos, y la utilización de herramientas y Lenguajes de Descripción de Hardware (HDL del inglés), como lo son VHDL y Verilog (del tipo concurrentes en lugar de secuenciales), muy distintas a las utilizadas en el ámbito de desarrollo de Software. En los últimos años, apareció un nuevo tipo de aplicación, aceleración en los centros de datos, que apunta a disminuir la brecha entre los dominios del Hardware y el Software, para los casos de algoritmos computacionalmente demandantes, con procesamiento de grandes volúmenes de datos.

Aplicando niveles de abstracción, reemplazando los HDL típicos por un subset de C/C++ combinado con OpenCL, se llevó el desarrollo a un ambiente más familiar para un desarrollador de Software. Así, se proveen bloques básicos (primitivas), para aplicaciones Matemáticas, Estadísticas, de Álgebra Lineal y Procesamiento de Señales Digitales (DSP del inglés). No obstante, esta alternativa sigue precisando un conocimiento profundo del Hardware involucrado, para lograr aceleraciones significativas y mayor performance.

En segundo lugar, existen librerías aceleradas de dominios específicos, para soluciones de Finanzas, Bases de Datos, procesamiento de Imagen y Video, Compresión de Datos, Seguridad, etc. Las mismas son del tipo plug-and-play y pueden ser invocadas directamente con una API desde nuestras aplicaciones, escritas en C/C++ o Python, requiriendo el reemplazo de librerías “comunes” por versiones aceleradas.

Finalmente, describiremos las principales en este artículo, existen librerías y frameworks de código abierto, que fueron aceleradas por terceros. Esto nos permite, generalmente ejecutando una o varias instancias Docker (on-premise o en la nube), acelerar aplicaciones del Machine Learning, procesamiento de Imágenes y Bases de datos, entre otras, sin necesidad de cambiar el código de nuestra aplicación.

Machine Learning
Sin dudas, uno de los avances tecnológicos más disruptivos de los últimos años ha sido Machine Learning. La aceleración por hardware aporta muchos beneficios, por el alto nivel de paralelismo y el enorme número de operaciones matriciales necesarias. Los mismos se aprecian tanto en la fase de entrenamiento del modelo (reduciendo tiempos de días a horas o minutos), como en la fase de inferencia, posibilitando aplicaciones en tiempo real.

A continuación un pequeño listado de las opciones aceleradas disponibles:
 
tensor flor logo
TensorFlow es una plataforma para construir y entrenar redes neuronales, usando grafos. Creada por Google, es uno de los frameworks líderes en Deep Learning.
 

Keras es una API de alto nivel para redes neuronales escrita en Python. Funciona solo ó como interfaz de frameworks como TensorFlow (con quien suele usarse) o Theano. Fue desarrollado para facilitar un proceso de experimentación rápida, brinda una curva de aprendizaje muy suave.
 

PyTorch es una librería Python diseñada para realizar cálculos numéricos vía programación de tensores. Centrado principalmente en el desarrollo de redes neuronales.
 

Framework de Deep Learning destacado por su escalabilidad, modularidad y procesamiento de datos de alta velocidad.
 

Scikit-learn es una librería para matemáticas, ciencias e ingeniería. Incluye módulos para estadísticas, optimización, integrales, álgebra lineal, procesamiento de señales e imágenes, y mucho más. Depende de Numpy, para la manipulación rápida de matrices N-dimensionales.
 

XGBoost (Extreme Gradient Boosting), es una de las librerías de ML más utilizadas, muy eficiente, flexible y portátil.
 

Spark MLlib es la librería de ML de Apache Spark, con algoritmos escalados y paralelizados, aprovechando la potencia de Spark. Incluye los algoritmos de ML más comunes: Clasificación, Regresión, Clustering, Filtros Colaborativos, Reducción de Dimensiones, Árboles de Decisión y Recomendación. Puede procesar por lotes y por streaming. También permite construir, evaluar y ajustar Pipelines de ML.
 
Procesamiento de Imagen y Video
El Procesamiento de Imagen y Video es otra de las áreas más beneficiadas de la aceleración por hardware, posibilitando trabajar en tiempo real en tareas como transcodificación de video, transmisión en vivo y procesamiento de imágenes. Combinado con Deep Learning, es muy utilizado en aplicaciones como diagnósticos médicos, reconocimiento facial, vehículos autónomos, tiendas inteligentes, etc.


La librería para Visión por Computador y Procesamiento de Imagen y Video más importante es OpenCV, de código abierto, con más de 2500 funciones disponibles. Existe una versión acelerada de sus principales métodos, sumando más versión tras versión.


Para el Procesamiento de Video, en tareas como Transcodificación, Encoding, Decoding y filtrado, FFmpeg es de las herramienta más utilizada. Existen plugins acelerados, para por ejemplo la decodificación y codificación de H.264 y otros formatos. Además, soporta el desarrollo de plugins acelerados propios.

Bases de datos y analíticas
Las Bases de datos y Analíticas reciben cargas de trabajo cada vez más complejas, debido principalmente a los avances en Machine Learning, lo que obliga a una evolución del Centro de Datos. La aceleración por Hardware aporta soluciones al cómputo (por ejemplo con motores de bases de datos que funcionan, por lo menos, desde 3 veces más rápidos) y al almacenamiento (vía discos SSD que incorporan FPGAs entre sus circuitos, con acceso directo al tratamiento de los datos). Algunas de las Bases de Datos aceleradas, o en vías de estarlo, principalmente Open Source tanto SQL como NoSQL, son PostgreSQL, Mysql, Cassandra y MongoDb.

En estos casos, generalmente lo que se acelera son los algoritmos de bajo nivel más complejos, como la compresión de los datos, la compactación, aspectos relacionados al networking, el storage y la integración con el medio de almacenamiento. Las aceleraciones reportadas se encuentran en el orden de 3 a 10 veces más rápidas, que comparadas a mejoras de hasta 1500 veces en algoritmos de ML pueden parecer poco, pero son muy importantes por la reducción de los costos asociados al centro de datos.

Conclusiones
A lo largo de esta serie de 4 artículos, conocimos que es una FPGA a nivel dispositivo, como es que se logra la aceleración, cuando estamos en presencia de un posible caso qué les saque provecho (algoritmos computacionalmente complejos, con grandes volúmenes de datos). Casos generales de su aplicación y soluciones particulares, listas para usar sin cambios de código.
¿Cómo puede Huenei ayudar a tu negocio con Aceleración por Hardware con FPGAs?


Infraestructura: Definición, adquisición y puesta en marcha (Cloud & On-promise).


Consultoría: Asesoría y despliegue de frameworks disponibles, para obtener aceleración sin cambios en el código.


Desarrollo: Adaptación de software existente mediante el uso de librerías aceleradas, para aumentar su rendimiento.

Mejores prácticas en Microservicios

Mejores prácticas en Microservicios

La arquitectura de microservicios, o simplemente microservicios, es un método distintivo de desarrollo móvil y de sistemas de software que trata de enfocarse en construir módulos de una sola función con interfaces y operaciones bien definidas, es por eso que se considera una tendencia que podría beneficiar a muchas empresa ya que se orienta a brindar servicios y está compuesta de elementos acoplados libremente que tienen contextos delimitados.

El término de “acoplado libremente” significa que se puede actualizar los servicios de forma independiente, esta actualización no requiere cambiar ningún otro servicio. De hecho, si tienes un montón de servicios pequeños y especializados pero para realizar un cambio en ellos debes actualizarlos juntos, entonces no puede llamarse arquitectura de microservicios, ya que no se encuentran acoplados de manera flexible.

En otras palabras, son un patrón arquitectónico granular que separa partes de una aplicación en pequeños servicios independientes, además, en el desarrollo móvil y de software es un estilo arquitectónico que estructura una aplicación como una colección de servicios que se soporta y comprueba constantemente, débilmente acoplado y desplegable independientemente.

Además de ser organizado en torno a las capacidades empresariales y de sus múltiples beneficios, se cree que el 90% de todas las aplicaciones nuevas contarán con una arquitectura de microservicios para mejorar la capacidad de diseñar, depurar, actualizar y aprovechar el código de terceros.

Este pronóstico no es del todo sorprendente, ya que esta arquitectura es ventajosa por su entrega continua, escalabilidad, sencillo mantenimiento, disminución de riesgos y mayor productividad a través de la automatización.
Sin embargo, estos beneficios solo se pueden aprovechar si el estilo arquitectónico se adopta adecuadamente con las herramientas y elementos correctos. Sin más que agregar, analicemos cuáles son las mejores prácticas:

1) Crea un almacén de datos separado para cada microservicio
Primero que nada, no uses el mismo almacén de datos para el backend cuando quieras implementarla o realizar la transición a este tipo de arquitectura.
Para ello, permite que el equipo de cada microservicio elija la base de datos que mejor se adapte al servicio y que pueda ser almacenada en un único espacio de datos, esto permite la escritura de diferentes equipos y que estos, puedan compartir estructuras de bases de datos, reduciendo así la duplicación de trabajo.

Mantener los datos separados puede hacer que la administración de datos sea más complicada, porque los sistemas de almacenamiento separados pueden tener errores o ralentizarse en los momentos de sincronización, volviéndose inconsistentes y limitando la escalabilidad.

2) Mantén el código en un nivel de madurez similar
Esta práctica recomienda mantener todo el código a un nivel similar de madurez y estabilidad, es decir, si necesita agregar o reescribir parte del código en este tipo de arquitectura implementada que funciona bien, el mejor enfoque suele ser crear un nuevo microservicio para el código nuevo o modificado, dejando el microservicio existente en su lugar.

De esta forma, puedes implementar y probar de forma repetida el nuevo código hasta que esté libre de errores y sea lo más eficiente posible, sin riesgo de fallas o degradación del rendimiento en el microservicio existente, este proceso se conoce como el principio de infraestructura inmutable.
Permitiendo así, luego de verificar que este nuevo microservicio es tan estable como el original, fusionarlos nuevamente si realmente realizan una sola función en conjunto, o si hay otras eficiencias al combinarlos.

3) Hacer una compilación separada para cada microservicio
Esta es una de las mejores prácticas recomendadas al momento de diseñar una arquitectura este tipo para el desarrollo móvil o de software, ya que insta la realización de una compilación por separado para cada microservicio, de modo que puedas extraer archivos de componentes del repositorio en los niveles de revisión apropiados para él.

Esto a veces conduce a la situación en la que varios de este tipo extraen un conjunto similar de archivos, pero a diferentes niveles de revisión, eso puede hacer que sea más difícil limpiar la base de código retirando versiones antiguas de archivos (porque debes verificar con más cuidado que ya no se está utilizando una revisión), pero eso es una compensación aceptable por lo fácil que es agregar nuevos archivos a medida que construyes nuevos microservicios.

4) Implementar en contenedores
La implementación de microservicios en contenedores es importante porque significa que solo necesitas una herramienta para implementarlo todo.
Mientras el microservicio esté en un contenedor, la herramienta sabe cómo implementarlo, sin importar cuál sea el contenedor.

5) Tratar a los servidores como miembros intercambiables
Esta práctica recomienda tratar a los servidores, particularmente aquellos que ejecutan código orientado al cliente, como miembros intercambiables de un grupo.
Es decir, todos realizan las mismas funciones, por lo que no necesitas preocuparse por ellos individualmente, tu única preocupación es que existan suficientes para producir la cantidad de trabajo que necesitas, y puede usar la escala automática para ajustar los números hacia arriba y hacia abajo.
De esa manera, si uno deja de funcionar, se reemplaza automáticamente por otro.

6) Usa ‘defensa en profundidad’ para priorizar servicios clave
Luego de identificar cuáles son tus servicios más sensibles, aplicas varias capas de seguridad diferentes para que un atacante potencial que pueda explotar una de sus capas de seguridad todavía tenga que encontrar una manera de vencer a todas sus otras defensas en tus servicios críticos.
En general, esto es más fácil decirlo que hacerlo, pero hay varios recursos disponibles, la buena noticia es que este tipo de arquitecturas facilitan la adopción de esta estrategia de una manera muy granular y estratégica, al enfocar sus esfuerzos y recursos de seguridad en microservicios específicos, aumentando la diversificación de las capas de seguridad que deseas adoptar en cada uno de ellos.

7) Usa actualizaciones de seguridad automáticas
Cada vez que se actualiza una parte de tu sistema, debes asegurarse de detectar cualquier problema lo suficientemente pronto y con el mayor detalle posible.
Para ello, implementa esta práctica para asegurarte de que tu plataforma sea principalmente “atómica”, es decir, todo debe estar envuelto en contenedores para que probar tu aplicación con una biblioteca actualizada o una versión de idioma sea solo una cuestión de envolver un contenedor diferente a su alrededor, así, si la operación falla, revertir todo será bastante fácil y, lo más importante, puede automatizarse.

Conclusiones
A diferencia de la arquitectura de monolito, diseñar e implementar microservicios de manera correcta puede llegar a ser algo desafiante y difícil, pero dado que brinda una solución descentralizada para diferentes problemas para el desarrollo móvil y desarrollo de software, definir el conjunto de mejores prácticas no solo es importante sino también crucial.

Así, no solo se crea un sistema sólido a prueba de balas sino también, se previenen un montón de desastres que podrían ser altamente contraproducentes.
En sí, como un microservicio es capaz de englobar la capacidad comercial central y al mismo tiempo, adherirse a los principios y objetivos de diseño fundamentales, este se convierte en un verdadero activo digital, no únicamente para el desarrollo móvil y de software sino porque también es idóneo para aportar valor a la empresa, pudiéndose usar con éxito en múltiples contextos y procesos, tanto transaccionales como comunicacionales.

Conocé más sobre nuestros procesos de Desarrollo Móvil en nuestra sección.