Разборы задач

Проектирование Distributed Cache

Попробуйте решить эту задачу самостоятельно

Практикуйтесь с интерактивными подсказками и моментальной обратной связью

Перейти на Premium

Постановка задачи

💾 Что такое Distributed Cache?

Distributed Cache (распределенный кэш) - это система, которая хранит данные в виде пар "ключ-значение" в памяти на нескольких машинах в сети. В отличие от одноузловых кэшей, которые ограничены ресурсами одной машины, распределенные кэши масштабируются горизонтально на множество узлов для обработки больших объемов данных. Кластер кэшей работает совместно, разделяя и реплицируя данные, обеспечивая высокую доступность и отказоустойчивость при сбоях отдельных узлов.

Функциональные требования

Основные требования

  1. Пользователи могут устанавливать, получать и удалять пары ключ-значение.
  2. Пользователи могут настраивать TTL (время жизни) для пар ключ-значение.
  3. Вытеснение данных должно осуществляться в соответствии с политикой LRU (Least Recently Used)

За рамками задачи

  • Пользователи могут настраивать размер кэша.

Мы выбрали политику LRU, но если вам не сказали об этом прямо, лучше уточнить у интервьюера, как вытеснять данные из кэша. Конечно, существуют и другие политики, которые вы можете использовать, например, LFU (Least Frequently Used), FIFO (First In First Out) и т.д.

Нефункциональные требования

На этом этапе вам следует спросить интервьюера, какой масштаб мы ожидаем. Это окажет большое влияние на дизайн, начиная с нефункциональных требований.

Предположим, что нам нужно хранить до 1 ТБ данных и ожидать пиковой нагрузки до 100 000 запросов в секунду.

Основные требования

  1. Система должна обладать высокой доступностью.
  2. Система должна поддерживать операции с низкой задержкой (< 10 мс для запросов get и set).
  3. Система должна быть масштабируемой и способной поддерживать ожидаемый объем данных в 1 ТБ и 100 000 запросов в секунду.

За рамками задачи

  • Надежность хранения (сохранение данных после перезагрузок)
  • Строгие гарантии согласованности
  • Возможности сложных запросов
  • Поддержка транзакций

Обратите внимание, что мы делаем довольно много серьезных предположений о том, что нас здесь интересует. Обязательно уточните это у интервьюера. Вероятно, вы уже использовали кэш раньше, поэтому знаете множество потенциальных компромиссов. Например, некоторым интервьюерам может быть важна надежность хранения данных.

Перейдите на Premium, чтобы продолжить

Разблокируйте доступ к этой статье и всем остальным материалам с NowInterview Premium

Перейти на Premium