(Suponiendo que ya tienes un buen conocimiento de administrador de sistemas ya que no especificaste plataforma, idioma, dominio, carga esperada, etc.)
¿Al distribuir te refieres al despliegue a escala?
Asumiré el siguiente escenario: eres Mark Zuckerberg antes de Facebook y has creado un sitio de red social que se ejecuta en Amazon Web Services para tus amigos en la universidad y se está haciendo difícil soportar la carga en una sola máquina diseñada aproximadamente como esta:
- 1 instancia de nginx que sirve contenido estático y delega tráfico https a php-fpm,
- Utiliza una instancia de MySQL muy bien optimizada con pocas combinaciones para sus datos relacionales,
- Tal vez tenga una instancia de NoSQL para mensajes y metadatos, no importante,
- Has optimizado una instancia de Redis realmente agradable para el almacenamiento en caché,
- Has optimizado php-fpm y nginx al máximo.
Alquilar más CPU / disco / memoria para su VPS no ayuda demasiado, necesita escalar más allá de una máquina. Entonces, al mudarse inicialmente desde una sola máquina, a menudo significa hacer una o más (o todas) de estas:
- Si aprendo algún idioma con fluidez, ¿qué ventajas tengo?
- ¿Cuáles son algunas habilidades inútiles que puedes aprender en minutos?
- ¿Qué herramientas usan los empleadores para aprender sobre contrataciones potenciales?
- ¿Qué tan fácil / difícil es para un diseñador visual aprender los conceptos básicos de Xaml?
- ¿Es posible aprender japonés de negocios cuando tengo JLPT N4? ¿Hay buenos recursos para aprenderlo?
- Mueva su base de datos a otra instancia (RDS en AWS),
- Mueva su caché a otra instancia (ElastiCache en AWS),
- Cree otra instancia de servidor web (EC2 en AWS) y coloque un equilibrador de carga delante de ellos (ELB en AWS),
- Utilice la agrupación de conexiones a sus DB / clústeres de caché,
- Preferiblemente disponemos de monitorización, alertas automáticas, herramientas de despliegue, etc.
(Supongo que usted no estará escalando por encima de esto por ahora, tendría que escribir un libro sobre qué libros leer).
Aprender cómo pasar del primer escenario al segundo si, en este momento, no tiene mucha información ya que requiere una gran cantidad de nuevos conocimientos. Sin embargo, puede aprender y aplicar el conocimiento en pasos.
Escalado manual con máquinas físicas
Más o menos, recomendaría aprenderlos en este orden si lo hace en sus propios servidores físicos (más fácil diría que aprender cómo hacerlo en las máquinas físicas antes de aprender a hacerlo en AWS / Azure / etc.):
- El tráfico de equilibrio de carga entre un par de servidores web diferentes,
- Curso de Udemy para aprender Ansible (desplegando tu aplicación),
- Clustering MySQL.
Para mayor información, recomiendo el libro Construyendo sitios web escalables. Si desea seguir avanzando, puede ser bastante difícil hacerlo sin un mentor, por ejemplo, un equipo en el trabajo, o si ya es un desarrollador experimentado (ya que es más fácil “asimilar” los conceptos).
Si no tiene un buen control sobre la administración del sistema de los servidores de Linux, también recomendaría algo como esto:
- Una guía para principiantes para la administración del sistema Linux!
Escalado en Amazon Web Services
El libro Amazon Web Services en acción es una buena introducción general a Amazon AWS, y las acciones básicas para escalar el primer escenario al segundo es:
- Tenga 2 o más instancias de EC2 ejecutando sus procesos php-fpm,
- Tenga una instancia de ELB para equilibrar la carga de su tráfico web entrante entre sus instancias de EC2 (necesitará elementos como políticas de seguridad, grupos de redes, etc., que aprenderá del libro Manning),
- Tenga una o más instancias de RDS (sus bases de datos relacionales) con copia de seguridad automática, conmutación por error, etc.
- ElastiCache (ya sea una instancia única o una instancia agrupada) para el almacenamiento en caché (redis / memcached),
- S3 para contenido estático (imágenes, archivos css, archivos js, etc.).