Применение: Предоставляйте адаптивные и оптимизированные изображения «на лету», обрезая, изменяя размер и сжимая основные изображения.
Текущая нагрузка: 10 тыс. запросов в минуту, трафик ~60 МБ/с.
Текущая конфигурация : NginxPlus LB занимает первое место. Несколько серверов приложений с nginx->tomcat. На каждом сервере приложений изображения кэшируются в nginx.
Текущие проблемы:
- Плохой коэффициент попадания в кеш, поскольку кеш децентрализован, вероятность того, что один и тот же запрос попадет на один и тот же сервер, низка.
- Дублированное кэширование, хотя это можно допустить
- Очистка кэша обременительна. Поскольку кеш может присутствовать на нескольких серверах, для очистки кеша его необходимо очистить со всех серверов приложений.
Возможные решения
Консистентное хеширование Nginx Load Balancer. Проблема с этим подходом заключается в том, что он может привести к неравномерному распределению трафика.
Внедрить промежуточный уровень из нескольких серверов nginx: между LB и серверами приложений можно ввести выделенный уровень кэширования nginx. Но скажем, я держу 3 сервера на этом уровне, тем не менее у него та же проблема дублирующего кэширования и очистки головных болей, хотя величины ниже.
Дисковый ввод-вывод может быть проблемой в случае одного nginx
У кого-нибудь есть опыт решения этого варианта использования? Будь то не с nginx. Не стесняйтесь делиться своими мыслями.