Функция блокировки обратного прокси - PullRequest
3 голосов
/ 31 октября 2019

Я хочу запросить API-интерфейс Microsoft, который не защищен для одновременного доступа (извлеките данные с помощью GET, а затем отправьте их с помощью POST).

Чтобы предотвратить любое странное поведение, я хочу использоватьБлокировка при доступе к этому API.

Самый простой способ, который я обнаружил (без путаницы в коде), - это создать службу промежуточного программного обеспечения (она будет нацелена вместо оригинальной). По запросу он может сохранить блокировку в Redis и переслать запрос в Microsoft. Когда это будет сделано, блокировка будет снята.

Затем, если на сервер поступит другой запрос, он будет отклонен, и я смогу выполнить экспоненциальный откат до тех пор, пока блокировка не будет снята.

У меня вопрос: нужно ли кодировать эту вещь, или это функция, которая может быть найдена в существующем обратном прокси-сервере?

1 Ответ

2 голосов
/ 02 ноября 2019

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

Однако, если высокая доступностьне требуется, вы можете использовать один экземпляр HAProxy с maxconn , установленным в 1 для этого сервера. Вы также хотели бы установить для timeout queue что-то короткое, чтобы вы могли обработать ответ 503 и выполнить экспоненциальный откат, о котором вы упомянули.

backend microsoft_api_backend
    timeout queue 2s
    server microsoft_api 1.1.1.1:80 check maxconn 1

В Nginx вы можете сделать что-то эквивалентное:

upstream microsoft_api {
  server 1.1.1.1:80 max_conns=1
  queue 1 timeout=2
}

server {
    location / {
        proxy_pass http://microsoft_api;
    }
}
...