Nginx Lua, гъвкаво балансиране на натоварването с постоянство на сесията
При балансиране на натоварването важен въпрос е постоянството на клиентската сесия. Особено ако зад балансира има някакъв интерактивен бекенд. И още повече, ако искате да направите A / B тестване и гъвкаво да коригирате части от клиенти към различно съдържание. "Nginx plus" предлага такива функции, но какво ще стане, ако искате евтино и бързо?
На помощ идва възможността за разширяване на функционалността на Nginx с помощта на Lua.
Като мощна комбинация от nginx можете да използвате компилацията OpenResty, но за нашите нужди това е излишно, така че ще съберем само необходимата функционалност, базирана на nginx 1.10.3 от хранилището.
Нашите тестови субекти ще бъдат:
Необходими компоненти за монтаж:
Инсталирайте пакети за изграждане на deb пакета:
Последната команда изтегля изходните кодове на nginx от конфигурираното хранилище. Ние използваме nginx: Linux пакети.
Изтеглете и разопаковайте текущите версии на изходните кодове на модула: ngx_devel_kit и lua-nginx-module
Първият модул е необходим за сглобяване на желания втори.
Събираме и инсталираме получения пакет:
Последната команда ще ангажира инсталирания пакет, за да избегне случайното му актуализиране.
Освен това се нуждаем от още две lua библиотеки от проекта OpenResty, които предоставят Nginx API за Lua: lua-resty-core и lua-resty-lrucache. Те са набор от *.lua файлове, инсталирани (по подразбиране) в /usr/local/lib/lua/.
В http <> инициализиране на lua.
*_lua_block блоковете вече съдържат lua код със собствен синтаксис и функции.
Основният сървър, който се грижи за външни заявки.
Блокът нагоре по веригата, който, използвайки lua, замества вграденияnginx логика.
Е, и прост демонстрационен бекенд, до който клиентите в крайна сметка ще дойдат.
Когато стартирате nginx-a с тази конфигурация, в регистрационните файлове ще попадне предупреждение:
Които могат да бъдат премахнати чрез събиране и инсталиране на необходимата версия. Но работи и на 2.0 (libluajit-5.1-2). Сега, използвайки браузър с инструменти за разработчици, можем да проверим работата на сървъра и набора от бисквитки.
Така получихме необходимата гъвкавост за тестване и статистика. И запазването на клиентската сесия е необходимо за правилната работа на бекенда. Е, просто интересно преживяване.
PSПодобни задачи могат да бъдат решени с други методи, например с помощта на haproxy, което ви позволява да балансирате, като вземете предвид сесиите. Или, за да разделите клиентите, използвайте ngx_http_split_clients_module и използвайте map, за да сравните една стойност в зависимост от другата. Но горният вариант на разпространение на клиента и избор на бекенд позволява по-гъвкаво персонализиране на системата. И ако е необходимо, добавете разнообразна логика към работата. При това без възстановяване на сегашната система.
Благодаря за вниманието.
И тук можете да получите грант за тестов период на Yandex.Cloud. Необходимо е само да въведете "Habr" в полето "секретна парола".