¿Cuáles son los mejores recursos para aprender cómo construir sistemas de software grandes y escalables?

La teoría

La escalabilidad y el rendimiento de los grandes sistemas de software, generalmente distribuidos, tienen su base en gran parte de lo que aprendes en los fundamentos de CS. Para comprender cómo se comunican las computadoras entre sí y cómo hacer un uso eficiente de sus recursos, nunca debe escapar de un aprendizaje adecuado sobre organización de computadoras, redes de computadoras y sistemas distribuidos.

Aprender sobre organización de computadoras, le enseñará a detectar y solucionar cuellos de botella comunes en sistemas de software a pequeña y gran escala. Si aprende acerca de las redes de computadoras, podría examinar los protocolos de comunicación dependiendo de la aplicación con la que esté trabajando. Finalmente, aprender acerca de los sistemas distribuidos le enseñaría cómo funcionará su sistema detrás de la escena que ven los ” clientes “. Recomiendo los siguientes recursos, que son prácticos, pero aprenderá patrones mientras los lee.

Organización de la computadora: Sistemas de computadora: la perspectiva de un programador

Redes de computadoras: Redes de computadoras: Un enfoque de arriba hacia abajo

Sistemas distribuidos: Sistemas distribuidos

En general, la programación de bajo nivel le enseña una gran cantidad de información que puede utilizar al diseñar un sistema de software distribuido (una página web grande y moderna con muchos usuarios y gran tráfico), por lo que si le gusta este enfoque, también debe aprender sobre Operación Sistemas Pero recuerda que la mayor parte de este conocimiento se adquiere en el campo de batalla .

La práctica

Dado que el diseño de cada solución depende de cada problema (por ejemplo, Intagram eliminó el recolector de basura de Python debido a cuellos de botella detectados, mientras que Facebook diseñó un lenguaje de programación completamente nuevo para escalar la productividad del desarrollo), debe aprender a reconocer patrones comunes en el diseño de los mismos. sistemas Para aprender esos patrones, puede aprender los enfoques a problemas similares que otros han aplicado; tienes suerte, ya que los ingenieros de software de Google, Uber, Quora, Facebook, etc. tienden a compartir el conocimiento (qué puedes hacer, qué no hacer) que adquieren al diseñar dichos sistemas, puedes leer en Internet sobre ellos. Soluciones bien probadas aplicadas en grandes sistemas altamente escalables.

Los siguientes recursos tienen patrones comunes aplicados a este tipo de problemas.

  • Blogs (algunos de ellos, la lista es enorme ya que los recursos útiles dependen de la pila de tecnología, pero los patrones generales son agnósticos)
    • Alta escalabilidad
    • Una meta-lista de blogs de ingeniería.
    • El Uber Engineering Tech Stack
    • Ingeniería en Quora
    • Cómo funciona: YouPorn
    • Escalado de Django a 8 mil millones de vistas de página
    • Registrar millones de solicitudes todos los días y lo que se necesita
    • Construyendo un poderoso sistema de comentarios.
    • Base de datos de escalado con Django y HAProxy
    • Sobre el diseño y la implementación de servicios a escala de Internet
    • Sitios web de alto rendimiento
    • Técnicas prácticas de escalado para sitios web.
  • Videos (algunos de ellos, la lista es enorme. Pero si miras, la mayoría de las empresas han celebrado conferencias para explicar sus soluciones)
    • Arquitectura de entrega en tiempo real en Twitter
    • Mejores prácticas para escalar aplicaciones web
    • Keynote: la arquitectura de búsqueda de Twitter
    • Microservicios @ Spotify
    • Lo que desearía haber sabido antes de escalar Uber a 1000 servicios
    • Microservicios en la escala de Netflix: principios, compensaciones y lecciones aprendidas
    • Almacenamiento a gran escala de baja latencia para la red social
    • Cómo hemos escalado Dropbox

Una sugerencia final es jugar con su plataforma IaaS favorita. Recomiendo AWS ya que está bien documentado y hay una gran colección de recursos para aprender, que le enseña los patrones de escalabilidad comunes que utilizan los productos de AWS (no sé Azure ni Google Cloud, pero esa también es una opción).

Escalabilidad web para Startup Engineers 1, Artur Ejsmont, libro electrónico – Amazon.com. Aunque este libro parece estar vendiendo AWS en muchas partes, me ayudó a aprender mucho sobre los problemas comunes de escalabilidad y cómo resolverlos. Sin duda lo recomendaría.