Можно ли заставить nginx балансировать нагрузку на серверы приложений и кэширования «параллельно»?

Можно ли заставить nginx балансировать нагрузку на серверы приложений и кэширования «параллельно»?

Я только что это прочиталСтатья из журнала «Цифровой океан»и было интересно, еслитопологияв последнем примере можно реализовать с помощью nginx.

Мне интереснокак балансировщик нагрузки обрабатывает два выделенных сервера кэширования, которые НЕ находятся перед серверами приложений. Они описывают этот процесс так:

  1. Балансировщик нагрузки проверяет кэш-бэкэнд, чтобы определить, кэширован ли запрошенный контент (попадание в кэш) или нет (промах по кэшу).
  2. Если кэш попал: вернуть запрошенный контент в балансировщик нагрузки и перейти к шагу 7. Если кэш промахнулся: сервер кэширования пересылает запрос в бэкэнд приложения через балансировщик нагрузки.
  3. Балансировщик нагрузки перенаправляет запрос в бэкэнд приложения.
  4. app-backend считывает данные из базы данных, а затем возвращает запрошенный контент балансировщику нагрузки
  5. Балансировщик нагрузки пересылает ответ в кэш-бэкэнд
  6. cache-backend кэширует контент, а затем возвращает его балансировщику нагрузки
  7. Балансировщик нагрузки возвращает запрошенные данные пользователю.

Я полагаю, что балансировщик нагрузки должен иметь две группы в директивах 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 выглядит избыточной.

Связанный контент