Saltar a contenido

Onboarding Técnico

El onboarding técnico es un espacio de inducción y capacitación, a los nuevos colaboradores de andreani, en las tecnologías, prácticas y metodologias de la empresa.

Objetivos:

  1. Conocer las tecnologías que utiliza la empresa para el desarrollo, distribución y despliegue de aplicaciones.
  2. Conocer las "politicas" de desarrollo.
  3. Realizar un desafio integral con las tecnologías, prácticas y metodologias de la empresa para que el colaborador pueda entregar valor a su equipo rapidamente.

Tecnologías


imagen

Base de datos

imagen

Microsoft SQLServer: Base de datos relacional, el principal conjunto de base de datos se encuentra en SQL Server, tanto base de datos onpremise como en la nube de Azure.

MySql: Base de datos relacional

Oracle: Base de datos relacional

Redis: Base de datos key-value, la utilizamos como base de datos para cache o cola.

MongoDB: Base de datos distribuida no relacional.

ElasticSearch: Base de datos distribuida no relacional basada en indices. La utilizamos no solo como base de datos sino como medio de observabilidad de aplicación

Desarrollo Backend

imagen

.NET: El principal framework de desarrollo backend de la empresa, tanto es su versión 3.1 y 6. .NET es un framework que utiliza C# como principal lenguaje, es multiplataforma y opensource.

GO: Segundo lenguje de la empresa, GO es un lenguje moderno, desarrollado y matenido por Google, sus principales virtudez se deben a su performance y concurrencia.

.NET Framework: Ya no se desarrolla con esta tecnología, solo se mantiene y esta en proceso de migración a .NET

PHP: Ya no se desarrolla con esta tecnología, solo se mantiene y esta en proceso de migración

Desarrollo Frontend

imagen

React: es una bibloteca de javascript que te permite construir UI. React es, actualmente, la tecnología de front más utilizada, posee una gran comunidad y es mantenida por Facebook.

Next.js: es un framework de React que facilita el desarrollo, configuración y despliegue de apps de React. Además brinda SSR / server side rendering, Renderizado estático (SSG / static site generator), Router, compatibilidad con TypeScript, etc.

AngularJS: Ya no se desarrolla con esta tecnología, solo se mantiene y esta en proceso de migración a React.

Desarrollo Mobile

imagen

React Native: Al tener React como estrategía de desarrollo frontend, utilizar react native para el desarrollo mobile fue la desición más natural.

IONIC: Ya no se desarrolla con esta tecnología, solo se mantiene y esta en proceso de migración a React.

Herramientas de infraestructura

Repositorios

imagen

GitHub: como repositorio de código.

Event Broker

imagen

Apache Kafka: es un borker de eventos distribuido, a diferencia de las colas kafka permite persistencia de información entre otras mejoras.

IBM MQ: es un borker de colas, ya no se desarrolla con una estrategia en MQ solo se mantiene y se encuentra en proceso de migración a Kafka.

Monitorización

imagen

Elastic: contiene un conjunto de herramientas orientadas a la observabilidad y monitorización de aplicaciones.

Elastic APM: es un server que permite recolectar metricas, logging y treacing de las aplicaciones inyectandolas en elasticsearch y explotarlas desde kibana

Kibana: permite visualizar y administrar la información de elasticsearch.

OpenTelemetry: nueva propuesta estandar multi lenguaje para recolección de metricas, treacing y logging de aplicaciones. Es capaz de sincronizarse con varias aplicaciones de visualización (Jeagger, elastic apm, entre otras). El estandar OpenTelemetry es soportado nativamente por Elastic APM.

Dynatrace: es el APM escogido actualmente en la empresa, es capaz de realizar no solo el distribuited treacing sino que tiene funcionalidades de auto discovery, IA, entre otros.

Prometheus: herramienta de recolección de metricas, prometheus dispone de un ecosistema capaz de recolectar metricas de aplicaciones, almacenarlas en su base de datos y generar alertas.

Grafana: herramienta que permite conectarse a alguna base de datos (Elastic, Prometheus, influxdb, otras) y desarrollar dashboard. Se utiliza para generar dashboard con los datos de Prometheus.

Continuos integration / Continuos Deploy

imagen

CI

GitHub Actions: te permite ejecutar flujos de trabajo cuando otros eventos suceden en tu repositorio. Lo utilizamos para despliegues de librerias, build y test de código, ejecución de SonarQube, etc.

SonarQube: es una herramienta que te permite analizar el código estatico y covertura de test de tus proyectos identificando malas practicas de desarrollo, bugs, errores de seguridad, entre otros.

Jenkins: ya no se utiliza en los procesos de despliegue, actualmente solo se utiliza por el equipo de QA para ejecutar las automatizaciones de Test.

CD

Azure Devops: es una plataforma que te permite almacenar repositorios, ejecutar flujos de trabajo, administrar tus proyectos, entre otras. Se utiliza para realizar los despliegues de nuestras apps.

Openshift: es una plataforma orquestadora de contenedores empresarial. Permite orquestar nuestras aplicaciones (desplegar, escalar, monitorizar, etc)

Docker: empaqueta software en unidades estandarizadas llamadas contenedores que incluyen todo lo necesario para que el software se ejecute, incluidas bibliotecas, herramientas de sistema, código y tiempo de ejecución.

Arquitectura de Software


Arquitectura de microservicio

imagen

La arquitectura de microservicios es un método de desarrollo de aplicaciones software que funciona como un conjunto de pequeños servicios que se ejecutan de manera independiente y autónoma, proporcionando una funcionalidad de negocio completa. En ella, cada microservicio es un código que puede estar en un lenguaje de programación diferente, y que desempeña una función específica. Los microservicios se comunican entre sí a través de APIs, y cuentan con sistemas de almacenamiento propios, lo que evita la sobrecarga y caída de la aplicación.

Ventajas

  • Modularidad: al tratarse de servicios autónomos, se pueden desarrollar y desplegar de forma independiente. Además un error en un servicio no debería afectar la capacidad de otros servicios para seguir trabajando según lo previsto.
  • Escalabilidad: como es una aplicación modular, se puede escalar horizontalmente cada parte según sea necesario, aumentando el escalado de los módulos que tengan un procesamiento más intensivo.
  • Versatilidad: se pueden usar diferentes tecnologías y lenguajes de programación. Lo que permite adaptar cada funcionalidad a la tecnología más adecuada y rentable.
  • Rapidez de actuación: el reducido tamaño de los microservicios permite un desarrollo menos costoso, así como el uso de “contenedores de software” permite que el despliegue de la aplicación se pueda llevar a cabo rápidamente.
  • Mantenimiento simple y barato: al poder hacerse mejoras de un solo módulo y no tener que intervenir en toda la estructura, el mantenimiento es más sencillo y barato que en otras arquitecturas.
  • Agilidad: se pueden utilizar funcionalidades típicas (autenticación, trazabilidad, etc.) que ya han sido desarrolladas por terceros, no hace falta que el desarrollador las cree de nuevo.

Arquitectura orientada a eventos

¿Qué es un evento?

Los eventos son aquellos sucesos o cambios significativos en el estado del hardware o el software de un sistema. Un evento y su notificación no son lo mismo: la segunda es un mensaje que el sistema envía para comunicar a otra parte del sistema que se produjo cierto evento.

Los eventos pueden originarse por estímulos internos o externos. Pueden generarse con la actividad de un usuario, por ejemplo, cuando hace clic con el mouse o presiona una tecla; a partir de una fuente externa, como es el caso de un sensor; o provenir del sistema, cuando se carga un programa, por ejemplo.

¿Cómo funciona una arquitectura basada en eventos?

Esta arquitectura está compuesta por productores y consumidores de eventos. El primero detecta los eventos y los representa como mensajes. No conoce al consumidor del evento ni el resultado que generará este último.

Una vez que se detecta un evento, este se transmite del productor a los consumidores a través de canales de eventos, donde se procesa de manera asíncrona con una plataforma para este fin. Cuando se produce un evento, se debe informar a los consumidores, quienes podrían procesarlo o simplemente recibirlo.

La plataforma de procesamiento ejecutará la respuesta adecuada para el evento y enviará la actividad a los consumidores correspondientes. Esta actividad downstream corresponde al lugar en el que se verá el resultado del evento.

imagen

Ejemplo de arquitectura.

imagen