Header Ads Widget

Siete Cuellos de Botella que no dejan Escalar tu AplicaciĆ³n


La escalabilidad significa la capacidad del sistema de procesar cargas de trabajo que se van incrementando mientras se mantiene la misma latencia, es decir que tenga el mismo tiempo de respuesta.

Por ejemplo, si tu sistema toma X segundos para responder a la solicitud de un usuario, debe tomar la misma cantidad de tiempo para responder a cada una de las solicitudes de millones de usuarios concurrentes.

Para una aplicaciĆ³n web, hay siete errores comunes que pueden llegar a ser un cuello de botella y puede daƱar la escalabilidad.

1. CĆ³digo de mala calidad

El cĆ³digo ineficiente y poco estructurado tiene el potencial de ralentizar el servicio en producciĆ³n.

EspecĆ­ficamente cĆ³digo escrito:

- Altamente cohesionado (el famoso Spaghetti)

- Con bucles innecesarios o bucles anidados.

- Con algoritmos ineficientes o demasiado elaborados.

2. Eligiendo un tipo equivocado de base de datos

Elegir la base de datos equivocada puede ser mortal. Cada tecnologĆ­a de base de datos tiene sus ventajas y desventajas.

Si la idea es utilizar una base de datos relacional, basada en SQL, tendremos las ventajas de:

Transacciones

Fuerte consistencia

Si la alternativa es una base de datos No-SQL:

No hay requerimientos de que la consistencia sea fuerte

Escalabilidad horizontal

Adicionalmente, tambiĆ©n necesitamos asegurar que la base de datos misma sea escalable. La base de datos escalable elegida debe ser posible de particionar, fragmentar y desplegar a mĆŗltiples servidores de bases de datos rĆ”pidamente.

3. Embebiendo lĆ³gica de negocios en la base de datos

La base de datos no es lugar para colocar lĆ³gica de negocios en la mayor parte de situaciones, como el cĆ”lculo o la validaciĆ³n.

Agregar esta lĆ³gica provocarĆ” que sea mĆ”s difĆ­cil actualizar la base de datos o la aplicaciĆ³n por separado. TambiĆ©n, estĆ” agregando carga de trabajo a la base de datos, para lo cual no estĆ” optimizada.

Tener este sistema altamente acoplado podrĆ­a hacer que refactorizar la base de datos o migrar una pesadilla.

4. No hay cachƩ suficiente

En general, la cachƩ deberƭa interceptar la mayorƭa de las solicitudes de base de datos.

Con la lĆ³gica de desalojo adecuada, la implementaciĆ³n de cachĆ© en todas las capas de aplicaciĆ³n necesarias aumentarĆ” drĆ”sticamente el tiempo de respuesta.

5. ConfiguraciĆ³n de balanceador de carga

Dependiendo del volumen de trĆ”fico y nĆŗmero de servidores, necesitamos ajustar el nĆŗmero de balanceadores de carga tanto como el sistema escala.

El balanceador de carga funciona como una puerta a nuestra aplicaciĆ³n. Tener la cantidad correcta de balanceadores de carga es crucial para la latencia de un sistema.

6. API equivocada

La eficiencia de la API tambiƩn dicta la latencia tanto como el trƔfico incrementa. Para las aplicaciones web, aquƭ estƔn las ventajas y contras de las API mƔs comunes:

#1 REST API:

FƔcil de implementar y descubrir

Respuestas complejas

#2 GraphQL:

Consulta flexible

Tiempo adicional de configuraciĆ³n en el cliente y el servidor

#3 RPC(gRPC) con buffer de protocolo:

Mejor desempeƱo con datos binarios codificados y comprimidos.

Requiere soporte de cliente y servidor al esquema de datos.

7. SĆ­ncrono versus AsĆ­ncrono

Mientras el sistema va escalando, manejar tareas sĆ­ncronas y asĆ­ncronas con diferentes lĆ³gicas podrĆ­an reducir la complejidad y latencia del sistema.

Por ejemplo, para manejar tareas como "procesar datos de inicio de sesiĆ³n de usuarios" o "enviar notificaciones" las cuales pueden ser realizadas asĆ­ncronamente, podrĆ­amos utilizar frameworks asĆ­ncronos basados en mensajes (como Kafka). Su modelo suscriptores/publicador es ideal para manejar esos tipos de trabajo.

Resumen

Diagnosticar un cuello de botella del sistema puede ser retador. Equipate a ti mismo con herramientas adecuadas y el conocimiento de errores tƭpicos podrƭan hacer de ese proceso algo mƔs manejable.

Publicar un comentario

0 Comentarios