Studium przypadku
Analiza zagęszczenia ludzi
Odporny pipeline mikroserwisowy w Pythonie, który kolejkuje analizę obrazów, wykonuje inferencję YOLO i asynchronicznie zapisuje wyniki.
Wewnątrz projektu
Kontekst
Projekt akademicki sprawdza, jak udostępnić zadanie inferencji AI jako niezawodny system rozproszony zamiast pojedynczego blokującego endpointu. Klient przekazuje adres obrazu, przetwarzanie odbywa się asynchronicznie, a końcowy wynik z liczbą osób udostępnia osobna usługa.
Rola
Zaprojektowałem i zaimplementowałem podział na usługi, interfejsy API, topologię RabbitMQ, workery przetwarzające i dostarczające wyniki, warstwę zapisu oraz zabezpieczenia pobierania obrazów z zewnętrznych adresów.
Ograniczenia
Inferencja obrazu może trwać długo lub zakończyć się błędem niezależnym od aplikacji. Architektura wymagała więc trwałych kolejek, kontrolowanych ponowień, rozdzielenia odpowiedzialności i ochrony przed SSRF podczas pobierania adresów podanych przez użytkownika.
Podejście
Usługa kolejkowania w FastAPI przyjmuje zadania i publikuje je w RabbitMQ. Worker przetwarzający bezpiecznie pobiera obraz, wykonuje inferencję Ultralytics YOLO i publikuje rezultat w oddzielnej kolejce. Worker dostarczający przekazuje ukończone wyniki do usługi FastAPI korzystającej z PostgreSQL. Dead Letter Exchanges oraz ponowienia z wykładniczo rosnącym opóźnieniem zapewniają niezawodność bez wiązania czasu odpowiedzi API z czasem działania modelu.
Rezultat
Powstał modułowy pipeline gotowy do uruchamiania w kontenerach, w którym przyjmowanie zadań, przetwarzanie AI, dostarczanie wyników i zapis danych mogą skalować się niezależnie. Błędy są widoczne i możliwe do obsłużenia, a publiczne API pozostaje responsywne nawet przy dłuższej inferencji.
Wnioski
Projekt pokazał, że produkcyjne systemy AI są w dużej mierze zadaniem z obszaru inżynierii systemowej. Czytelne kontrakty wiadomości, idempotentne dostarczanie, polityki ponowień i bezpieczna obsługa sieci zmieniają pojedyncze wywołanie modelu w niezawodną usługę.