Escalar significa mantener el comportamiento de una aplicación igual que la carga (en términos generales, el número de usuarios) aumenta.
Si tiene una aplicación alojada en un servidor en su garaje que está conectado a Internet a través de un módem de cable o algo así, se comportará de la misma manera a pequeña escala, como 1 o 5 o 10 usuarios. Pero una vez que obtenga 100 o 1,000 o 10,000 usuarios, se quedará sin ancho de banda o CPU o memoria o algo más, y las solicitudes comenzarán a tomar más y más tiempo para servir (o no servir en absoluto). El comportamiento de su aplicación ha cambiado de “funciona muy bien” a “tipo de trabajo, pero es realmente lento” y finalmente a “no funciona en absoluto”. En cambio, desea que siga “funcionando bien” sin importar cuántos usuarios tenga.
Algunas partes de una aplicación (como el ancho de banda disponible) se pueden escalar simplemente agregando más recursos. Los recursos cuestan dinero, pero tener demasiados usuarios generalmente se considera el “problema correcto”. Particularmente entre las nuevas empresas de Silicon Valley, es raro (quizás incluso desconocido) que una empresa falle porque no puede comprar más recursos. Si tiene algo que la gente quiere usar, generalmente puede encontrar una manera de obtener los recursos en bruto que necesita (esto es realmente problemático cuando la escala se vuelve enorme y necesita 50,000 servidores nuevos y el espacio para colocarlos).
- ¿Cuáles son las etapas del desarrollo del producto?
- Cómo crear un sitio web como Eventbrite
- ¿Cuál es la pila tecnológica detrás de sittercity.com?
- ¿El reproductor web de Spotify (play.spotify.com) todavía está en desarrollo? ¿Existe la posibilidad de que se ejecute sin flash?
- ¿Cuáles son las experiencias de las personas que usan Memcached?
El problema es que algunas partes de una aplicación (como la arquitectura de datos) NO se pueden escalar simplemente agregando más recursos. Si está creando una aplicación y tiene a todos sus usuarios en una base de datos, y luego se queda sin algo (CPU, IO, ancho de banda, memoria) en la máquina de la base de datos, no puede simplemente agregar otra máquina de base de datos a menos que haya estado diseñando todo desde el principio para que funcione. Esto se debe a que toda la aplicación está llena de suposiciones de que todos los datos existen en una máquina, y puede hacer cosas como consultas relacionales contra los datos. Por ejemplo, si estaba construyendo sobre casi cualquier marco web popular y utilizando sus herramientas ORM integradas (como Django o Ruby on Rails) y no pensaba mucho en el futuro, existen límites muy limitados sobre cuánta capacidad adicional puede obtener de su base de datos, independientemente de cuánto dinero tenga. Probablemente necesite reescribir grandes partes de su aplicación para poder fragmentar su base de datos. Esto podría llevar mucho tiempo. Si planificó con anticipación, o es rápido y afortunado y sabe lo que está haciendo, puede hacerlo antes de que su sitio se detenga por completo y se bloquee y todos se vayan. Si no, estás en problemas. Este tipo de escalado es lo que es difícil, porque es diferente para cada aplicación y requiere una gran experiencia, no solo comprar más cosas.