Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Балансировка по содержимому Request body #87

Open
mihmig opened this issue May 22, 2024 · 1 comment
Open

Балансировка по содержимому Request body #87

mihmig opened this issue May 22, 2024 · 1 comment
Labels
question Question about product

Comments

@mihmig
Copy link

mihmig commented May 22, 2024

У меня работает телеграм-бот в режиме web-hook (100-300 RPS входящих).
В качестве реверс-проски использую nginx
Так как сервер телеграма нельзя попросить присылать запросы не несколько endpoint я не могу "кластеризовать" свой бекенд
В запросе от сервера всегда вот такой JSON (в одну строку):

{"update_id":56351,"message":{"message_id":28,"from":{"id":111,"username":"aaaa},"**chat":{"id":-100111222333,**"title":"Some chat",...

Есть ли какой модуль, похожий на http_upstream
который бы "балансировал" запросы по "бекендам" в зависимости от тела сообщения, например
а) если в теле есть подстрока 'chat":{"id":-100111222333,' -> backend1
б_ иначе -> backend2
?

Сейчас я для тестирования использую второй бот, но это неудобно в плане отправки заранее заготовленных ресурсов (file_id и т.п.)

@VBart
Copy link
Contributor

VBart commented May 22, 2024

Можно воспользоваться методом балансировки hash, где в качестве значения брать подстроку из тела.

Либо использовать sticky в режиме route, где в качестве значения брать производную от подстроки из тела, пропущенную через map или split_clients - на входе переменная с телом, в которой ищется подстрока, а на выходе будет sid сервера.

Тело запроса будет в переменной $request_body. Может понадобиться также включение директивы client_body_in_single_buffer и увеличение client_body_buffer_size. Найти в теле какую-то подстроку можно с помощью директивы map с регулярным выражением, в котором, в том числе, можно использовать т.н. группы захвата (captures).

@VBart VBart added the question Question about product label May 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Question about product
Projects
None yet
Development

No branches or pull requests

2 participants