Buenas tardes En previsión del inicio del curso
"Backend PHP Developer", tradicionalmente celebramos una lección abierta. Hablaron sobre sistemas altamente cargados, escalado, arquitectura. Examinamos en detalle HighLoad, así como los principales enfoques y tácticas en el desarrollo de sistemas altamente cargados.
Se establecieron los siguientes objetivos de la lección:
- discutir qué es la arquitectura del sistema y por qué es necesaria;
- discuta qué es la carga alta;
- considerar tácticas arquitectónicas;
- Discutir el curso.
Profesor:
Igor Sakhankov , desarrollador de Booking.com.
Arquitectura
Hace un par de cientos de años, el rey sueco Gustaf II Adolf quería construir el barco más grande del mundo. Invitó al constructor naval holandés Henrik Hubertsson y le dio sus instrucciones. El maestro nunca construyó algo como esto, pero tenía una amplia experiencia en la construcción de barcos de tamaños pequeños. Parece que no hay nada complicado: tome un dibujo de un pequeño barco y amplíelo la cantidad correcta de veces. Apenas dicho que hecho. Y así, después de varios años de trabajo, apareció una construcción maravillosa y grandiosa:

Todo estaría bien, pero cuando se lanzó, este barco no duró ni media hora, inmediatamente se hundió. Era el buque de guerra Vasa, y sucedió en 1628.
Ahora imagine que le pidieron que hiciera una casita para pájaros o una caseta para un perro. Por supuesto, la mayoría de nosotros enfrentaremos esta tarea. ¿Y si le piden que haga un rascacielos?
Todos estos ejemplos sugieren que cuanto más complejo es el sistema, más tiene varias interdependencias, matices de implementación y dificultades. Y para hacer frente con éxito al diseño y la creación de sistemas complejos, solo hay patrones arquitectónicos.
En términos académicos, la arquitectura de los sistemas de información es un concepto que define el modelo, la estructura, las funciones y la interconexión de los componentes de IP.
Sin embargo, volvamos de construir barcos y casas a la programación. Mira, siempre tenemos requisitos que nos llegan del negocio. Y la arquitectura ayuda a convertirlos en requisitos técnicos. Según los requisitos técnicos recibidos, puede descomponer fácilmente el sistema, escribir las dependencias entre los módulos y continuar con la implementación directa.

Así, la arquitectura:
- Ayuda a proporcionar requisitos del sistema no funcionales
- Es un medio de comunicación entre las partes interesadas;
- optimiza costos, reduce el costo de sistemas grandes;
- le permite reutilizar patrones arquitectónicos, tener en cuenta la experiencia previa, no repetir errores pasados
Alta carga
El concepto de alta carga en sí mismo es muy relativo, y no existe una definición establecida. Sin embargo, es seguro decir que este momento llega cuando su infraestructura actual deja de hacer frente a la carga. Y eso significa que es hora de escalar. Sucede:
- vertical La conclusión es simple: si el hierro no puede hacer frente, compramos nuevos, súper potentes, productivos y caros;
- horizontal Tenemos un servidor que no puede hacer frente. Compramos un segundo servidor con las mismas características, luego un tercero, y así sucesivamente. En la salida, tenemos muchas máquinas relativamente sencillas.
Tácticas arquitectónicas
Todos conocen una cola (
FIFO ). Esta es una forma de organizar el procesamiento de datos, que le permite cumplir requisitos conflictivos al simplificar el proceso de acuerdo con el principio de "primero en llegar, primero en salir". La cola se puede usar como un medio para equilibrar la carga, desacoplar el cliente y el servidor y mucho más.
Ventajas:
- mala conectividad de cliente y servidor;
- El estado de la tarea es conocido.
- configuración sobre la marcha;
- equilibrio de carga
Desventajas
- entidad adicional en el sistema;
- procesamiento de tareas más complejo;
- pérdida / duplicación de mensajes.
Ahora hablemos sobre lo
que puede hacer con el repositorio . El almacenamiento se refiere a cualquier sistema de almacenamiento, como las bases de datos relacionales. Entonces, tenemos las siguientes opciones para resolver problemas de almacenamiento:
1.
Replicación.
Uno de los problemas de almacenamiento conocidos está relacionado con la situación en la que tenemos muchas lecturas y no hay suficientes registros. Puede ser un sitio de noticias: todos leen las noticias, pero solo los administradores agregan nuevos materiales. Entonces, la replicación es solo cuando nuestro almacenamiento se encontró con la lectura, y tenemos retrasos en el sistema. Es importante señalar aquí que la replicación resuelve el problema de la lectura, pero no de la escritura. No solo eso, sino que degrada la capacidad de las bases de datos para escribir, porque tiene que distribuir porciones de sus datos a las réplicas, como se nota en la imagen de arriba. En el caso más simple, cuando configuramos la replicación, tenemos un Maestro, la base de datos principal en la que estamos escribiendo, y esclavos, copias de la base de datos (réplicas de las que van todas las lecturas de datos).
2.
Particionamiento . Supongamos que tenemos una tabla grande, pero usamos solo algunos datos. Podemos partirlo en pedazos. Por ejemplo, tomamos nuestros datos y los colocamos en diferentes platos según el mes. El resultado son tablas pequeñas en lugar de una grande y, como resultado, muestras más rápidas para un mes en particular. Esto optimiza el tiempo de ejecución de la consulta.
CREATE TABLE my_table (id INT, amount DECIMAL(7,2), some_date DATE) ENGINE=INNODB PARTITION BY HASH( MONTH(some_date) ) PARTITIONS 6;
3.
Fragmentación vertical . En el caso de la partición, estábamos hablando de un servidor y una base de datos. En el caso de fragmentación, tenemos varios autos y varias bases. Tomamos todos nuestros datos, los dividimos en grupos lógicos y cada grupo lógico se almacena en una base de datos separada.
$users = new PDO("pgsql:db_name=my_db;host=192.168.1.1", "user", "password"); $photos = new PDO("pgsql:db_name=my_db;host=192.168.1.2", "user", "password"); $users->prepare('SELECT * FROM users ...'); $photos->prepare('SELECT * FROM photos ...');
El método se implementa fácilmente y escala bien la carga. Pero también tiene inconvenientes, que se describen con más detalle en el video.
4.
Fragmentación horizontal . Aquí, cada fragmento se encuentra en una máquina separada.
La recetaLos siguientes puntos lo ayudarán a crear un sistema escalable:
- simplificar a nivel de requisitos!
- no compliques la decisión
- intenta ser apátrida,
- caché
- monitoreo + alerta,
- ser competente
Colegas, el recuento ha resultado bastante conciso, por lo que es mejor ver el seminario web completo. Además, no se pierda la
jornada de
puertas abiertas del curso "Backend PHP Developer".