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