lua-resty-http: пояснение метода подключения

Я реализую плагин kong, который должен делать HTTP-запросы для получения информации, чтобы поделиться ею с вышестоящими службами.

Существует отличная библиотека под названием https://github.com/pintsized/lua-resty-http, которую можно использовать для создания HTTP Запросы.

Служба, которая содержит необходимую информацию, настроена за прокси-сервером и соответствует пути: /endpoint-providing-info.

Цель состоит в том, чтобы полагаться на возможности прокси-сервера, чтобы избежать необходимости анализировать имя хоста, имеющее определенную форму, не имеющую отношения к этому вопросу.

Поигравшись, я смог добиться желаемого поведения, выполнив следующие действия:

local ok, err = http_client:connect("127.0.0.1", ngx.var.server_port)
if not ok and err then return nil, 'there was a failure opening a connection: ' .. err
local res, err = http_client:request({
    method = 'GET',
    path = '/endpoint-providing-info'
})
//parse the response, etc...

Запрос направляется в вышестоящую службу и работает должным образом.

Меня больше всего беспокоит следующее:

Подключившись к localhost, я предположил, что текущий узел Nginx обслуживает запрос. Повлияет ли это на производительность? Лучше / возможно ли подключиться к кластеру напрямую?


person Andrés Soto    schedule 01.05.2018    source источник


Ответы (1)


Я предполагаю, что вы настраиваете для текущего nginx местоположение, соответствующее /endpoint-providing-info, используете модуль прокси и настраиваете восходящий поток для кластера.

Если вы используете https://github.com/pintsized/lua-resty-http:

Плюсы - вы можете использовать body_reader - функцию итератора для чтения тела в потоковом режиме.

Минусы - ваш запрос будет проходить через границу ядра (интерфейс обратной связи).

Другой вариант - отправить подзапрос с помощью ngx.location.capture API

Плюсы - подзапросы просто имитируют интерфейс HTTP, но не задействованы ни дополнительный трафик HTTP / TCP, ни IPC. Внутри все работает качественно, на уровне C.

Минусы - это полностью буферизованный подход, не будет работать эффективно при больших откликах.

Обновление - ИМО:

Если вы ожидаете от вышестоящего сервера больших ответов, -lua-resty-http - ваш выбор.

Если вы ожидаете от вышестоящего сервера много мелких ответов - следует использовать ngx.location.capture.

person Alexander Altshuler    schedule 02.05.2018
comment
lua-resty-http намного удобнее. Но мне все еще интересно, могут ли перечисленные вами минусы вызвать некоторые потенциальные проблемы. Я предполагаю, что это не так, поскольку мы просто добавляем дополнительный запрос к тому же узлу, который его посещает. - person Andrés Soto; 02.05.2018
comment
Я добавил свое мнение в свой ответ - person Alexander Altshuler; 02.05.2018