Niepowodzenie importu XML Tourplan w przypadku katalogów dużych dostawców i fragmentaryczny potok importu, który zapobiegał przekroczeniu limitu czasu
Opublikowany: 2025-11-25W dynamicznym świecie technologii turystycznych, gdzie dane od setek dostawców muszą być stale pozyskiwane i aktualizowane, wydajność i niezawodność stają się krytyczne. Wiele firm korzysta z Tourplan, wiodącego systemu zarządzania podróżami, który obsługuje treści dostawców za pomocą funkcji importu XML. Jednakże wraz ze wzrostem rozmiaru katalogów dostawców – czasami sięgającym setek tysięcy produktów – tradycyjny proces importu XML zaczął zawodzić. To wąskie gardło skłoniło programistów do wdrożenia inteligentniejszego, podzielonego na kawałki potoku importu, aby utrzymać stabilność i wydajność systemu.
TL;DR
Podczas importowania dużych katalogów dostawców do Tourplan za pośrednictwem XML wiele firm borykało się z powtarzającymi się awariami i błędami przekroczenia limitu czasu. Problem wynikał z niezdolności systemu do obsługi ogromnych ładunków XML w jednej transakcji. Wprowadzenie potoku importu fragmentarycznego, w którym dane są dzielone na mniejsze, łatwe w zarządzaniu części, umożliwiło pomyślne przetwarzanie bez przekroczeń limitu czasu. To rozwiązanie zwiększyło zarówno niezawodność, jak i skalowalność dla użytkowników Tourplan obsługujących duże ilości danych dostawców.
Wyzwanie związane z importem XML na dużą skalę
W swej istocie funkcja importu danych XML w Tourplan została zaprojektowana w celu ułatwienia automatyzacji przyjmowania treści dostawców. Dostawcy będą generować pliki XML zawierające ogromne zbiory danych — hotele, wycieczki, struktury cenowe, zasady sezonowe, kalendarze dostępności i nie tylko. Pliki te są niezbędne dla biur podróży, aby zapewnić aktualność zapasów.
Jednak wiele zespołów zaczęło napotykać krytyczny problem: wraz ze wzrostem rozmiaru plików XML proces importu zaczął się nie powieść z powodu przekroczenia limitu czasu, obciążenia pamięci na serwerach lub całkowitych awarii. Główny problem sprowadzał się do kilku kluczowych ograniczeń:
- Import jednowątkowy: import XML z Tourplan przetworzył cały plik za jednym razem, zużywając ogromne zasoby.
- Brak śledzenia postępu: po rozpoczęciu procesu importowania nie było możliwości jego wstrzymania, wznowienia ani bezpiecznego odzyskania po awarii.
- Brak mechanizmów wsadowych: potok importu zakładał, że wszystkie dane można analizować i weryfikować w pamięci.
Wynik? Nieudane importy, uszkodzone zestawy danych i zaległości w aktualizacjach dostawców. Samo zwiększenie zasobów serwera nie było opłacalnym rozwiązaniem długoterminowym.
Objawy wskazujące na wąskie gardło
Pojawiło się kilka wyraźnych symptomów wskazujących na systemowe wąskie gardło w rurociągu importowym Tourplan:
- Błędy przekroczenia limitu czasu: Zadania importu byłyby uruchamiane godzinami i przerywane przez liczniki czasu nadzoru serwera.
- Częściowe pozyskiwanie danych: zespoły zauważyły, że chociaż niektóre rekordy zostały zaktualizowane, inne pozostały nieaktualne, co skutkowało niespójnymi cenami i dostępnością.
- Zwiększona liczba zgłoszeń do pomocy technicznej: użytkownicy końcowi zaczęli zauważać anomalie w planach podróży i ofertach generowanych na podstawie nieaktualnych katalogów.
Ponieważ stawka jest coraz większa, a rozmiary katalogów rosną z roku na rok, konieczne było opracowanie bardziej skalowalnej i odpornej metody.
Rozwiązanie: fragmentaryczny rurociąg importowy
Ponowne przemyślenie architektury importu doprowadziło do krytycznego wniosku — gdyby dane można było przetwarzać etapami lub fragmentami , ryzyko przekroczenia limitu czasu i awarii wydajności można by znacznie zmniejszyć. Pomysł ten dał początek nowemu rurociągowi importu fragmentarycznego.
Co to jest fragmentowanie? W kontekście importu danych XML dzielenie na porcje oznacza dzielenie dużych plików na mniejsze, logicznie oddzielone segmenty, które są przetwarzane pojedynczo. Każdy segment może reprezentować określony rodzaj danych (hotele, ceny, kalendarze) lub nawet wycinki identycznych typów danych (np. 5000 obiektów hotelowych na porcję).

W potoku importu fragmentarycznego zastosowano kilka najlepszych praktyk:
- Etap wstępnego przetwarzania: oryginalny plik XML jest najpierw analizowany i dzielony przy użyciu analizatora składni, który identyfikuje logiczne punkty przerwania, takie jak znaczniki zamykające lub predefiniowane grupowania obiektów.
- Przetwarzanie oparte na kolejce: każdy wynikowy fragment jest dodawany do kolejki zadań i przetwarzany asynchronicznie, aby uniknąć przeciążenia pamięci systemowej.
- Niezawodne punkty kontrolne: każdy fragment zawiera metadane do celów audytu i w przypadku awarii można go niezależnie ponowić.
- Śledzenie i rejestrowanie postępów: Zaimplementowano pulpity nawigacyjne umożliwiające śledzenie powodzenia/porażki każdego fragmentu w celu zapewnienia pełnej przejrzystości.
Szczegóły techniczne wdrożenia
Przyjrzyjmy się, jak zostało to technicznie osiągnięte.

1. Mechanizm kawałkowania
Korzystając z parsera strumieniowego XML (takiego jak SAX lub StAX w Javie lub lxml w Pythonie), plik był odczytywany wiersz po wierszu, zamiast być ładowany do pamięci na raz. Węzły logiczne (np. <Hotel>, <Wycieczka>) zostały wyodrębnione do oddzielnych plików lub bloków pamięci jako samodzielne dokumenty.
2. Asynchroniczna kolejka procesów roboczych
Kolejka zadań obsługiwana przez narzędzia takie jak RabbitMQ lub AWS SQS zarządzała przesyłaniem podzielonych zadań. Wielu pracowników może działać jednocześnie, aby przetwarzać fragmenty w różnych rdzeniach procesora lub węzłach klastra, radykalnie poprawiając wydajność.
3. Struktura obsługi błędów
Jeżeli jeden fragment nie powiódł się, był on rejestrowany osobno i można go było ponownie przetworzyć bez konieczności powtarzania całego importu. Zmniejszyło to ryzyko i znacznie skróciło czas powrotu do zdrowia.

Korzyści widoczne w produkcji
Po wdrożeniu systemu importu fragmentarycznego kilka biur podróży zaobserwowało wyraźną poprawę:
- Zmniejszenie liczby niepowodzeń importu o 90%: Importy, które wcześniej nie powiodły się z powodu przekroczenia limitu czasu, są teraz zakończone bez problemów.
- Szybsze odzyskiwanie: Nieudane fragmenty można natychmiast ponowić, co pozwala na sprawniejszą korekcję błędów.
- Zmniejszone obciążenie serwera: ponieważ porcje były mniejsze i przetwarzane asynchronicznie, użycie pamięci i procesora ustabilizowało się.
- Przejrzystość: dzienniki importu i pulpity nawigacyjne zapewniały jasny wgląd w to, które dane zostały przetworzone, a które nie.
Podejście to okazało się szczególnie skuteczne w szczytowym sezonie podróży, kiedy aktualizacje dostawców są częste i zależne od czasu. Zespoły mogą planować nocne lub cogodzinne importy bez obawy o awarię systemów lub wygenerowanie uszkodzonych tras.
Wyciągnięte wnioski
To doświadczenie dostarczyło kilku kluczowych lekcji na temat procesów ETL (wyodrębnij, przekształć, załaduj) na nowoczesnych platformach turystycznych:
- Skala ma znaczenie: to, co sprawdza się w przypadku tysięcy rekordów, może załamać się przy milionach — systemy muszą ewoluować wraz z ilością danych.
- Obserwowalność jest kluczowa: dzienniki, metryki i pulpity nawigacyjne powinny stanowić podstawę każdego zautomatyzowanego systemu importu.
- Projekt na wypadek niepowodzenia: wszystko powinno być możliwe do ponowienia i żadna operacja nie powinna nigdy zakładać, że przebiegnie ona „idealnie”.
Przyszłe ulepszenia i kolejne kroki
Choć fragmentaryczny rurociąg zmienił zasady gry, na tym nie skończyły się innowacje. Obecnie kilka firm bada:
- Integracja API dostawcy w czasie rzeczywistym: Całkowite ominięcie zrzutów plików XML poprzez synchronizację danych za pośrednictwem interfejsów API REST.
- Sprawdzanie poprawności danych na krawędzi: wdrożenie sprawdzania poprawności przed importem przy użyciu XSD i schematu JSON w celu ograniczenia scenariuszy wyrzucania śmieci.
- Infrastruktura automatycznego skalowania: używanie Kubernetesa lub frameworków bezserwerowych do dynamicznego skalowania liczby importowanych procesów roboczych w oparciu o wielkość zadania.
Wniosek
Dane są siłą napędową każdego nowoczesnego biura podróży. W miarę jak ekosystemy dostawców stają się coraz bardziej złożone, systemy takie jak Tourplan muszą ewoluować, aby obsługiwać coraz większe i częstsze aktualizacje. Przejście na potok importu fragmentarycznego nie tylko rozwiązało problem przekroczenia limitu czasu importu XML, ale także otworzyło drzwi do solidniejszego, wydajnego i skalowalnego ekosystemu zarządzania danymi.
Firmy, które przyjęły tę architekturę, przetwarzają teraz import szybciej, z większą dokładnością i czasem pracy, zmieniając dawny problem w przewagę konkurencyjną.
