Декілька фактів про наш проєкт
Більшість доступних інструментів для збору даних або коштують надто дорого, або вимагають глибоких технічних знань. Наш клієнт шукав рішення, яке б дозволило його користувачам запускати проєкти без потреби створювати складні внутрішні системи чи залучати дорогих фахівців.
Основна мета – автоматизувати процес, скоротити витрати та зробити дані доступними навіть для тих, хто не має технічних навичок. Ми розробили універсальний інструмент, що дозволяє збирати великі обсяги інформації з мінімальними зусиллями.
Виклики під час розробки додатка для збору даних
Nierównomierne obciążenie
Poprzednie rozwiązania scrapingowe nie wykorzystywały zasobów AWS w optymalny sposób. Z powodu niewłaściwej organizacji maszyny wirtualne były obciążone nierównomiernie. Część instancji EC2 pozostawała niewykorzystana, podczas gdy inne były przeciążone. Taki brak równowagi zwiększał koszty, szczególnie przy pracy na dużą skalę.
Dynamiczna treść
Witryny zmieniają formaty, dynamicznie ładują treści i łączą dane ustrukturyzowane z nieustrukturyzowanymi. Jest to problem, chyba że system potrafi dostosowywać się na bieżąco. Opracowaliśmy program do pozyskiwania danych, który przetwarza dynamiczne treści i rozpoznaje wzorce.
Duże obciążenie
Kolejnym problemem było duże obciążenie bazy podczas zapisywania wyników. Gdy zbyt wiele maszyn próbowało jednocześnie zapisywać dane, dochodziło do konfliktów przy aktualizacji tych samych elementów. Zastosowaliśmy Optimistic Locking do kontroli wersji, aby równoległe zapisy nie nadpisywały się wzajemnie.
Архітектура нашого рішення
Ta aplikacja chmurowa do pozyskiwania danych wykorzystuje architekturę mikroserwisową. Dzięki temu każdy element systemu można aktualizować lub naprawiać bez zakłócania całej operacji. System obejmuje Mediator — aplikację serverless pośredniczącą między Console, czyli używanym przez Ciebie interfejsem internetowym, a usługami backendowymi: WBalancer do rozdzielania zadań, WRegistry do zarządzania workerami i CRepository do wdrażania kodu. Narzędzie do pozyskiwania danych jest zintegrowane z AWS.
Mediator łączy Console z usługami backendowymi. Gdy wysyłasz żądanie przez konsolę tego internetowego narzędzia do gromadzenia danych, Mediator przekazuje je do odpowiedniej usługi i zwraca odpowiedź. Ponieważ działa w modelu serverless, nie musisz zarządzać serwerami bazowymi.
WBalancer (Work Balancer) rozdziela i równoważy wszystkie zadania wykonywane w systemie. Sprawdza dostępne maszyny wirtualne, nazywane NWorkers, i przydziela im małe zadania, czyli chunki. Każda maszyna otrzymuje ilość pracy dopasowaną do bieżącej wydajności. Jeśli maszyna wcześniej zakończy zadania lub zacznie zwalniać, WBalancer przenosi pracę na inne maszyny.
WRegistry (Worker Registry) zarządza cyklem życia NWorkers w systemie. Automatyzuje uruchamianie, wyłączanie i kontrole stanu każdego NWorker, aby był zawsze gotowy do obsługi zadań. Stałe zarządzanie zapobiega przerwom w działaniu i ogranicza przestoje. WRegistry gwarantuje, że niezależnie od zapotrzebowania NWorkers pozostają aktywne i dostępne do wykonania pracy.
CRepository (Code Repository) to aplikacja serverless, w której budowane są specjalistyczne pakiety oprogramowania nazywane obrazami CRunner. Obrazy te wykonują określone zadania. CRepository pobiera standardowy szablon, czyli bazowy obraz CRunner, i dodaje wyspecjalizowane moduły dla konkretnego zadania. Łączy te elementy w kompletny, gotowy do użycia pakiet oprogramowania — obraz Docker. Po zbudowaniu pakietu CRepository wysyła go do NWorkers. Dzięki temu każdy pakiet przeznaczony do konkretnego zadania jest prawidłowo złożony i gotowy do działania.
NWorker to aplikacja C#, która zarządza mniejszymi workerami, nazywanymi CRunners, wewnątrz maszyny wirtualnej. Odpowiada za uruchamianie, zatrzymywanie i sprawdzanie stanu CRunners, czyli programów wykonujących zadania. Dba o prawidłową konfigurację i działanie każdego CRunner. NWorker może jednocześnie zarządzać wieloma CRunners w obrębie jednej maszyny wirtualnej, czyli instancji AWS EC2, dzięki czemu system przetwarza wiele zadań równolegle.
CRunner (Chunk Runner) to aplikacja C# wykonująca zadania. Każdy CRunner otrzymuje określoną pracę, czyli chunk. NWorker nadzoruje CRunner i dba o to, aby uruchomił się prawidłowo, działał bez problemów i zakończył zadanie. W dużych projektach pracę dzieli się na mniejsze chunki, a wiele CRunners wykonuje je jednocześnie. Pozwala to szybciej realizować duże zadania przez równoległe przetwarzanie wielu małych części.
Технології, які ми використовували в проєкті
C#
Docker
RabbitMQ
AWS
Amplify
AppSync
SNS
Lambda
DynamoDB
Systems Manager
Результати: ефективний інструмент для веб-скрапінгу онлайн
Ми створили масштабований інструмент на основі мікросервісної архітектури, який спрощує автоматизацію процесів збору даних. Ось основні функції, які роблять його ефективним:
- C# бібліотека. Завдяки готовим кодовим фрагментам навіть розробники-початківці можуть створювати боти для збору інформації.
- Керування ресурсами. Система рівномірно розподіляє навантаження, забезпечуючи максимальну продуктивність кожної віртуальної машини.
- Обробка вебсайтів партіями. Інструмент дозволяє витягувати всі доступні дані з будь-якої кількості джерел.
- Послуги. Інтегрована проксі-мережа дає можливість використовувати кілька IP-адрес, обходячи обмеження.
- Управління проєктами. Контролюйте хід роботи завдяки детальній статистиці та білінговому модулю.