
Я только что это прочиталСтатья из журнала «Цифровой океан»и было интересно, еслитопологияв последнем примере можно реализовать с помощью nginx.
Мне интереснокак балансировщик нагрузки обрабатывает два выделенных сервера кэширования, которые НЕ находятся перед серверами приложений. Они описывают этот процесс так:
- Балансировщик нагрузки проверяет кэш-бэкэнд, чтобы определить, кэширован ли запрошенный контент (попадание в кэш) или нет (промах по кэшу).
- Если кэш попал: вернуть запрошенный контент в балансировщик нагрузки и перейти к шагу 7. Если кэш промахнулся: сервер кэширования пересылает запрос в бэкэнд приложения через балансировщик нагрузки.
- Балансировщик нагрузки перенаправляет запрос в бэкэнд приложения.
- app-backend считывает данные из базы данных, а затем возвращает запрошенный контент балансировщику нагрузки
- Балансировщик нагрузки пересылает ответ в кэш-бэкэнд
- cache-backend кэширует контент, а затем возвращает его балансировщику нагрузки
- Балансировщик нагрузки возвращает запрошенные данные пользователю.
Я полагаю, что балансировщик нагрузки должен иметь две группы в директивах upstream:
upstream cachebackend {
server cache-1.example.com;
server cache-2.example.com;
}
upstream appbackend {
server app-1.example.com;
server app-2.example.com;
}
а затем изнутри директивы сервера:
location / {
proxy_pass http://cachebackend;
# if that one is a MISS, request this one:
# proxy_pass http://appbackend;
# and then save the response on the cachebackend
# before returning it to the client
}
Я хочу узнать, как заставить nginx выполнить описанные выше шаги, и возможно ли это вообще.
Спасибо :)
решение1
Nginx может балансировать нагрузку и кэшировать одновременно, вам просто нужно настроить зону кэширования using proxy_cache_path
директивы и назначить ее определенной server {}
или location {}
using proxy_cache
. Итак, в заключение, если использовать nginx и как балансировщик нагрузки, и как кэш, архитектура Digital Ocean выглядит избыточной.