¿Qué pasos adicionales tomaría para escalar con el tiempo una aplicación web (por ejemplo, comercio electrónico) de 10 visitas por día a 10,000,000?

  1. Use una plataforma en la nube con la que esté familiarizado. Yo iría con AWS. Tenga un arquitecto que entienda el desarrollo y la escala, para que no cometa algunos errores realmente tontos desde el principio, que serán difíciles de recuperar más tarde, como almacenar sus imágenes en la base de datos.
  2. De 10 a 100k escalarlo verticalmente. En otras palabras, comience con una instancia pequeña o mediana y simplemente migre a una instancia más grande, cuando la carga es alta. Es posible que deba tener un tiempo de inactividad cuando migre de una instancia a otra, pero es pequeño y no va a suceder con frecuencia. Vale la pena evitar la complejidad del siguiente paso. La suposición aquí es que eres una pequeña empresa con un bajo presupuesto. Concéntrese en construir su MVP y atraer clientes.
  3. De 100k a 1M. Ahora ha alcanzado 100k – 250k, es hora de distribuir su aplicación. Primero, migre a tener una máquina diferente para diferentes funciones. Máquinas separadas para servidores web, de aplicaciones, de bases de datos, etc. Esto es algo dependiente de la arquitectura. Simplemente hacer esto podría llevarlo a 1 millón de usuarios, pero si no lo hace, comience a equilibrar la carga de sus diferentes servidores. Este también es un buen momento para ver cómo optimizar su pila utilizando herramientas como memcached, migrar a servidores más eficientes como nginx, usar Redis y verificar que no tenga cuellos de botella obvios. Ahora está obteniendo algo de tracción y desea dedicar un poco de tiempo a optimizar su configuración.
  4. 1M a 10M. Aquí las cosas se complican un poco y son más específicas de la aplicación. Puedes seguir tirando hardware al problema; después de todo, es por eso que elegimos una plataforma en la nube. Simplemente puede agregar más servidores para manejar cargas más grandes en diferentes partes de la aplicación. Sin embargo, a estas alturas, está pagando lo suficiente en tarifas de alojamiento, por lo que tiene sentido que sus desarrolladores pasen más tiempo asegurándose de que las cosas estén optimizadas en la base de datos y en otros lugares. Su principal desafío en este punto probablemente será su base de datos. Todo lo demás se puede distribuir con bastante facilidad. Hay muchas soluciones para escalar dbs en varias máquinas, pero todas tienen algunas dificultades. Haga que su arquitecto pase un tiempo pensando en cómo quieren abordar esto mejor.
  5. Eso es. Disfruta de tus 10 millones de visitas :-).

Echa un vistazo a http://highscalability.com/blog/…
Para una discusión sobre cómo Pintrest manejó 18 millones de visitantes en mayo. Eso es * visitantes * no * visitas *. Supongo que estaban manejando más de 100 millones de visitas, y parece que usaron alrededor de 350 instancias.
Por lo tanto, lo convertiría en 1 instancia mediana a grande por cada 50,000-100,000 usuarios.

Fase 1: servidor único, doble núcleo cuádruple 2.66, 8 gb de RAM, 500 gb Disk Raid 10
Sistema operativo: Fedora 8. Sin embargo, podría ir con casi cualquier Linux. Me gusta Fedora 8 mejor para servidores.
Caché Proxy: Barniz: es mucho más rápido que Squid según mis propios puntos de referencia. El calamar se ahoga a lo grande.
Servidor web: Lighttpd: más rápido que Apache 2 y más fácil de configurar para mí.
Caché de objetos: Memcached. Muy escalable
Caché PHP: APC. Fácil de configurar y parece funcionar bien.
Lenguaje: PHP 5
Base de datos – MySQL 5

Fase 2: Max Ram a 64 GB, caché todo.

Fase 3: Comprar balanceador de carga + 2 servidores más para el front-end Varnish / Memcached / Lighttpd. Utilice el servidor original como servidor de base de datos MySQL.

Fase 4: Dependiendo de los patrones de carga y uso, escale la base de datos horizontalmente con un servidor adicional. No espero que la base de datos sea un cuello de botella para el sitio web, ya que solo se almacena la información de metadatos allí. Principalmente estaré sirviendo imágenes almacenadas en el sistema de archivos. Posiblemente separe el nivel Varnish / Memcached / Lighttpd en niveles separados si es necesario. Pero evaluaré cuidadosamente la situación en este punto y escalaré adecuadamente y usaré CDN para contenido estático si es necesario.

Fase 5: Max todos los servidores a 64 gb de RAM, caché, caché, caché todo.

Fase 6: si llego tan lejos, ya soy multimillonario, así que reemplazaré todas las máquinas anteriores por lo que sea lo último y lo mejor que haya en ese momento y seguiré escalando.

El punto importante es que sé cómo escalar cada capa cuando / si surge la necesidad. Escalaré las máquinas individuales cuando sea necesario y también horizontalmente.