Рейтинг:0

Кэшировать изображения централизованно

флаг ng

Применение: Предоставляйте адаптивные и оптимизированные изображения «на лету», обрезая, изменяя размер и сжимая основные изображения.

Текущая нагрузка: 10 тыс. запросов в минуту, трафик ~60 МБ/с.

Текущая конфигурация : NginxPlus LB занимает первое место. Несколько серверов приложений с nginx->tomcat. На каждом сервере приложений изображения кэшируются в nginx.

Текущие проблемы:

  • Плохой коэффициент попадания в кеш, поскольку кеш децентрализован, вероятность того, что один и тот же запрос попадет на один и тот же сервер, низка.
  • Дублированное кэширование, хотя это можно допустить
  • Очистка кэша обременительна. Поскольку кеш может присутствовать на нескольких серверах, для очистки кеша его необходимо очистить со всех серверов приложений.

Возможные решения

  • Консистентное хеширование Nginx Load Balancer. Проблема с этим подходом заключается в том, что он может привести к неравномерному распределению трафика.

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

  • Дисковый ввод-вывод может быть проблемой в случае одного nginx

У кого-нибудь есть опыт решения этого варианта использования? Будь то не с nginx. Не стесняйтесь делиться своими мыслями.

anx avatar
флаг fr
anx
Что заставляет вас думать, что неравномерное распределение трафика становится проблемой? Большинство установок, достаточно больших, чтобы оправдать множество серверов приложений, также будут иметь достаточно разных пользователей, чтобы выбирать их случайным образом, но фиксированный выбор восходящего потока не вызывает неравномерного распределения, которое является значительным по сравнению с относительными резервами емкости, которые вы в любом случае хотите иметь в режиме ожидания. Возможно, вы пытаетесь решить проблему, которую едва ли можно измерить с помощью обычных моделей трафика.
djdomi avatar
флаг za
Я не знаю, какая файловая система может быть лучшей, но вы можете использовать центральное хранилище для кеша, это устранит эффекты двойного кеша, потому что все используют один и тот же кеш?
флаг us
Использование общей файловой системы для кеша может не поддерживаться в nginx. Если доступ к кешу не синхронизирован должным образом, могут возникнуть всевозможные странные эффекты. Кроме того, проблемы могут вызывать события истечения срока действия кэша. Как насчет реализации кэширования изображений на nginxplus LB?
Holy_diver avatar
флаг ng
@TeroKilkanen, я понял вашу точку зрения, но в NginxPlusLB мы можем столкнуться с проблемами дискового ввода-вывода, поскольку вся нагрузка идет через LB. Это может сработать, но не так много доказательств в будущем.
djdomi avatar
флаг za
@Holy_diver Я считаю, что SSD может справиться с вашим сценарием, или вы превзойдете миллион операций ввода-вывода в секунду на хранилище на основе NVME? Это около 180 000 реальных операций ввода-вывода в секунду.
mforsetti avatar
флаг tz
Плохой коэффициент попадания в кеш при 10 тыс. запросов в минуту? какой у вас коэффициент попаданий в кеш прямо сейчас? Я склонен согласиться с @anx здесь с преждевременной оптимизацией.
Holy_diver avatar
флаг ng
@mforsetti, текущий коэффициент попадания составляет 10%, а политика LB - наименьшее количество подключений. Таким образом, Cache децентрализован. Для попадания следующий запрос должен попасть на тот же сервер приложений.

Ответить или комментировать

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