La misión del equipo de backend es posibilitar la "escala web". De hecho a veces nos llamamos "Scalability team". La web ya es un producto de consumo general y con los dispositivos móviles e internet en trabajo, se consume a cualquier hora. La audiencia potencial son 1.600 millones de personas. Evidentemente no tenemos que soportar a todos, pero si diseñar una infraestrcutura que escale lo más linearmente posible con el número de servidores. Sólo así se está preparado para la escala web.
DB design: La escalabilidad requiere cambios en la forma de hacer las cosas. Desnormalizar, particionar, archivar... Olvidar Foreign keys Mover la lógica a la aplicación por la escalabilidad. Bugs pueden costar datos. Muchas pruebas. El siguiente punto es la caché. No se trata de cachear páginas, eso es fácil. Se trata de que la caché sea un almacen de datos más, gestionado de nuevo por la aplicación. Tuenti es prácticamente en tiempo real, pero todo se cachea. Todo esto requiere cambios en la forma de pensar. El código no es normal, hay que pensar en concurrencia, condiciones de carrera, errores... Muy difícil testear escalabilidad, y muy pocos sitios donde se pueda aprender. La única manera de probar realmente un nuevo sistema es en producción. Hablaremos luego un poco de cómo se puede hacer. Experiencia. Cada bit cuenta, ser consciente de qué hace una llamada, qué es más eficiente.
Sistemas es la base de todo. Este equipo se encarga de que todo funcione. No hay que pensar en sistemas como los que instalan servidores, es mucho más que eso. En sistemas se encargan del diseño de la arquitectura de red y de sistemas. Algunos de los problemas que hay que afrontar son el tráfico interno, latencias, aislar tráfico de las granjas de servidores, entre otras cosas. Por supuesto un punto importantísimo es la gestión de los balanceadores, no utilizamos big iron, sino simples máquinas linux, bien configuradas, con software robusto. Y funciona!
Soft real time Lightweight processes Fast message passing Share nothing philosophy Efficient generational garbage collection Robustness Simple and consistent error recovery model Supervision hierarchies On-line code upgrading support