Открыть сервис

Heroku

Heroku — это облачная платформа как услуга (PaaS), предоставляющая возможность развёртывания, управления и масштабирования веб-приложений. Платформа поддерживает несколько языков программирования, включая Ruby, Java, Node.js, Python, PHP, Go и Scala, и позволяет разработчикам сосредоточиться на написании кода, делегируя инфраструктурные задачи (настройку серверов, балансировку нагрузки, мониторинг) провайдеру. Heroku входит в экосистему Salesforce и является одной из старейших и наиболее популярных PaaS-платформ.

История

Основание и ранние годы

Heroku была основана в 2007 году Джеймсом Линденбаумом, Адамом Уиггинсом и Орионом Генри. Изначально платформа была ориентирована исключительно на язык Ruby и фреймворк Ruby on Rails, что позволило ей быстро завоевать популярность среди разработчиков, ценивших простоту развёртывания. Первый публичный релиз состоялся в 2008 году.

Приобретение Salesforce

В 2010 году компания Salesforce.com (организация признана иностранным агентом в РФ) приобрела Heroku за 212 миллионов долларов. Это приобретение позволило Salesforce интегрировать облачные вычисления в свою экосистему CRM, а Heroku — получить доступ к ресурсам крупного вендора. После покупки платформа расширила поддержку языков и добавила новые сервисы, такие как Heroku Postgres и Heroku Redis.

Изменения в ценовой политике

В 2022 году Heroku объявила об отмене бесплатного тарифа, который существовал с момента основания. Это решение было связано с необходимостью борьбы со злоупотреблениями (использование бесплатных ресурсов для майнинга криптовалют и DDoS-атак). С тех пор минимальная стоимость использования платформы составляет около 5 долларов в месяц за базовый dyno.

Архитектура и ключевые концепции

Dyno

Основной единицей вычислительных ресурсов в Heroku является dyno — изолированный контейнер (на базе Linux-контейнеров), в котором выполняется приложение. Dyno бывают нескольких типов:

  • Web dyno — обрабатывает HTTP-запросы (обычно запускает веб-сервер, например, Puma или Gunicorn).
  • Worker dyno — выполняет фоновые задачи (например, обработку очередей или отправку писем).
  • One-off dyno — временный dyno для выполнения разовых команд (например, миграций базы данных).

Платформа автоматически управляет жизненным циклом dyno: при сбое контейнер перезапускается, а при масштабировании — создаются новые экземпляры.

Procfile

Для определения того, какие процессы должны запускаться в dyno, используется файл Procfile. Это текстовый файл в корне репозитория, который содержит инструкции вида: `` web: gunicorn myapp.wsgi --log-file - worker: celery -A myapp worker --loglevel=info `` Каждая строка соответствует типу dyno и команде для его запуска.

Buildpack

Buildpack — это набор скриптов, которые определяют, как Heroku должна собирать и запускать приложение на определённом языке. Стандартные buildpack’и поддерживают Ruby, Python, Node.js, Java, Go и другие языки. Разработчики могут создавать собственные buildpack’и для нестандартных сред.

Add-on

Heroku предоставляет экосистему add-on — готовых сервисов, которые можно подключить к приложению одной командой. Среди них:

  • Heroku Postgres — управляемая база данных PostgreSQL.
  • Heroku Redis — кэш и брокер сообщений на основе Redis.
  • SendGrid — сервис отправки электронной почты.
  • New Relic — мониторинг производительности приложений.

Add-on’ы могут быть как бесплатными (с ограничениями), так и платными.

Развёртывание приложений

Через Git

Основной способ развёртывания — через Git. Разработчик добавляет удалённый репозиторий Heroku и выполняет команду git push heroku main. Платформа автоматически обнаруживает язык приложения, запускает сборку (через buildpack) и развёртывает новую версию. Этот процесс называется Git-based deployment.

Через Heroku CLI

Heroku предоставляет интерфейс командной строки (CLI), который позволяет управлять приложениями, просматривать логи, масштабировать dyno и подключать add-on’ы. Примеры команд:

  • heroku create — создать новое приложение.
  • heroku logs --tail — просмотр логов в реальном времени.
  • heroku ps:scale web=2 — масштабирование до двух web-dyno.

Через GitHub Integration

Heroku поддерживает интеграцию с GitHub, позволяя автоматически развёртывать приложения при каждом push в определённую ветку (например, main). Для этого необходимо авторизовать Heroku в GitHub и настроить автоматическое развёртывание в панели управления.

Масштабирование и производительность

Вертикальное масштабирование

Heroku позволяет изменять размер dyno (выделяемые ресурсы CPU и RAM). Доступны следующие типы:

  • Eco — самый дешёвый вариант (до 512 MB RAM).
  • Basic — 512 MB RAM, подходит для небольших проектов.
  • Standard-1X, Standard-2X — 512 MB и 1 GB RAM соответственно.
  • Performance-M, Performance-L — до 2,5 GB RAM и 14 GB RAM, с выделенным CPU.

Горизонтальное масштабирование

Разработчик может увеличить количество dyno одного типа (например, запустить 10 web-dyno для обработки большого трафика). Heroku автоматически распределяет запросы между ними с помощью встроенного балансировщика нагрузки.

Автомасштабирование

Для платных тарифов доступна функция autoscaling, которая автоматически увеличивает количество dyno при росте нагрузки и уменьшает при её снижении. Параметры масштабирования (минимальное и максимальное количество dyno) настраиваются вручную.

Ограничения и критика

«Эфемерная файловая система»

Heroku использует эфемерную файловую систему: все файлы, записанные во время выполнения приложения, теряются при перезапуске dyno. Это ограничение требует использования внешних хранилищ (например, Amazon S3 или Heroku Postgres) для хранения пользовательских данных и загруженных файлов.

Зависимость от экосистемы

Платформа сильно завязана на собственные add-on’ы и сервисы. При попытке миграции на другую инфраструктуру (например, AWS EC2 или Google Cloud Run) разработчику может потребоваться переписывать значительную часть кода, связанную с конфигурацией.

Стоимость

Хотя Heroku удобна для прототипирования, её стоимость для production-нагрузок может быть выше, чем у конкурентов (например, AWS Elastic Beanstalk или DigitalOcean App Platform). Особенно это касается баз данных: Heroku Postgres с высокими требованиями к производительности стоит существенно дороже самостоятельного развёртывания PostgreSQL на виртуальном сервере.

Vendor lock-in

Использование проприетарных инструментов (например, Heroku CLI или специфических buildpack’ов) может усложнить переход на другие платформы. Однако многие концепции Heroku (Procfile, dyno) были позаимствованы другими PaaS-решениями, что частично снижает этот риск.

Применение

Heroku часто используется для:

  • Прототипирования и MVP — быстрая проверка идей без затрат на инфраструктуру.
  • Образовательных проектов — простота развёртывания позволяет студентам сосредоточиться на коде.
  • Небольших и средних веб-приложений — например, блогов, API, панелей администраторов.
  • Ботов и интеграций — благодаря поддержке фоновых задач и очередей.

Крупные компании (например, GitHub, Airbnb, Zendesk на ранних этапах) использовали Heroku для быстрого запуска продуктов, но со временем переходили на более гибкие и дешёвые решения.

Конкуренты

Основные конкуренты Heroku на рынке PaaS:

  • AWS Elastic Beanstalk — сервис от Amazon, поддерживающий больше языков и интеграций, но требующий более глубоких знаний AWS.
  • Google App Engine — платформа от Google, ориентированная на автоматическое масштабирование и интеграцию с BigQuery и Cloud Storage.
  • Microsoft Azure App Service — PaaS-решение от Microsoft, тесно связанное с экосистемой .NET и Azure.
  • DigitalOcean App Platform — более дешёвый аналог, предлагающий схожий опыт развёртывания.
  • Fly.io — современная платформа, позволяющая запускать приложения ближе к пользователям (edge computing).

Интересные факты

  • Название «Heroku» происходит от японского слова «heroku» (героический), что отражает амбиции основателей сделать платформу «героической» для разработчиков.
  • В 2011 году Heroku пережила крупный сбой, вызванный ошибкой в конфигурации сети, который затронул тысячи приложений. После этого инцидента платформа внедрила более строгие процедуры тестирования.
  • Heroku была одной из первых платформ, предложивших концепцию «12-factor app» — методологии создания облачных приложений, которая стала стандартом в индустрии.

Источники

  • Heroku Dev Center: официальная документация платформы.
  • «The Heroku Book» — книга по развёртыванию приложений на Heroku.
  • Отчёты Salesforce о приобретении Heroku (2010).
  • Статья «Heroku’s Free Plan Retirement: What It Means for Developers» (2022).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →