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