Cómo aprender a construir sistemas escalables como Twitter, FB y LinkedIn

Descargo de responsabilidad: de ninguna manera soy un experto en el tema (apenas he implementado aplicaciones a gran escala). Varios enlaces en la respuesta son a quora temas.

  • El blog High Scalability entra en detalles sobre las arquitecturas de varias aplicaciones grandes (como WhatsApp, Pinterest, etc.).
  • El escalado a menudo implica la orquestación, es decir, implementar su aplicación en una gran cantidad de servidores. Esto implica el uso de varias herramientas de implementación como Chef, Puppet, Ansible, Salt (para administrar sus servidores) y algo como Capistrano, Fabric o Murder para implementar su aplicación
  • Las aplicaciones grandes a menudo necesitan un sistema de mensajería para comunicarse entre los diversos engranajes que componen el sistema. Varias colas de mensajes comunes son ZeroMQ, RabbitMQ, Amazon SQS, entre otras.
  • Cuando tiene varios servidores, necesita un equilibrador de carga como KeepAliveD, HAProxy o ldirectord para tener un único servidor frontal que distribuya la carga entre sus servidores de back-end.
  • Hospedaje en una plataforma escalable como Heroku, AWS o Amazon EBS. Debería poder configurar sus instancias (o dynos en el caso de Heroku) para que se activen o desactiven automáticamente según la carga. Ver Auto Scaling para algunos ejemplos.

Algunos buenos libros y enlaces generales sobre el tema:

  • Arquitecturas escalables de Internet – Theo Schlossnagle
  • Escalabilidad en Wikipedia

Para agregar a la respuesta de Abhay Rana, The Architecture of Open Source Applications [1] es una buena lectura. Un montón de cosas interesantes allí.

[1] Amazon.com: La arquitectura de las aplicaciones de código abierto eBook: Robert Chansler, Russell Bryant, Roy Bryant, Rosangela Canino-Koening, Francesco Cesarini, Eric Allman, Keith Bostic, Titus Brown, Amy Brown, Greg Wilson: Kindle Store