Веб-скрапінг став простішим з Nannostomus
Багатьом компаніям потрібно отримувати дані з вебсайтів для аналітики чи прийняття рішень. Але необроблені дані, які можна знайти онлайн, зазвичай не підходять для безпосереднього використання. Тому ми розробили рішення для зручного збору даних, навіть якщо команда має лише базові знання програмування.
Nannostomus — це хмарний інструмент з мікросервісною архітектурою, здатний вирішити 99.9% задач і забезпечити мінімальні витрати. Наприклад, в одному з наших проєктів вартість збору одного запису з зображенням склала $0,0001.
Виклики при створенні веб-скрапера для даних
Нерівномірне навантаження
Попередні рішення для скрапінгу не використовували AWS ресурси оптимально. Через неправильну організацію віртуальні машини завантажувалися нерівномірно: деякі EC2 інстанси були недовантаженими, тоді як інші – перевантаженими. Такий дисбаланс призводив до зростання витрат, особливо при масштабуванні.
Обмеження
Ліміти на запити або блокування IP через підозрілу активність також ускладнювали збір даних. Щоб зменшити ризик блокувань при використанні нашого веб-скрапінгу, ми застосовували проксі, ротацію IP-адрес і вводили затримки між запитами.
Високе навантаження
Ще однією проблемою було високе навантаження на базу даних під час збереження результатів. Коли занадто багато скраперів намагалися записати дані одночасно, це призводило до конфліктів при оновленні тих самих елементів. Ми застосували Optimistic Locking для контролю версій, щоб паралельні записи не перезаписували один одного.
Архітектура інструменту веб-скрапінгу Nannostomus
Nannostomus — хмарний інструмент для веб-скрапінгу, побудований на основі мікросервісної архітектури. Це означає, що ви можете оновлювати чи виправляти будь-яку частину системи, не зупиняючи всю роботу. Система має Mediator — безсерверний додаток, який взаємодіє між Nannostomus Console та бекенд-сервісами (WBalancer для розподілу завдань, WRegistry для керування робочими процесами та CRepository для розгортання коду). Nannostomus інтегрується з AWS, GCP і Azure, а також може бути розгорнутий локально.
Mediator зв’язує Nannostomus Console (веб-інтерфейс, яким ви користуєтеся) з бекенд-сервісами. Коли ви робите запит через консоль, Mediator передає його до потрібного сервісу і повертає відповідь. Оскільки це "безсерверне" рішення, вам не потрібно турбуватися про управління серверами. Mediator забезпечує роботу без складної інфраструктури.
WBalancer (Work Balancer) розподіляє і збалансовує всі завдання в системі. Він перевіряє наявні віртуальні машини (NWorkers) і призначає їм невеликі завдання (чанк). Таким чином, кожна машина отримує стільки роботи, скільки може виконати на даний момент. Якщо машина закінчить раніше або почне працювати повільніше, WBalancer передає завдання іншим машинам.
WRegistry (Worker Registry) контролює роботу NWorkers у системі. Він автоматично запускає, вимикає та перевіряє їх стан, щоб вони завжди були готові виконувати завдання. Це постійне управління дозволяє уникнути збоїв у роботі системи та зменшити час простоїв. WRegistry забезпечує готовність NWorkers до виконання будь-яких завдань, незалежно від навантаження.
CRepository (Code Repository) — це безсерверний додаток у системі Nannostomus, де створюються спеціалізовані пакети програмного забезпечення, які називаються CRunner images. Ці образи виконують конкретні завдання, наприклад, скрапінг даних із вебсайтів. CRepository бере стандартний шаблон (базовий CRunner image) і додає спеціальні модулі, потрібні для конкретного завдання. Він поєднує ці елементи, створюючи повноцінний софт (Docker image), готовий до використання. Після створення пакет передається NWorkers, щоб кожне програмне забезпечення було зібране правильно та було готове до роботи.
NWorker (Nannostomus Worker) — це C# додаток, який керує невеликими робочими програмами (CRunners) всередині віртуальної машини. Він відповідає за запуск, зупинку та перевірку стану CRunners, що виконують конкретні завдання. NWorker стежить за тим, щоб кожен CRunner був налаштований правильно та працював як слід. Він може одночасно керувати кількома CRunners у межах однієї віртуальної машини (AWS EC2), що дозволяє обробляти безліч завдань одночасно.
CRunner (Chunk Runner) — це C# додаток, що виконує конкретні завдання. Кожен CRunner отримує свою частину роботи (chunk). NWorker стежить за тим, щоб CRunner коректно запускався, працював і завершував завдання без помилок. Для великих проєктів завдання розбиваються на дрібніші частини, і кілька CRunner працюють паралельно. Це дозволяє системі швидше справлятися з великими завданнями, обробляючи багато невеликих частин одночасно.