Давайте вспомним, какой была инфраструктура «Мегашопа» в самом начале — с одним экземпляром и на одном локальном сервере:
Теперь всё иначе — «Мегашоп» использует облачную MongoDB с шардированием и репликацией:
Однако текущее решение для кэширования всё ещё находится внутри контура компании «Мегашоп» — на её серверах. Это снижает нагрузку на базу данных, но вместе с тем снижает отказоустойчивость. Необходимо решить эту проблему.
Другой важный момент — медиаконтент. Продавцы регулярно загружают видеоролики и изображения к товарам. По мере роста каталога и географии будет всё сложнее держать контент на серверах и гарантировать одинаково быструю загрузку для пользователей разных регионов.
Для решения этих проблем, как и в случае с базой данных, стоит пойти по пути развития текущей гибридной архитектуры и посмотреть на распределённый кэш в облаке. Это мы и сделаем, а в конце обсудим, как ещё можно улучшить архитектуру, и подведём итоги.
Распределённое облачное кэширование
Как и другие элементы инфраструктуры, кэширование можно перенести в облаке. Рассмотрим, какие преимущества это даёт и какие у такого решения есть недостатки.
Преимущества
Высокая доступность данных, или high availability
Благодаря репликации данных и механизмам аварийного переключения, распределённое кэширование гарантирует высокую доступность данных. Даже если один узел выйдет из строя, другие узлы смогут взять на себя его функции без потери данных.
Высокая скорость работы и производительность приложений
Это достигается за счёт хранения часто используемых данных в памяти на нескольких серверах, расположенных близко к пользователям.
Проще масштабирование
Распределённое кэширование упрощает масштабирование приложений, позволяя легко добавлять новые узлы кэша по мере увеличения нагрузки. В облаке это можно сделать в несколько кликов или вообще автоматически. Такое решение обеспечит непрерывную работу приложения даже при высоких нагрузках.
Ниже затраты
Распределённое кэширование помогает экономить затраты за счёт снижения нагрузки на основные базы данных и оптимизации использования ресурсов: базы данных в обслуживании и настройке сильно дороже кэширования. Это позволяет приложениям выполнять больше задач с меньшими затратами.
☝ Высокая доступность данных — ключевое преимущество распределённого облачного кэширования. Это то, на что в первую очередь необходимо ориентироваться при принятии решения о внедрении этого способа масштабирования.
Ограничения распределённого облачного кэширования
Зависимость от сети
Для эффективной работы распределённой системы кэширования необходимо надёжное и быстрое сетевое соединение между серверами кэша и клиентами — облаком и локальной инфраструктурой.
Как справляться: выбирать провайдера с несколькими дата-центрами и надёжным сетевым соединением. Озаботиться стабильным каналом для компании.
Сложность настройки и управления
Настройка распределённой системы кэширования и управление ею может быть сложным процессом, особенно для неопытных администраторов. Необходимо умение настраивать балансировку нагрузки, репликацию данных и механизмы аварийного переключения.
Как справляться: спроектировать схему приложения, просчитать необходимые человеческие ресурсы для управления системой, организовать и провести обучение сотрудников компании работе с новыми инструментами.
Меньшая безопасность данных
Распределённое кэширование может повысить доступность данных, но также создаёт дополнительные риски безопасности: всё, что в облаке, в большей опасности, чем внутри локального контура. Данные, хранящиеся в кэше, могут быть уязвимы для атак, если не приняты надлежащие меры безопасности.
Как справляться: изучить настройки безопасности в облачном хранилище, организовать коммуникацию с сотрудниками отдела информационной безопасности компании, проговорить их зону ответственности.
Риск потери данных
В случае сбоя в работе одного из узлов кэша данные, хранящиеся на этом узле, могут быть потеряны. Репликация данных помогает снизить этот риск, но не устраняет его полностью.
Как справляться: в случае распределённого кэширования данные восстановятся достаточно быстро, но может наблюдаться просадка по скорости обработки запроса.
Необходимость обучения персонала
Использование распределённого кэширования требует обучения персонала, чтобы эффективно управлять системой и минимизировать риски.
Как справляться: обсудить с HR возможность организовать обучение для персонала новым технологиям. Просчитать стоимость обучения, заложить эти расходы во внедрение технологии.
Влияние на производительность
В некоторых случаях распределённое кэширование может негативно сказаться на общей производительности системы из-за дополнительной нагрузки на сеть и серверы.
Как справляться: оценить имеющиеся мощности, спланировать возможную закупку новых серверов, рассмотреть вариант хранения данных в облачном хранилище.
Сложности интеграции
Интеграция распределённого кэширования с существующими системами может стать сложной задачей, требующей тщательного планирования и тестирования.
Как справляться: спроектировать, как распределённое кэширование будет интегрировано с существующими системами. Обеспечить целостность данных, хранение состояний отдельно от сервисов, возможность делать откаты.
Каждая компания и её инфраструктура уникальны — важно оценивать весомость преимуществ и серьёзность ограничений индивидуально, прежде чем внедрять распределённое кэширование. Сравните два примера:
Крупный онлайн-кинотеатр
У каждого пользователя есть свой профиль, в котором отражены предпочтения, индивидуальные настройки. Есть большой штат опытных разработчиков, мощная инфраструктура. В данном случае распределённый кэш принесёт только пользу.
Маленькая компания, которая продаёт строительные материалы
У таких компании есть парт-тайм разработчик и инженер. Затраты в таком случае перевесят пользу.
«Мегашопу» с его ориентацией на масштабирование и растущими потребностями распределённое кэширование точно пригодится. Давайте теперь поговорим о его реализации.
Выбор хранилища для кэширования
Кэш — это те же данные, и их необходимо где-то хранить. Для этого существует четыре типа хранилищ:
HDD
Обладают большим объёмом, но низкой скоростью обмена данными. Стоимость — низкая.
SSD
Обладают меньшим объёмом, но высокой скоростью обмена данными. Стоимость — выше, чем у HDD, но не слишком высокая.
RAM, оперативная память
Оптимальное соотношение цены и объёма обработки данных.
CPU Cashe и CPU Registers
Самые дорогие и быстрые. Объём низкий.
☝ RAM — золотая середина по соотношению цены и скорости обработки. Но на практике чаще используют более дешёвые SSD-диски для внешних задач и ещё более дешёвые HDD для внутренних.
Как настроить распределённое кэширование в Yandex Cloud
Распределённый кэш в Yandex Cloud вы будете настраивать с помощью сервиса Managed Service For Redis, соответственно, используя Redis. После настройки получится вот такая схема инфраструктуры:
Практика
🔍 Перед тем как вы начнёте выполнять практику, загляните в раздел Биллинг и проверьте, сколько средств от гранта осталось. Их должно хватить на все задания в этой теме, но всё равно стоит следить за расходами.
Для начала, как и в случае MongoDB, нужно зайти в консоль и выбрать Managed Service For Redis в доступных опциях:
Выберите Создать кластер:
Задайте параметры:
Добавьте зоны доступности, как делали для Mongo:
Введите пароль для доступа к кластеру и нажмите Создать кластер:
Подождите примерно 15–20 минут, пока кластер создастся:
Откройте его и посмотрите топологию:
Дальше можно настраивать доступ из приложения.
Один экземпляр выступает мастером — через него идёт запись. Остальные идут как реплики на чтение. Если вам потребуется принудительно переключить мастер на другой ЦОД (центр обработки данных), вы можете это сделать прямо в консоли:
Также здесь можно смотреть мониторинг и логи, как и для Mongo:
💡 Как только выполните последний пункт задания, удалите кластер. Это нужно, чтобы ресурсы не расходовались впустую и не было лишних расходов.
Это можно сделать на странице списка кластеров:
Итоги
Кэширование, как и другие элементы инфраструктуры, можно перенести в облако и сделать геораспределённым.
Геораспределённое кэширование значительно увеличивает скорость и стабильность работы, но имеет ряд ограничений — в частности высокую стоимость поддержки, сложную настройку и зависимость от сети. Поэтому к его внедрению стоит подходить разумно.
Хранить кэш лучше всего в RAM — это оптимально по соотношению цена/скорость.
В Yandex Cloud настроить распределённое кэширование можно с помощью Managed Service For Redis.
В следующем уроке вы познакомитесь ещё с одной технологией, которая повысит скорость и доступность системы, — CDN.