Распределённое кэширование

Давайте вспомним, какой была инфраструктура «Мегашопа» в самом начале — с одним экземпляром и на одном локальном сервере:
Теперь всё иначе — «Мегашоп» использует облачную MongoDB с шардированием и репликацией:
Однако текущее решение для кэширования всё ещё находится внутри контура компании «Мегашоп» — на её серверах. Это снижает нагрузку на базу данных, но вместе с тем снижает отказоустойчивость. Необходимо решить эту проблему.
Другой важный момент — медиаконтент. Продавцы регулярно загружают видеоролики и изображения к товарам. По мере роста каталога и географии будет всё сложнее держать контент на серверах и гарантировать одинаково быструю загрузку для пользователей разных регионов.
Для решения этих проблем, как и в случае с базой данных, стоит пойти по пути развития текущей гибридной архитектуры и посмотреть на распределённый кэш в облаке. Это мы и сделаем, а в конце обсудим, как ещё можно улучшить архитектуру, и подведём итоги.

Распределённое облачное кэширование

Как и другие элементы инфраструктуры, кэширование можно перенести в облаке. Рассмотрим, какие преимущества это даёт и какие у такого решения есть недостатки.

Преимущества

  • Высокая доступность данных, или high availability Благодаря репликации данных и механизмам аварийного переключения, распределённое кэширование гарантирует высокую доступность данных. Даже если один узел выйдет из строя, другие узлы смогут взять на себя его функции без потери данных.
  • Высокая скорость работы и производительность приложений Это достигается за счёт хранения часто используемых данных в памяти на нескольких серверах, расположенных близко к пользователям.
  • Проще масштабирование Распределённое кэширование упрощает масштабирование приложений, позволяя легко добавлять новые узлы кэша по мере увеличения нагрузки. В облаке это можно сделать в несколько кликов или вообще автоматически. Такое решение обеспечит непрерывную работу приложения даже при высоких нагрузках.
  • Ниже затраты Распределённое кэширование помогает экономить затраты за счёт снижения нагрузки на основные базы данных и оптимизации использования ресурсов: базы данных в обслуживании и настройке сильно дороже кэширования. Это позволяет приложениям выполнять больше задач с меньшими затратами.
☝ Высокая доступность данных — ключевое преимущество распределённого облачного кэширования. Это то, на что в первую очередь необходимо ориентироваться при принятии решения о внедрении этого способа масштабирования.

Ограничения распределённого облачного кэширования

  • Зависимость от сети Для эффективной работы распределённой системы кэширования необходимо  надёжное и быстрое сетевое соединение между серверами кэша и клиентами — облаком и локальной инфраструктурой. Как справляться: выбирать провайдера с несколькими дата-центрами и надёжным сетевым соединением. Озаботиться стабильным каналом для компании.
  • Сложность настройки и управления Настройка распределённой системы кэширования и управление ею может быть сложным процессом, особенно для неопытных администраторов. Необходимо умение настраивать балансировку нагрузки, репликацию данных и механизмы аварийного переключения. Как справляться: спроектировать схему приложения, просчитать необходимые человеческие ресурсы для управления системой, организовать и провести обучение сотрудников компании работе с новыми инструментами.
  • Меньшая безопасность данных Распределённое кэширование может повысить доступность данных, но также создаёт дополнительные риски безопасности: всё, что в облаке, в большей опасности, чем внутри локального контура. Данные, хранящиеся в кэше, могут быть уязвимы для атак, если не приняты надлежащие меры безопасности. Как справляться: изучить настройки безопасности в облачном хранилище, организовать коммуникацию с сотрудниками отдела информационной безопасности компании, проговорить их зону ответственности.
  • Риск потери данных В случае сбоя в работе одного из узлов кэша данные, хранящиеся на этом узле, могут быть потеряны. Репликация данных помогает снизить этот риск, но не устраняет его полностью. Как справляться: в случае распределённого кэширования данные восстановятся достаточно быстро, но может наблюдаться просадка по скорости обработки запроса.
  • Необходимость обучения персонала Использование распределённого кэширования требует обучения персонала, чтобы эффективно управлять системой и минимизировать риски. Как справляться: обсудить с HR возможность организовать обучение для персонала новым технологиям. Просчитать стоимость обучения, заложить эти расходы во внедрение технологии.
  • Влияние на производительность В некоторых случаях распределённое кэширование может негативно сказаться на общей производительности системы из-за дополнительной нагрузки на сеть и серверы. Как справляться: оценить имеющиеся мощности, спланировать возможную закупку новых серверов, рассмотреть вариант хранения данных в облачном хранилище.
  • Сложности интеграции Интеграция распределённого кэширования с существующими системами может стать сложной задачей, требующей тщательного планирования и тестирования. Как справляться: спроектировать, как распределённое кэширование будет интегрировано с существующими системами. Обеспечить целостность данных, хранение состояний отдельно от сервисов, возможность делать откаты.
Каждая компания и её инфраструктура уникальны — важно оценивать весомость преимуществ и серьёзность ограничений индивидуально, прежде чем внедрять распределённое кэширование. Сравните два примера:
  • Крупный онлайн-кинотеатр У каждого пользователя есть свой профиль, в котором отражены предпочтения, индивидуальные настройки. Есть большой штат опытных разработчиков, мощная инфраструктура. В данном случае распределённый кэш принесёт только пользу.
  • Маленькая компания, которая продаёт строительные материалы У таких компании есть парт-тайм разработчик и инженер. Затраты в таком случае перевесят пользу.
«Мегашопу» с его ориентацией на масштабирование и растущими потребностями распределённое кэширование точно пригодится. Давайте теперь поговорим о его реализации.

Выбор хранилища для кэширования

Кэш — это те же данные, и их необходимо где-то хранить. Для этого существует четыре типа хранилищ:
  • HDD Обладают большим объёмом, но низкой скоростью обмена данными. Стоимость — низкая.
  • SSD Обладают меньшим объёмом, но высокой скоростью обмена данными. Стоимость — выше, чем у HDD, но не слишком высокая.
  • RAM, оперативная память Оптимальное соотношение цены и объёма обработки данных.
  • CPU Cashe и CPU Registers Самые дорогие и быстрые. Объём низкий.
☝ RAM — золотая середина по соотношению цены и скорости обработки. Но на практике чаще используют более дешёвые SSD-диски для внешних задач и ещё более дешёвые HDD для внутренних.

Как настроить распределённое кэширование в Yandex Cloud

Распределённый кэш в Yandex Cloud вы будете настраивать с помощью сервиса Managed Service For Redis, соответственно, используя Redis. После настройки получится вот такая схема инфраструктуры:

Практика

🔍 Перед тем как вы начнёте выполнять практику, загляните в раздел Биллинг и проверьте, сколько средств от гранта осталось. Их должно хватить на все задания в этой теме, но всё равно стоит следить за расходами.
  1. Для начала, как и в случае MongoDB, нужно зайти в консоль и выбрать Managed Service For Redis в доступных опциях:
  1. Выберите Создать кластер:
  1. Задайте параметры:
  1. Добавьте зоны доступности, как делали для Mongo:
  1. Введите пароль для доступа к кластеру и нажмите Создать кластер:
  1. Подождите примерно 15–20 минут, пока кластер создастся:
  1. Откройте его и посмотрите топологию:
  1. Дальше можно настраивать доступ из приложения.
Один экземпляр выступает мастером — через него идёт запись. Остальные идут как реплики на чтение. Если вам потребуется принудительно переключить мастер на другой ЦОД (центр обработки данных), вы можете это сделать прямо в консоли:
Также здесь можно смотреть мониторинг и логи, как и для Mongo:
💡 Как только выполните последний пункт задания, удалите кластер. Это нужно, чтобы ресурсы не расходовались впустую и не было лишних расходов.
Это можно сделать на странице списка кластеров:

Задание

Для каких компаний целесообразно внедрение распределённого облачного кэширования?
Для компании, которая находится в разных географических зонах и планирует дальше расти, целесообразно использование распределённого облачного кэширования. Это позволит снизить затраты на инфраструктуру и обеспечит высокую доступность данных.
С учётом того, что многие клиенты — госзаказчики, необходимо соблюдение определённых требований безопасности хранения данных. Хранение данных в облаке снижает безопасность. Наличие в штате только одного системного администратора может существенно усложнить внедрение распределённого облачного кэширования.
Распределённое кэширование обеспечит высокую доступность данных, производительность, масштабирование нагрузки, а также снизит затраты.
Круглосуточный режим работы и распределение офисов компании по всей России говорит о том, что для компании важна высокая доступность данных. Это ключевое преимущество распределённого облачного кэширования. Компания крупная, а значит, есть ресурсы на то, чтобы иметь в штате инженеров, которые будут поддерживать инфраструктуру. При необходимости организовать для них обучение новым технологиям.
Распределённое облачное кэширование, конечно, поможет снизить затраты на поддержание инфраструктуры. Но при этом потребует вложений в обучение, настройку интеграции с внутренними системами, настройку управления.

Итоги

  • Кэширование, как и другие элементы инфраструктуры, можно перенести в облако и сделать геораспределённым.
  • Геораспределённое кэширование значительно увеличивает скорость и стабильность работы, но имеет ряд ограничений — в частности высокую стоимость поддержки, сложную настройку и зависимость от сети. Поэтому к его внедрению стоит подходить разумно.
  • Хранить кэш лучше всего в RAM — это оптимально по соотношению цена/скорость.
  • В Yandex Cloud настроить распределённое кэширование можно с помощью Managed Service For Redis.
В следующем уроке вы познакомитесь ещё с одной технологией, которая повысит скорость и доступность системы, — CDN.

Что почитать по теме

Статья на Хабре с опытом реализации кэширования на базе другой технологии — Hazelcast
Подробное описание устройства распределённого кэша
Сравнение скорости разных дисков. Статья 2018 года, но с тех пор мало что изменилось.

Курсы

Подробнее о курсе

Входной тест

Как всё устроено

Микрофронтенды и разбивка монолитной системы на микросервисы

Шардирование и репликация

Создание микросервисов, построение пайплайна CI/CD

Кеширование, построение мониторинга и адаптация к высокой нагрузке

Переход на Hybrid cloud и Multi-cloud, создание AI/ML чат-бота

Создание highload в realtime-среде

Переход на event-driven архитектуру, объединение сервисов через SSO

Как пройти аудит безопасности и соответствовать его требованиям

Работа с требованиями и стейкхолдерами

Соответствие продукта требованиям data privacy, планирование сложной миграции

Адаптация к большому объему данных, построение BI и создание технологического роадмапа для продукта

Завершающий модуль