← Wszystkie case studiesCase study · Indigo

Bot na Telegramie dostarczający zlecenia z Upwork w czasie rzeczywistym

Bot na Telegramie, który śledzi kanały RSS Upwork i wysyła nowe zlecenia do tysięcy użytkowników w kilka sekund — każdy z własnymi filtrami, przy milionach wiadomości dziennie.

Stack
Python · RabbitMQ · asyncio · Telegram Bot API · Docker
Skala
tysiące użytkowników · miliony wiadomości/dzień
Dostarczanie
w kilka sekund, exactly-once
Problem

Tracker zleceń jest trywialny, dopóki nie wchodzi skala

Tracker zleceń brzmi trywialnie: odpytaj kanał, prześlij dalej nowe pozycje. Przestaje być trywialny w chwili, gdy masz tysiące użytkowników, każdy z własnymi filtrami, i jedno nowe ogłoszenie, które może pasować do setek z nich naraz.

Teraz jedno zlecenie to nie jedna wiadomość; to setki, i wszystkie muszą wyjść w kilka sekund — bez duplikatów, bez przekraczania rate limitów Telegrama i bez tego, żeby wolny kanał RSS położył cały pipeline.

Ingestia

Nakładające się okna RSS, przetwarzane dokładnie raz

Upwork udostępnia nowe zlecenia przez kanały RSS per wyszukiwanie, ale traktowanie ich jako czystego strumienia jest naiwne: kanały przy każdym odpytaniu zwracają nakładające się okna, pozycje przychodzą nie po kolei, a zbyt agresywne odpytywanie grozi throttlingiem.

Warstwa ingestii odpytuje każdy kanał według harmonogramu, normalizuje każdą pozycję do kanonicznego rekordu zlecenia i deduplikuje względem ostatnio widzianych ID, tak aby ogłoszenie zostało przetworzone dokładnie raz. Wszystko poniżej jest odseparowane od odpytywania przez RabbitMQ, więc awaria lub spowolnienie kanału nigdy nie blokuje dostarczania.

Fan-out

Jedno ogłoszenie, setki dopasowań, jedna głęboka kolejka

Tysiące użytkowników definiuje własne wyszukiwania i filtry słów kluczowych, a jedno ogłoszenie może pasować do setek naraz. Zamiast dopasowywać w locie, nowe zlecenia trafiają do RabbitMQ i są konsumowane przez pulę workerów, które oceniają każde ogłoszenie względem zestawów filtrów użytkowników i robią fan-out jednego zadania dostarczenia na każdego dopasowanego użytkownika.

Kolejka pochłania skoki obciążenia: fala ogłoszeń w szczycie nie zalewa systemu, tylko pogłębia kolejkę, a workery drenują ją w kontrolowanym tempie. To właśnie podnosi przepustowość do milionów wiadomości dziennie.

Dostarczanie

Dostarczanie przy dużym obciążeniu w granicach rate limitów Telegrama

Telegram wymusza limity tempa per czat i globalne; ich przekroczenie kończy się throttlingiem bota. Warstwa dostarczania respektuje te limity dzięki workerom z kontrolą tempa, backpressure i automatycznemu retry z backoffem przy błędach 429, tak aby powiadomienia nie były ani gubione, ani wysyłane nie po kolei.

Nieudane wysyłki są ponownie kolejkowane, a nie porzucane, a błędy przejściowe są obsługiwane spokojnie. Efektem jest pipeline, który pozostaje niezawodny przy tysiącach użytkowników i milionach wiadomości dziennie, dostarczając dopasowania w kilka sekund od pojawienia się zlecenia na Upwork.

Bezpłatny audyt procesów

Zobacz, jak wyglądałoby to w Twoich procesach.

Skontaktuj się

30 minut · wskazujemy 3 najlepsze obszary do automatyzacji · bez zobowiązań