CoderCastrov logo
CoderCastrov
Google Cloud Platform

Запуск платформы парсинга на Google Cloud всего за $0.05 в месяц

Запуск платформы парсинга на Google Cloud всего за $0.05 в месяц
просмотров
5 мин чтение
#Google Cloud Platform

Недавно я столкнулся с проблемой поиска квартиры в Берлине. Исходя из моего предыдущего опыта в этом деле, я решил автоматизировать задачу и написать программу, которая будет отправлять мне уведомления о лучших предложениях. В этой статье я объясню, как я создал основы этой платформы.

Платформа, которую я создал, - это приложение на Go, развернутое на Google Cloud с использованием Terraform. Кроме того, оно имеет непрерывное развертывание из частного репозитория GitHub.


После краткого исследования я составил следующий список платформ для мониторинга:

  • eBay Kleinanzeigen
  • ImmobilienScout24
  • Immowelt
  • Nestpick

Через несколько часов у меня уже был бинарный файл на Go, который делал все, что мне нужно для запуска приложения локально. Он использовал фреймворк для парсинга веб-страниц Colly для просмотра списков на всех платформах, извлечения основных атрибутов и экспорта их в CSV-файлы в локальную файловую систему.

Поскольку я не хотел поддерживать работу приложения локально, мой первый выбор был арендовать дешевый экземпляр на Google Cloud. Как только у меня была виртуальная машина, я мог написать скрипт запуска для компиляции приложения из GitHub и настроить crontab для парсинга платформ ежедневно.

Вероятно, это было бы лучшим решением для этого конкретного проекта, но можно ли использовать эту личную проблему как возможность исследовать интеграцию услуг Google Cloud?

Учитывая, что в прошлом я участвовал в нескольких проектах, связанных с парсингом веб-страниц, я считал, что это стоит усилий. Я мог бы легко использовать эту настройку в будущем.

Моя архитектура началась с нескольких предпосылок:

  • Она должна использовать услуги Google Cloud.
  • Она должна поддерживать сбор данных каждые несколько минут, даже если я начну собирать их только раз в день.
  • Она должна быть столь же экономичной, как дешевый сервер в DigitalOcean (5 долларов США).
  • Она должна быть легкой в развертывании. Идеально, если она будет поддерживать непрерывное развертывание.
  • Она должна поддерживать запуск процесса сбора данных по требованию - например, после HTTP POST-запроса.

Я предполагал, что мне не нужна виртуальная машина, работающая 24/7; поэтому она не должна стоить столько же, сколько полный месячный платеж. Фактически, мое приложение могло загрузить все интересующие меня объекты менее чем за 3 минуты, поэтому я ожидал значительно меньшую стоимость.

Архитектура

Мои исследования последних сервисов Google Cloud привели меня к обнаружению Cloud Run, сервиса, который "запускает контейнеры без состояния в полностью управляемой среде или в вашем собственном кластере GKE". В настоящее время Google Cloud классифицирует его как продукт бета-версии, он построен на основе Knative и Kubernetes. Основное предложение заключается в его модели ценообразования: он взимает плату за миллисекунды работы, а не за часы работы.

С небольшими настройками мое приложение на Go было упаковано в контейнер Docker для запуска на Cloud Run. Когда оно получает HTTP POST-запрос, оно собирает атрибуты из всех рекламируемых свойств и публикует их в виде файлов CSV в бакет Google Storage. Для моего случая использования я создал два возможных способа вызова этой конечной точки: доступный через Интернет адрес, чтобы я мог запускать его по своему усмотрению, и через Cloud Scheduler, который настроен на вызов ее ежедневно.

Приложение

Приложение довольно простое: оно состоит из HTTP-сервера с одной конечной точкой. При каждом обращении оно парсит все платформы и сохраняет результаты в CSV-файлах внутри хранилища.

./main.go

./Dockerfile

Другие файлы приложения можно найти в этом Gist. Вся обратная связь приветствуется, так как это один из моих первых проектов на Go.

Развертывание

Теперь, когда разрешения уже предоставлены, используйте Terraform для настройки остальной инфраструктуры.

$ cd deployment$ terraform init$ terraform apply

Первоначальное развертывание может занять около пяти минут, так как Terraform ожидает, пока Cloud Run построит и запустит перед настройкой Cloud Scheduler.

Поскольку Cloud Run все еще находится в бета-версии, а точки доступа API находятся в альфа-стадии, я не смог объявить всю инфраструктуру в файлах Terraform. Временным обходным путем я написал несколько вспомогательных bash-скриптов, которые запускают Cloud API через его CLI-команду. К счастью, все это происходит в фоновом режиме, когда разработчик запускает terraform apply.


Результат

Каждый день, без какого-либо взаимодействия с человеком, Cloud Scheduler создает новую папку с несколькими CSV-файлами с последними доступными квартирами в моем городе.

Затраты

Не все используемые сервисы доступны в официальном калькуляторе. В любом случае, я сделал приблизительную оценку для своего личного использования, предполагая нереальное количество одного развертывания каждый день.

Cloud Storage — 0,02 доллара США/месяц

  • Расположение: США
  • Операции класса A: 4*30 = 120
  • 1-й месяц - Хранение: 2 МБ * 30 = 60 МБ
  • 2-й месяц - Хранение: 2 МБ * 365 = 730 МБ

Cloud Run — US$ 0.00/месяц

  • Расположение: us-east1
  • Выделенный CPU: 1
  • Выделенная память: 1 ГБ
  • Одновременные запросы на одном контейнере: 1
  • Время выполнения запроса (мс): 5000
  • Исходящая пропускная способность сети на выполнение запроса (КБ): 1000
  • Запросов в месяц: 30

Cloud Build — US$ 0.00/месяц

  • Бесплатная квота 120 минут сборки в день
  • 4 минуты сборки в день

Container Registry — US$ 0.02–0.19/месяц

  • $0.026/ГБ
  • 1-й месяц - 20 МБ * 30 = 600 МБ - 600/1024 * 0.026 = 0.02
  • 2-й месяц - Хранение: 20 МБ * 365 = 7300 МБ - 7300/1024 * 0.026 = 0.19

Cloud Source Repositories — US$ 0.00/месяц

  • Бесплатная квота 5 пользователей проекта
  • 1 проект

Планировщик Cloud — 0,00 долларов США/месяц

  • бесплатная квота на 3 бесплатных задания/месяц
  • 1 задание

Для сравнения, в бесплатном тарифе включен экземпляр f1-micro с 0,6 ГБ оперативной памяти, который работает в течение всего месяца на Google Cloud; экземпляр g1-small с 1,7 ГБ стоит 13,80 долларов США в месяц. Также разумно учитывать, что стоимость может уменьшиться или увеличиться в зависимости от того, насколько точными были мои первоначальные предположения и дальнейшие оптимизации.