Sigo viendo en las ofertas de trabajo que el solicitante debe tener experiencia escribiendo solicitudes "escalables". ¿Qué hace que una aplicación sea escalable y cómo sé que mi código puede escalar a millones de usuarios?
Supongo que una mejor forma de formular esta pregunta es: ¿Cómo puedo escribir mi código teniendo en cuenta la escalabilidad? Para que el código sea escalable desde el primer momento en lugar de una idea de último momento. ¿Existen ciertas metodologías de diseño? ¿O es simplemente una cuestión de elegir los algoritmos correctos para el trabajo?
fuente
La escalabilidad se mide en términos de rendimiento en función de alguna variable. Por ejemplo, número de solicitudes / segundo con usuarios X. La forma más sencilla de describir la escalabilidad es:
Lo primero que debe comprender al diseñar la escalabilidad es qué medida es más importante para su aplicación. Hay varias formas de medir la eficiencia, que es un componente clave de la escalabilidad:
Hay más mediciones de eficiencia que se pueden usar, pero estas son comunes para sistemas basados en web o sistemas de procesamiento por lotes.
El siguiente aspecto de la escalabilidad es medir lo que sucede con su eficiencia a medida que aumenta la carga. Las formas comunes para aumentar la carga son:
El objetivo de una aplicación escalable es mantener o mejorar la eficiencia mientras lidiamos con el problema de carga. En resumen, si el tiempo de respuesta tarda demasiado, ¿podemos agregar otro servidor para distribuir la carga de manera uniforme? Este enfoque reduce la cantidad de trabajo que debe realizar un servidor y mantiene a los servidores operando en ese "punto óptimo" para mayor eficiencia.
Su aplicación deberá estar diseñada específicamente para escalar. Eso significa que debe tener cuidado con los datos de la sesión, las solicitudes de enrutamiento al servidor correcto, reduciendo los cuellos de botella que limitan la capacidad de escalar la aplicación.
fuente
Básicamente, desea evitar cuellos de botella en el rendimiento cuando aumenta el número de usuarios y / o procesa un conjunto de datos más grande, y / u ofrece su interfaz en más idiomas, etc.
Básicamente, eche un vistazo a su esquema de base de datos, sus algoritmos y su proceso de desarrollo de software e intente predecir problemas futuros. También desea configurar la supervisión del rendimiento para identificar problemas cuando comienzan a acumularse.
Aprendí estos consejos cuando leí Creación de sitios web escalables (enlace a Amazon).
¡Espero que esto ayude!
fuente
La única forma en que las aplicaciones pueden ser verdaderamente escalables es no tener restricciones que no se puedan pasar (o solo de manera muy costosa).
Un ejemplo típico es ¿qué sucede cuando te quedas sin ciclos de CPU disponibles? Si su programa es multiproceso, puede ejecutar en una caja con múltiples núcleos, pero ¿qué sucede cuando ya no puede comprar una caja más grande? Su aplicación simplemente ya no puede crecer y, por lo tanto, no es escalable.
Cualquier aplicación verdaderamente escalable debe poder extenderse a través de múltiples computadoras de manera transparente y hacerlo sin ningún obstáculo notable. Esto no es fácil, y es una de las razones por las cuales Google ha tenido tanto éxito.
fuente
Hay problemas únicos que vienen con el soporte de aplicaciones a gran escala. El anuncio de empleo busca solicitantes que hayan trabajado en ese entorno y hayan tenido que resolver tales problemas.
Las aplicaciones de alto nivel se hacen escalables al preguntar constantemente qué pasaría si se solicitara que este código se ejecutara miles de veces en un período muy pequeño. Esto significa administrar sus huellas de memoria, haciendo uso del almacenamiento en caché de totales y datos, utilizando fuentes de datos que son escalables, etc.
fuente
Si estaba creando una función de búsqueda que funcionó bien cuando tiene 100 filas en la base de datos para buscar y 10 usuarios la utilizan a la vez. Qué tan bien funcionaría cuando 100 usuarios lo usaran al mismo tiempo y hay 100K filas para buscar.
Si realiza lo mismo sin importar qué, entonces es muy bueno. si funciona proporcionalmente a la cantidad de usuarios / datos (es decir, 10 veces más datos = 10 veces más para procesar), eso es bueno. Si su rendimiento es mucho menor cuanto más datos tenga (10x datos de modo == 10x ^ 10 más tiempo para procesar), entonces no escalará bien.
Mis ejemplos realmente deberían mostrarse en notación Big O, pero actualmente no lo sé lo suficiente como para escribir los ejemplos en Big O.
Puede simular más datos volcando datos ficticios en su base de datos, y existen herramientas para simular más usuarios como Apache AB.
fuente