Cel i oczekiwania klienta
Klient to amerykańska firma zajmująca się agregacją danych, oferująca produkt skierowany do konsumentów. Chciała rozszerzyć swoją ofertę o nową funkcję wyszukiwania opartą na dodatkowej kategorii publicznie dostępnych danych. Dane te nie były częścią istniejącego pipeline’u i wymagały nowego podejścia do ich pozyskiwania i przetwarzania.
Wymagania klienta:
- Comiesięczny, gotowy do użycia produkcyjnego zbiór danych z ponad 60 stron internetowych
- Stały schemat CSV, aby uniknąć zmian w dalszych etapach pipeline’u
- Ciągły monitoring procesu ładowania danych
- Optymalizacja procesu w celu poprawy jakości danych
Dlaczego ten projekt był wymagający
Różnorodność źródeł
Dane pochodziły z ponad 60 publicznych stron internetowych. Każde źródło miało własną strukturę, zasady nazewnictwa i logikę dostępu. Nie istniał wspólny standard, na którym można było się oprzeć.
Dynamicznie zmieniające się strony
Strony internetowe zmieniały się bez wcześniejszego powiadomienia. Niektóre aktualizacje powodowały awarie loaderów. Inne zmieniały położenie pól, przez co system generował nieprawidłowe dane, które na pierwszy rzut oka wyglądały poprawnie.
Rozproszone rekordy
Ta sama osoba mogła występować wielokrotnie w obrębie jednego stanu i w różnych formatach. Prosta agregacja prowadziła do powstawania duplikatów i niespójności.
Stabilność schematu
Pipeline’y klienta były zależne od stałej struktury CSV. Nawet niewielkie zmiany schematu mogły zakłócić automatyczne pozyskiwanie danych i logikę wyszukiwania.
Rozwiązanie zastosowane w projekcie
Zbudowaliśmy modularny system pozyskiwania danych, w którym każde publiczne źródło jest obsługiwane niezależnie. Pozwala to izolować awarie, wprowadzać ukierunkowane poprawki i zapobiegać sytuacjom, w których zmiana jednego źródła wpływa na pozostałą część pipeline’u.
Wszystkie moduły są uruchamiane i zarządzane za pomocą naszych wewnętrznych narzędzi. System kontroluje kolejność wykonywania, równoważy równoległe procesy i rozdziela obciążenie infrastruktury, dzięki czemu comiesięczne przetwarzanie pozostaje przewidywalne i kontrolowane pod względem kosztów.
Po zebraniu dane są łączone na poziomie poszczególnych stanów. Rozproszone rekordy są grupowane, generowane są statystyki, a wewnętrzne niespójności są wykrywane jeszcze przed dostarczeniem danych.
Normalizujemy tekst, rozdzielamy złożone pola, ujednolicamy formaty i przygotowujemy rekordy do konsolidacji bez zmieniania schematu dostarczanych danych.
Każde uruchomienie jest monitorowane na poziomie części danych i modułów. Porównujemy oczekiwane wyniki z rzeczywistymi dla każdego źródła i generujemy raporty wskazujące awarie, częściowe załadowania oraz zmiany w danych.
Każdy etap przetwarzania generuje szczegółowe logi, które przypisują błędy do konkretnego źródła, części danych i etapu wykonania. Skraca to czas analizy problemów i umożliwia wprowadzanie precyzyjnych poprawek.
Finalne zbiory danych są dostarczane jako pliki CSV ze stałym schematem. Struktura, kolejność pól i formaty pozostają niezmienne z miesiąca na miesiąc, dzięki czemu klient może korzystać z danych bez wprowadzania zmian w pipeline’ie.
Od momentu uruchomienia system jest stale rozwijany. Optymalizujemy czas wykonania, ograniczamy wykorzystanie infrastruktury i udoskonalamy poszczególne etapy przetwarzania.
Rezultaty projektu
Nowy zbiór danych stał się podstawą dodatkowej funkcji wyszukiwania w produkcie konsumenckim klienta. Co równie ważne, przepływ danych okazał się stabilny w środowisku produkcyjnym.
Comiesięczne aktualizacje były dostarczane w stałej strukturze, a proces ingestion działał bez konieczności ciągłej ingerencji.
Rezultaty biznesowe:
- Umożliwiono upselling dzięki rozszerzeniu zakresu wyszukiwania
- Rozszerzono możliwości produktu bez konieczności przebudowy logiki ingestion
- Zmniejszono koszty operacyjne dzięki comiesięcznym dostawom danych ze stabilnym schematem