lua-resty-http: разъяснение метода подключения - PullRequest
0 голосов
/ 02 мая 2018

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

Существует отличная библиотека под названием 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 является тем, который посещает запрос. Повлияет ли это на производительность? Лучше / можно подключиться к кластеру напрямую?

1 Ответ

0 голосов
/ 02 мая 2018

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

Если вы используете lua-resty-http :

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

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

Другая возможность - выполнить подзапрос, используя ngx.location.capture API

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

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

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

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

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

...