Cómo hacer que un sitio web sea escalable para millones de usuarios

Tenga cuidado con la optimización prematura, lo más importante es crear un software que funcione y que brinde valor a sus usuarios potenciales, no tiene ningún sentido intentar construir algo desde cero para manejar un número arbitrario de usuarios antes de que sepa exactamente qué estructura del sitio es. ¿Un millón? ¿Por qué no diez millones o mil millones?

Vemos esto todo el tiempo cuando una parte interesada importante insiste en que habrá un millón de usuarios simultáneos dentro de 6 meses, pero en el mundo real nunca se puede optimizar un sistema de manera efectiva hasta que realmente tenga un sistema para optimizar .

Obtenga un producto mínimo viable. Consigue mil usuarios. Valide su modelo de negocio. Iterar el producto rápidamente. Finalice sus funciones y corrija sus errores. Solo entonces puedes comenzar a pensar realmente en cómo escalarlo.

Cualquier sistema construido de manera competente se puede optimizar, lo único que debe hacer por adelantado es contratar desarrolladores competentes y asegurarse de que tengan una especificación clara y sin ambigüedades para trabajar.

Es difícil dar consejos generales porque realmente depende de su arquitectura, tecnología e incluso negocios.

Antes que nada, le aconsejo encarecidamente que no pase el tiempo tratando de hacer que su sitio web se adapte a millones de usuarios cuando está en la infancia de su proyecto y no tenga ninguna evidencia de que realmente obtendrá esta cantidad de usuarios a mediano plazo. El tiempo de su equipo se gasta mejor en hacer un mejor producto que tenga más posibilidades de atraer usuarios en lugar de planificar una eventualidad que nunca sucederá.
Además, la teoría es muy diferente de la práctica y, sin enfrentarse a esta escala real, puede emprender algún trabajo que resulte innecesario y también supervisar algunos requisitos.

Al planificar la escalabilidad, es importante definir de qué estamos hablando, cuáles son los requisitos y las restricciones: ¿planea obtener 1 millón de usuarios o 1 millón de usuarios activos simultáneamente? 1 millón de usuarios es relativamente fácil (cualquier base de datos es capaz de manejar millones o incluso miles de millones de registros, …), el segundo es muy difícil y ahí es donde tendrá que pasar mucho tiempo para asegurarse de que puede atender a tantos usuarios simultaneamente. Pero para eso necesitará planificar tanto en el lado del software como en el lado del hardware.

En el lado del hardware, la forma más fácil de escalar para un equipo pequeño es usar un proveedor de alojamiento de almacenamiento en la nube, podrá aprovisionar nuevo hardware instantáneamente según lo necesite, pero nuevamente, el costo es alto, por lo que si no lo hace ‘ Si tiene alguna evidencia de que necesitará escalar, es muy posible que se pierda dinero.

En el lado del software, la primera regla es evitar cualquier acción de bloqueo. evite la solicitud que bloqueará una tabla / base de datos, evite la solicitud que puede tardar unos segundos en completarse en su servidor … Descargue todo eso a los procesos fuera de línea donde la latencia no afectará el rendimiento en tiempo real de su sistema. Es posible que tenga que hacer compensaciones, pero esa es la primera razón por la cual las cosas no escalan (por ejemplo: es posible que las publicaciones en Facebook no aparezcan antes de unos minutos en la línea de tiempo de sus amigos, pero eso está bien, ya que permite descargar el cálculo de la línea de tiempo de agregar la publicación se puede hacer de forma asincrónica cuando hay recursos disponibles).
La segunda regla es que el almacenamiento es barato, la potencia de procesamiento es relativamente barata pero la red es cara. Planifique en consecuencia: utilice el almacenamiento en caché, descargue sus activos estáticos en CDN, … Si va a ofrecer tutoriales en video a millones de usuarios, no puede tenerlos almacenados y transmitidos desde un servidor, o incluso un centro de datos. Eso provocaría congestión, le costaría mucho y haría que la transmisión fuera muy mala para sus usuarios.

¿Desea llegar a 1 millón de usuarios al mismo tiempo (recuento de usuarios simultáneos en segundos) o en un intervalo de tiempo específico (1 mes, 1 semana, etc.). De cualquier manera, es posible que necesite escalar su aplicación de acuerdo con varias cosas, por ejemplo, uso de CPU o memoria, por lo que sí, la respuesta a su pregunta es “Escalado horizontal”.

Para poder escalar su aplicación, debe implementarla teniendo en cuenta los puntos a continuación

  • Divide tu aplicación monolítica
  • dividir y concurrir (servicio de autenticación, servicio de blog …) para que cada servicio dividido sea responsable de una cosa.
  • Use CDN
  • Siempre asíncrono
  • Usar sesión de usuario distribuida
  • Usar almacenamiento en caché distribuido
  • Utilice una arquitectura de registro distribuida como Kibana + Logstash + Elastic
  • Escribir pruebas de unidad e integración
  • Atomice su implementación (implementación continua)
  • Si proporciona las viñetas anteriores, generalmente escalaría sin problemas y llegaría a la cantidad de usuarios que necesita.

    Obviamente depende de lo que haga el sitio web. En términos generales, desea poder habilitar algún tipo de sistema de caché. Si toma mi sitio web como ejemplo, llamo a la API de Amazon para obtener la información que se mostrará en la página. Hubo un momento en que tuve una gran afluencia de tráfico y causó que mi código API se bloqueara. Así que aprendí a crear páginas en caché para que de esa manera, si el sistema se sobrecargara con muchos usuarios, todavía tuviera contenido para mostrar. Los únicos otros factores que necesitaría también para realizar un seguimiento son la cantidad de espacio que usan sus páginas. Debido a que tiene un límite de ancho de banda de su host y querrá asegurarse de tener un límite lo suficientemente alto como para manejar a todos los usuarios.