Я делал «nginx для телеграм‑ботов», а получился конструктор шлюзов на Rust
chesnokpeter 20 минут назад Я делал «nginx для телеграм‑ботов», а получился конструктор шлюзов на Rust Простой 6 мин 433 Rust * Из песочницы Привет, Хабр.Это история о том, как я писал балансировщик нагрузки для...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: chesnokpeter 20 минут назад Я делал «nginx для телеграм‑ботов», а получился конструктор шлюзов на Rust Простой 6 мин 433 Rust * Из песочницы Привет, Хабр. Это история о том, как я писал балансировщик нагрузки для телеграм‑ботов, на полпути понял, что телеграм тут вообще ни при чём, выкинул половину проекта — и теперь у меня Rust‑конструктор, из которого одинаково собирается реверс‑прокси, самодельный ngrok, мост HTTP → RabbitMQ → Kafka и тот самый балансировщик ботов, с которого всё началось. Проект называется tgin.
Раньше это был Telegram Gateway Interface, теперь — Traffic Gateway Interface. С чего всё началосьНачалось с банальной боли: когда телеграм‑бот перестаёт влезать в один процесс, начинается цирк. Обновления надо раскидывать по нескольким инстансам, следить, чтобы сообщения одного чата не обрабатывались вразнобой, деплоиться без потери апдейтов.
Технические детали
Я посмотрел на это и подумал: так это же nginx, только для Bot API. И сел писать «nginx для телеграм‑ботов» — лонгполл и вебхук на входе, round‑robin по инстансам на выходе, конфиг‑файл, вот это вот всё. А потом я сел переделывать это по‑нормальному и заметил вещь, которая сломала мне всё позиционирование.
ПрозрениеНи одно сложное место моего «телеграмного» балансировщика не было про телеграм. Смотрите, в чем заключалась суть проекта: принять поток сообщений, буферизовать, раскидать по потребителям, понять доставлено или нет, повторить, если нет, не захлебнуться, когда потребители тупят, и умереть красиво по ctrl+c, ничего не потеряв. Теперь замените «обновление от телеграма» на «HTTP‑запрос» или «сообщение из RabbitMQ» — список не изменился ни на пункт.
Телеграм оказался просто первой формой трафика, которая протекала через код. И тут же вторая мысль, обиднее первой: этот же клей я уже писал руками на других проектах, и не раз. Триста строк tokio‑лапши, которые перекладывают запросы из HTTP в очередь.
Отраслевые последствия
Пишутся за вечер, отлаживаются до пенсии: backpressure забыли, ack соврали, graceful shutdown осуществляется через kill -9. Подозреваю, такой файлик есть в каждом втором проекте, просто все делают вид, что его нет. Так родился план: один раз честно решить скучные проблемы в маленьком ядре, а всё остальное вынести в батарейки.
Как это выглядитШлюз на tgin — это ваш обычный Rust‑бинарь строк на двадцать. Вот полноценный реверс‑прокси:let server = HttpServer::new("0. 0:8080 let http = HttpClient::new(); Tgin::new() .
pipeline( HttpIngress::catch_all(&server), Route::new() . when( |r: &RequestData| r. starts_with("/api RoundRobin::new() .
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





