Desarrollo del back-end en aplicaciones “super eficientes”
Blog Detail Page
Blog Detail Page
Blog Detail Page

Desarrollo del back-end en aplicaciones “super eficientes”

Blog Detail Page
Blog Detail Page
Blog Detail Page

Descubre cómo mejorar la eficiencia en el desarrollo de aplicaciones web mediante la optimización en el Back con este completo artículo.

Cuando nos solicitan implementar aplicaciones web “super eficientes” parece ser un requisito muy simple que basta con pedirlo en las especificaciones.

En este artículo hablamos de eficiencia en una aplicación web en la “parte Back”, haremos referencia a recomendaciones para conseguir aplicaciones web masivamente utilizadas.

Los factores de eficiencia en aplicaciones en esta parte tienen la capacidad de presentar una óptima experiencia de usuario y para ello se requiere de frameworks que nos permitan mover las vistas e interactuar con los componentes de formar rápida y ágil.

Eficiencia en el Back.

Las aplicaciones web Front no están publicadas en un App Store o un Play Store, sino que el navegador descarga un fichero inicial -normalmente el fichero “index.html”- de un sitio web -url- y este, en su contenido, llama a otros recursos como son ficheros “.js”, “.css”, “.html”, etc.

Normalmente, el volumen en número de recursos y tamaño resulta elevado, lo que nos lleva a cuidar una serie de factores de comunicaciones.

Estas aplicaciones SPA, “piden a gritos” tener preparados los balanceadores para que puedan dialogar en servidor en versión HTTP 2.0 para poder paralelizar la descarga de forma masiva porque, de lo contrario, el protocolo HTTP 1.x negociará ventanas ridículas de ficheros en paralelo.

TIP #1: Optimizar la descarga en paralelo de recursos Front. La descarga en paralelo de un numero alto de recursos Front se consigue con balanceadores que puedan negociar HTTP 2.0.

En CaixaBank estamos trabajando para disponer de una “Red de distribución de contenidos (CDN)” que distribuirá geográficamente estos recursos para acelerar la descarga.

TIP #2: Optimizar los tiempos de latencia en la descarga de recursos. Levantar servidores “Red de distribución de contenidos (CDN)” mejora los tiempos de latencia en la descarga al estar distribuido en diferentes puntos geográficos.

Eficiencia desarrollo aplicaciones web: Servicios independientes y sin estado (API REST).

Si se desea priorizar la robustez del sistema sin perder velocidad, se debe disponer de servicios independientes y sin estado, que se especialicen en lo que se les solicita para que respondan en el menor tiempo posible. Estas aplicaciones son las conocidas como microservicios.

TIP #3: Optimizar los tiempos de respuesta en los microservicios que no tienen estado. Los microservicios sin estado tienen las siguientes ventajas:

    • Facilidad para añadir nuevas instancias
    • Evita problemas y tiempos de carga en crear sesión para los usuarios
    • El uso de la memoria (HEAP) suele ser menor.
    • Desarrollo más alineado con la metodología DevOps

En CaixaBank, se ha apostado por el lenguaje java para la implementación de los microservicios. La forma de implementar estos microservicios es Api REST (REpresentational State Transfer).

La definición de API RESTful se basa en aplicar una interface/normativa común donde no haya estados y se utilice la semántica inherente de los verbos del protocolo HTTP.  Los más utilizados están directamente relacionados con las operaciones CRUD (Create, Read, Update, Delete) que se pueden realizar con una entidad (un producto, por ejemplo “tarjeta”). Esta forma de organizar los servicios nos permite que su uso no requiera un tiempo de aprendizaje para poder consumirlo.

TIP #4: Optimizar los tiempos de respuesta en los microservicios de tipo Read (GET). En las diferentes capas, empezando por los navegadores cuando lanzan peticiones de tipo “GET” disponen de un sistema de caché que evita la llamada. Esto se consigue definiendo correctamente el API expuesto a las aplicaciones Front haciendo uso de una interface API RESTful.

Eficiencia desarrollo aplicaciones web: Capas de microservicios.

Habitualmente los microservicios que implementan las API suelen organizarse en tres capas o niveles de cara a otorgar al sistema una escalabilidad y flexibilidad que favorezca el crecimiento del conjunto de APIs de forma ordenada. Las tres capas con las que puede interactuar la aplicación web son:

  • API del dato: Es la unida mínima funcional de acceso a las bases de datos que contiene el “core” de los datos de la entidad. Es decir, estas APIs se especializan en obtener el dato filtrado de la base de datos a partir de los parámetros o cabeceras de entrada.
  • API del producto: Presentan a la aplicación web una integridad de un producto con el que se pueda hacer transacciones. Interactúan, no solo con APIs del dato sino también con sistemas de procesos (BPM – Business Process Management) y con sistemas de seguridad que mantengan la integridad del flujo.
  • API del front: También conocidas como APIs BFF (Backend For Frontend). Se especializan en integrar/orquestar datos que necesite esta aplicación web. Su principal motivo es por eficiencia y experiencia de usuario, ya que es más ágil hacer muchas llamadas desde el Back que desde el Front.

TIP #5: Optimizar los tiempos de respuesta en microservicios que estén especializados. Al definir diferentes capas, se está aplicando la técnica “divide y vencerás”. Donde cada capa está especializada en una serie de funciones maximizando la eficiencia.

Eficiencia desarrollo aplicaciones web: Computación en la nube (Cloud).

Llegados a este punto, ya tenemos nuestros microservicios creados, falta empaquetarlos y lanzarlos a la nube para poder tener una “capacidad de computación ilimitada” para independizarme del hardware, sistemas operativos y software base. Solo basta con solicitar “más hierro”, o los que es lo mismo, más servidores.

¿Qué son los DevOps?

Para ello, existe la figura de DevOps, una filosofía (marco de trabajo, metodología de desarrollo) que se centra en la comunicación, colaboración e integración entre desarrolladores de software y los profesionales de sistemas en las tecnologías de la información (IT).

La forma más extendida de implementar la filosofía DevOps es a través de servidores virtuales Docker gestionados por el “datacenter” (centro de datos) contenido en la aplicación Kubernetes.

TIP #6: Optimizar los tiempos de respuesta en microservicios con gran capacidad de cómputo y/o peticiones en paralelo. Al desplegar los microservicios en filosofía DevOps nos permite disponer de “capacidad de computación y peticiones ilimitadas”, añadiendo más nodos.

Eficiencia desarrollo aplicaciones web: Servicios super eficientes.

Existen ciertas funcionalidades en las aplicaciones web, por ejemplo, un buscador predictivo -según se escribe, va a añadiendo opciones- que requieren disponer de unos microservicios que respondan en unos tiempos “de locura”.

Para ello, se debe planificar el disponer de una infraestructura ad hoc al core de datos. Y aquí entra el concepto “Big Data”.

¿Cómo nos beneficia el uso de Big Data?

Aplicar Big Data en nuestros sistemas, en términos de eficiencia, nos pone al alcance unos microservicios que responden “100 veces más rápido” que cualquier servicio core. Esto se debe a que hay un trabajo previo, llamado ingesta, en el que se recalcula la búsqueda para obtener de forma rápida los datos de salida.

TIP #7: Optimizar los tiempos de respuesta en ciertos servicios de consulta que lo requieren. Nos podemos apoyar en aplicaciones que implementan el “Big Data” para ciertas funcionalidades de la interface visual que requieran estos bajos tiempos de respuesta.

Eficiencia desarrollo aplicaciones web: Medición de la eficiencia en servicios.

Como decía aquel eslogan: “La potencia sin control, no sirve de nada”. Se puede disponer del mejor hardware, SW base, red, y mucho más, pero todo SW está sujeto a subir a producción con problemas de consumo de memoria, altos consumos de CPU, problemas de uso de hilos y problemas limpiando la memoria como con Garbage collector.

Para ello, se debe disponer de una estrategia de medición de la eficiencia. Existen muchas ofertas de herramientas de monitorización en el mercado, que son una maravilla y nos evita tener que hacer análisis manuales de problemas de “cuellos de botella”.

Estas herramientas suelen trabajar añadiendo un agente en cada nodo del servicio (nodo Docker) donde entra la petición al API. Este agente trabaja descubriendo de forma automática nuevos servicios (microservicios) y enviando los datos de la entrada y salida de la petición a un centro de datos donde se analiza con inteligencia artificial si el estado del servicio es óptimo o, por el contrario, detecta incidencias de cualquier tipología:

  • Problemas de consumo de memoria en proceso y en nodo
  • Altos consumos de CPU en proceso y en nodo
  • Altos tiempos de respuesta en micro

Este tipo de herramienta también es capaz de darnos una trazabilidad de la petición, en concreto en todas las capas por las que pasa.

TIP #8: Optimizar los tiempos de respuesta detectando incidencias a tiempo.

Una monitorización automatizada del servicio se hace necesaria cuando se dispone de tantos microservicios independientes. Esto nos hace detectar de forma rápida posibles problemas y afectar lo menos posible al cliente.

Estas herramientas, también incluyen un agente para instalar en Front y aportar información acerca de la experiencia de usuario (user experience) para aflorar, también ahí, posibles incidencias.

Resumen de aplicaciones web “super eficientes en el back”.

Hay mucho trabajo que se requiere detrás, donde según se van limando los tiempos en todas las capas, cada vez se hace más complicado e intervienen sistemas más potentes y nuevas tecnologías emergentes.

La disponibilidad de conectividad es uno de esos factores no controlables por los equipos de desarrollo. Conseguir aplicaciones web eficientes que funcionen en un búnker sin conectividad podría ser tratado en un próximo capítulo de este blog. Así que, ¡síguenos con atención para no perderte ninguna novedad!


Comparte:

Sigue leyendo...