Разбираем основы системного дизайна: кеширование, CDN, прокси, балансировщики нагрузки, SQL и NoSQL, CAP-теорему и шардирование. Начни практиковаться уже сегодня!
Системный дизайн — ключевой навык для любого разработчика, который хочет строить масштабируемые и надёжные приложения. В этой части мы разберём кеширование, прокси, балансировщики нагрузки и хранилища — темы, без которых не обходится ни одно собеседование. Вы узнаете, как ускорить ответы сервера в 10 раз, чем отличается SQL от NoSQL и как CAP-теорема влияет на выбор базы данных. Готовы прокачать свой системный дизайн? Поехали!
Кеширование — это сохранение копий данных в быстром временном хранилище, чтобы не запрашивать их из медленного источника каждый раз. Основные преимущества: повышение производительности и снижение нагрузки на базы данных и downstream-сервисы.
Кеш — это высокоскоростной слой хранения данных, который обслуживает запросы быстрее, чем первичное хранилище.
Когда кеш заполнен, нужно удалить старые данные:
Популярные серверные инструменты: Redis и Memcached. Redis предпочтительнее, так как поддерживает богатые структуры данных, персистентность и репликацию.
Инвалидация кеша — одна из сложнейших проблем распределённых систем. Два подхода: установка TTL (Time-to-Live) или явная инвалидация при изменении данных.
CDN — географически распределённая сеть серверов, которая кеширует статический контент (изображения, видео, CSS, JS) и доставляет его с ближайшего к пользователю узла, снижая задержку.
Две модели:
Прокси — промежуточный сервер между клиентом и бэкендом. Два типа:
Балансировщик нагрузки — разновидность reverse proxy, распределяющая входящий трафик между несколькими серверами. Стратегии:
При обычном хэшировании (hash(key) % N) добавление или удаление сервера приводит к перераспределению почти всех ключей — полная перетасовка. Consistent Hashing решает эту проблему, размещая серверы и запросы на виртуальном кольце. При изменении состава серверов перераспределяются только ключи, привязанные к изменившемуся узлу. Это минимизирует disruption и широко используется в распределённых кешах и базах данных.
Reverse proxy также обеспечивает SSL-терминацию, безопасность (скрытие внутренней структуры), кеширование, логирование и сжатие ответов.
Один из самых частых вопросов на собеседованиях: «Какую базу данных вы выберете и почему?»
SQL (реляционные базы данных) хранят данные в структурированных таблицах с предопределённой схемой. Примеры: PostgreSQL, MySQL. Обычно используют B+ деревья для индексации, что позволяет эффективно выполнять range-запросы. SQL следует ACID:
NoSQL жертвуют структурой и строгой консистентностью ради гибкости и горизонтального масштабирования. Вместо ACID используют BASE:
Предназначено для больших неструктурированных файлов (изображения, видео, бэкапы). Amazon S3 — самый популярный пример. Нет иерархии папок — плоская структура объектов с уникальным ключом и метаданными. Ключевые свойства: высокая надёжность, экономичность при больших объёмах, доступ через HTTP API. Не подходит для часто обновляемых записей или низколатентных lookup-запросов.
Репликация — копирование данных на несколько экземпляров БД для повышения доступности, производительности чтения и отказоустойчивости.
Архитектуры:
CAP-теорема утверждает, что распределённое хранилище может гарантировать только два из трёх свойств одновременно:
Поскольку сетевые разделы неизбежны, P требуется всегда — выбор между C и A:
Это связано с выбором между strong consistency (гарантирует свежие данные, но выше задержка) и eventual consistency (допускает кратковременные несоответствия ради производительности).
Шардирование — горизонтальное партиционирование, при котором данные распределяются по нескольким базам (шардам), каждая из которых содержит часть данных. Это способ масштабирования БД за пределы одной машины.
Стратегии:
Главный недостаток — сложность и дороговизна cross-shard запросов. Ребалансировка при добавлении/удалении шардов тоже нетривиальна — здесь снова помогает consistent hashing.
Эти упражнения закрепят теорию и подготовят вас к вопросам на собеседованиях. Удачи!
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →