У нас есть проблема в нашей производственной среде, возможно, кто-то еще столкнулся с этой проблемой и имеет умное решение.404 выпуск со статическими активами, CDN и многосерверной средой
Предпосылки:
- Мы используем балансировки нагрузки перед двумя интерфейсными серверами.
- Мы используем CDN для доставки статических активов, таких как CSS/JS/images.
- Мы отпечатываем наши файлы JS/CSS с помощью контрольной суммы, используя SquishIt для обеспечения кэширования
- Мы добавляем путь к ресурсу с пулом CDN при запуске приложения. Это также функция SquishIt (.WithOutputBaseHref). Пример:
/ui/main_465987ecb75.css
будет оказана как рутина развертывания//cdn.host.com/ui/main_465987ecb75.css
:
- Примите сервер1 от балансировки нагрузки.
- Внесите развертывание на сервер1.
- Разогрейте его.
- Включите сервер 1 в балансировщик нагрузки.
- Примите server2 от балансировки нагрузки (... и повторите шаги 2-4)
А вот где он не:
между шагом 4 и 5 выше, мы оба сервера в Интернете для короткий период времени. В течение этого времени сервер 1 мог ссылаться на main_46eb48ac968.css, а server2 мог ссылаться на main_987eba4687.css. Это вызовет проблемы в следующем сценарии ...
использования:
- Пользователь посещает сайт и в конечном итоге на вновь развернут сервер 1.
- браузер запросит main_46eb48ac968.css от CDN.
- CDN запрашивает этот файл из loadbalancer, так как он не находится в кеше.
- Балансировщик нагрузки отправляет запрос CDN на сервер2.
- Server2 returs 404 страница не найдена ошибка, так как новый файл находится только на сервере 1.
- Сайт выглядит как дерьмо!
легко исправить, конечно, будет работать без CDN при развертывании, но так как CDN URL предваряется путей во время запуска приложения мы должны перезапустить приложение в производстве ...:/
Идеи?