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.
0 Comentarios