¿Qué significa escalar un sitio web?

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).

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.

Internet representa un desafío importante para cualquier negocio, pero especialmente para los negocios basados ​​en la web: una vez que su computadora / servicio está conectado a Internet, potencialmente todos los que ya están en Internet pueden contactar a su servidor, posiblemente todos al mismo tiempo.

Entonces se convierte en una pregunta: ¿qué impide que su servicio atienda todas las solicitudes que recibe de manera oportuna (es decir, con un rendimiento aceptable)?

  • ¿poder computacional?
  • rendimiento de la transacción de almacenamiento?
  • ancho de banda de red?
  • eficiencia del software?

La pregunta con respecto a la escala es siempre: ¿dónde está el “cuello de botella”, la limitación que impide que su servicio maneje los siguientes 10, próximos 100, próximos 1000, próximos 10,000 usuarios (clientes)?

Lo que es peor es que cada limitación que elimine de su sistema general expondrá a otros, que tendrán que mejorarse a su vez para que su sistema “escale” y maneje aún más usuarios.

Cuanto más popular sea su servicio, más difícil será la ampliación, y la naturaleza de Internet es tal que fácilmente puede tener un “desastre de éxito”: su sitio es instantáneamente tan popular que “todos” quieren acceder a él, y aun así no tienes la capacidad de manejarlos todos a la vez. Otro término comúnmente utilizado para esto es “ser tachado” que se deriva de los sitios web mencionados en el blog de Slashdot, y por lo tanto, de repente recibe muchas más solicitudes de los navegadores web de los que sus servidores fueron diseñados / configurados para manejar (lo que resulta muy lento o no, respuesta del servidor).

Básicamente tienes razón. Escalar en este contexto significa ser capaz de manejar con éxito todos los aspectos (db / web) cuando crece el tráfico.

Usando la tecnología actual, es casi trivial escribir sitios web / aplicaciones web que funcionan sin problemas con poca carga (“pequeño” es subjetivo aquí, pero para aplicaciones en tiempo no real, esto generalmente significa al menos unos pocos miles de usuarios, lo que cubre aproximadamente el 99% de sitios web).

Después de eso, cada nuevo orden de magnitud generalmente tiene sus desafíos y requiere más hardware (la salida fácil) o un mejor software.

Los sitios a escala de Facebook enfrentan desafíos que generalmente los obligan a escribir una gran cantidad de infraestructura personalizada, solo para manejar la carga.