La arquitectura dirigida por eventos (EDA) reacciona ante eventos o mensajes y desencadena acciones específicas en lugar de depender de la comunicación directa y sincrónica. La EDA es asíncrona, lo que permite a los componentes funcionar de forma independiente y mejorar la capacidad de respuesta y el rendimiento del sistema con cargas de trabajo variables.
Consideremos dos ejemplos sencillos: la carga de archivos y el registro de nuevos usuarios. Ambas operaciones pueden realizarse a través de un flujo síncrono de solicitud-respuesta (es decir, la API REST), pero sería necesario realizar una nueva solicitud para actualizar el estado de la carga de archivos o para activar la siguiente acción a realizar una vez que los datos del nuevo usuario se hayan insertado en la base de datos. Imagina que tienes un grupo de ejecutores de tareas continuamente sondeando mensajes; trabajan incansablemente durante periodos de silencio de radio o charla no relacionada para obtener ocasionalmente un mensaje sobre el que puedan actuar. Se puede ver que este no es el uso más eficiente de la elasticidad de los recursos de computación en nube bajo demanda. EDA resuelve esta cuestión con un enfoque basado en el empuje.
Los sistemas basados en eventos pueden ampliarse rápidamente añadiendo o eliminando componentes según sea necesario y pueden ser muy resistentes a los fallos, ya que el sistema puede seguir funcionando incluso si un componente no está disponible. EDA también es muy adecuado para el procesamiento en tiempo real y el manejo de grandes volúmenes de datos, ya que los componentes pueden reaccionar a los eventos y procesar los datos a medida que llegan sin esperar a tener un conjunto de datos completo.
¿Por qué debería considerar EDA?
- Mayor flexibilidad del sistema: La naturaleza poco acoplada de una arquitectura basada en eventos permite modificar, añadir o eliminar componentes fácilmente sin afectar a todo el sistema, lo que lo hace adaptable a los requisitos cambiantes.
- Escalabilidad mejorada: EDA admite un escalado horizontal sencillo, lo que permite a las empresas gestionar mayores cargas de trabajo o tráfico añadiendo más instancias de componentes o servicios según sea necesario.
- Mayor resistencia del sistema: La comunicación asíncrona y los componentes desacoplados de EDA contribuyen a mejorar la tolerancia a fallos, ya que el fallo de un componente no provoca necesariamente una interrupción en todo el sistema.
- Capacidad de procesamiento en tiempo real: EDA permite el procesamiento en tiempo real de grandes volúmenes de datos y patrones de eventos complejos, por lo que es adecuado para empresas que requieren conocimientos inmediatos o respuestas a condiciones que cambian rápidamente.
- Uso optimizado de los recursos: Al reaccionar a los eventos solo cuando se producen, EDA ayuda a optimizar la utilización de los recursos y reduce la necesidad de procesos en ejecución continua, lo que puede suponer un ahorro de costes y una mejora de la eficiencia.
Computación sin servidor nativa en la nube
EDA permite modelos de desarrollo de aplicaciones como la computación sin servidor, lo que permite que el código sea portátil y agnóstico con respecto al proveedor para que pueda elegir su proveedor de nube en función de las funciones, el lenguaje admitido, los costes, etc. Functions-as-a-Service (FaaS) es un producto popular ofrecido por muchos proveedores de nube, que permite a los usuarios gestionar funciones e infraestructura de aplicaciones todo en uno. El proveedor de la nube actúa como capa de responsabilidad al ocuparse de la infraestructura subyacente, incluido el aprovisionamiento, el escalado y el mantenimiento de los servidores, lo que permite a los desarrolladores centrarse en escribir código.
Los servicios FaaS conocidos como AWS Lambda, Azure Functions y Google Cloud Functions son lo que denominamos nativos de plataforma. A menudo te encierran en el uso de un proveedor de nube específico sin una manera fácil de migrar. Nos oirás hablar mucho de Knative como una plataforma de código abierto basada en Kubernetes para ejecutar sin servidor, lo que significa que puede escalar tu aplicación de 0 a N número de réplicas en pocos segundos. Escalar a 0 es fantástico porque permite a Kubernetes y Knative reasignar recursos según sea necesario.
Un fragmento de código puede escalar recursos automáticamente porque puede invocarse varias veces en paralelo. En esencia, las ofertas de FaaS nativas de la plataforma que hemos mencionado antes no son favorables debido a los precios impredecibles. Al ejecutar Knative en nuestras instancias de computación a través de nuestro servicio gestionado Kubernetes, pagas un precio fijo y predecible y no tienes que preocuparte por los precios de pago por ejecución que aparecen después de algunos niveles gratuitos.
¿Por qué debería considerar la tecnología sin servidor?
- Eficiencia de costes: El modelo de precios de pago por uso de la computación sin servidor puede suponer un ahorro de costes, ya que las empresas solo pagan por el tiempo de computación que utilizan sin asignar recursos por adelantado.
- Escalabilidad mejorada: La computación sin servidor puede escalar automáticamente los recursos para adaptarse a la demanda, lo que garantiza que las aplicaciones puedan manejar mayores cargas de trabajo sin intervención manual ni tiempo de inactividad.
- Reducción de la sobrecarga operativa: Con la computación sin servidor, el proveedor de la nube gestiona la infraestructura subyacente, liberando a los equipos de TI para que se centren en el desarrollo de aplicaciones, la innovación y otras iniciativas estratégicas.
- Tiempo de comercialización más rápido: Los procesos simplificados de desarrollo y despliegue que ofrece la computación sin servidor pueden ayudar a las empresas a acelerar el lanzamiento de nuevas funciones, actualizaciones y correcciones de errores, mejorando su ventaja competitiva.
- Flexibilidad y adaptabilidad: La computación sin servidor permite a las empresas crear y desplegar aplicaciones utilizando una variedad de lenguajes de programación y tecnologías, lo que facilita la adaptación a los requisitos cambiantes o la incorporación de nuevas tecnologías según sea necesario.
Como he mencionado anteriormente, la computación sin servidor se basa en la arquitectura basada en eventos, lo que significa que las funciones se activan por eventos tales como solicitudes HTTP, cargas de archivos, actualizaciones de bases de datos, etcétera. Esto puede ayudar a simplificar la arquitectura de la aplicación y mejorar la escalabilidad.
Las funciones sin servidor tampoco deben tener estado. No almacenan ningún dato o estado entre invocaciones, lo que garantiza que las funciones sean fácilmente escalables y que puedas reemplazarlas si fallan. También deben ser de corta duración, asegurando que los recursos no se desperdician y la función puede escalar rápidamente. Si la tarea de una función es de larga duración, evalúa si un servicio de ejecución constante es más adecuado.
No olvide supervisar y registrar sus funciones sin servidor para asegurarse de que funcionan según lo esperado e identificar cualquier problema o error. Utilice herramientas como agregadores de registros y herramientas de supervisión del rendimiento de las aplicaciones (APM) como Prometheus y Grafana. Y no olvide proteger sus funciones utilizando las mejores prácticas, como la autenticación, la autorización y el cifrado. Esto garantiza la seguridad de la aplicación y la protección de los datos confidenciales. Pruébalas a fondo antes de desplegarlas en producción para asegurarte de que funcionan como se espera y están libres de vulnerabilidades.
La informática sin servidor puede ser rentable, pero es importante utilizar técnicas de optimización de costes como la optimización de funciones, el uso compartido de recursos y el autoescalado para reducir costes y mejorar la eficiencia. Evalúe su carga de trabajo, patrones de uso y requisitos para determinar si la informática sin servidor es rentable para su caso de uso particular. Tenga en cuenta los patrones de uso previstos, los requisitos de rendimiento y la estructura de precios de la plataforma sin servidor que decida utilizar.
Comentarios