Стратегии масштабирования распределённых систем
(продолжение предыдущего поста)
1. Stateless Services (сервисы без хранения состояния)
* суть: сервисы не сохраняют состояние между запросами — каждый запрос обрабатывается независимо;
* преимущества: лёгкость горизонтального масштабирования, так как экземпляры сервисов можно добавлять без влияния на работу других;
* реализация: размещение нескольких экземпляров сервисов в разных зонах доступности (AZ — Availability Zone), с сохранением состояния в отдельной базе данных;
* пример: микросервисы, обрабатывающие HTTP-запросы без сохранения сессии.
2. Horizontal Scaling (горизонтальное масштабирование)
* суть: добавление дополнительных серверов/инстансов для распределения нагрузки;
* механизм: использование группы автоматического масштабирования (Auto Scaling Group), которая добавляет/удаляет инстансы в зависимости от нагрузки;
* параметры:
* Desired Capacity (желаемая ёмкость) — целевое количество инстансов;
* Maximum Capacity (максимальная ёмкость) — лимит на количество инстансов;
* Scale out as needed (расширение по мере необходимости) — автоматическое добавление инстансов при росте нагрузки;
* примеры: веб-серверы, микросервисы в Kubernetes.
3. Load Balancing (балансировка нагрузки)
* суть: распределение входящих запросов между несколькими серверами для равномерной загрузки;
* задачи:
* предотвращение перегрузки отдельных серверов;
* повышение отказоустойчивости (при выходе из строя одного сервера нагрузка перераспределяется);
* сокращение времени отклика;
* компоненты: балансировщик нагрузки (Load Balancer), который направляет запросы на доступные серверы;
* примеры: NGINX, AWS ELB (Elastic Load Balancer), HAProxy.
4. Caching (кэширование)
* суть: хранение часто используемых данных в быстрой памяти (кэше) для ускорения доступа;
* этапы:
1. Read from Cache (чтение из кэша) — сначала система проверяет наличие данных в кэше;
2. Read from Database (чтение из базы данных) — если данных нет в кэше, они загружаются из БД;
3. Update Cache (обновление кэша) — полученные данные сохраняются в кэше для последующих запросов;
* технологии: Redis, Memcached, кэширование на уровне приложения;
* преимущества: снижение нагрузки на БД, ускорение работы приложения.
5. Database Replication (репликация базы данных)
* суть: создание копий (реплик) базы данных для распределения нагрузки и повышения доступности;
* архитектура:
* Primary (основная БД) — принимает записи (writes) и синхронизирует изменения с репликами;
* Replica (реплики) — копируют данные из Primary, обрабатывают чтения (reads);
* преимущества:
* повышение доступности (при сбое Primary запросы перенаправляются на реплики);
* распределение нагрузки (чтения распределяются между репликами);
* резервное копирование данных.
* примеры: MySQL Replication, PostgreSQL Streaming Replication.
6. Database Sharding (шардирование базы данных)
* суть: разделение базы данных на части (шарды) и размещение их на разных серверах для горизонтального масштабирования;
* механизм: данные распределяются по ключу (например, ID пользователя), чтобы запросы обрабатывались на соответствующем шарде;
* преимущества:
* масштабирование write-операций (записи распределяются по шардам);
* ускорение запросов за счёт параллельной обработки;
* управление объёмом данных (каждый шард обрабатывается отдельным сервером).
* недостатки: усложнение логики запросов (особенно для операций, затрагивающих несколько шардов).
* примеры: MongoDB Sharding, Cassandra.
Post #3551
1.37K
- ❤ 4
- 👍 2
- 🤝 2
- 🤮 1