Рубрики
Uncategorized

Платформа Digital Ocean App vs Heroku

Отказ от ответственности: я получил бесплатный цифровой океанский кредит за участие в Dev.to Hackathon. Однако,… Tagged с Digitalocean, Heroku, Compare, DevOps.

Отказ от ответственности: я получил бесплатный цифровой океанский кредит за участие в Dev.to Hackathon. Однако этот пост не связан с хакатоном, и я не получил компенсацию за это.

Я участвовал в хакатоне на Dev.to, спонсируемом Digital Ocean. Все строят приложения и размещают их с помощью новой платформы приложений Digital Ocean. Это был мой первый раз, когда я использовал платформу приложений, и я хотел написать об этом!

Примечание. Для остальной части статьи я иногда буду сокращать платформу для приложений Digital Ocean.

Я не собирался, чтобы это было прямым сравнением с Хероку, но я думаю, что это самый честный способ сделать это по нескольким причинам. Во -первых, Heroku — это продукт, который я использую почти ежедневно. Я использую его профессионально, и именно здесь я обычно принимаю боковые проекты. Во -вторых, платформа приложений это В основном клон Heroku. Было бы очень сложно не сравнивать. Например, DOAP использует то же самое Cloud Native BuildPacks (Установите сценарии) как Heroku, и вы даже увидите ссылки на документацию Heroku и Heroku в ваших журналах развертывания. Пока я буду сравнивать Heroku и Digital Ocean здесь, я собираюсь попробуйте не привлекать платформу приложений Digital Ocean, ответственную за то, что они имеют все функции Heroku; В конце концов, это совершенно новый продукт. Но есть некоторые важные упущения, чтобы упомянуть позже.

Прежде чем мы погрузимся, я хотел быстро пройти свой опыт для контекста. Я в основном профессионально разработчик Rails, и я на работе в команде «Инфраструктура», поэтому я тесно связан с Heroku и очень знаком с их продуктом и предложениями. Учитывая мой опыт Rails, эта статья будет сосредоточена на развертывании веб -приложения, по крайней мере, с одним фоновым процессом работы. Для моего приложения Hackathon у меня был веб -процесс, запущенный Puma и рабочий процесс, работающий Задержка Анкет

С учетом сказанного, давайте погрузимся в просмотр платформы приложений!

На адаптировании

Создание приложения является простым, с предостережением, что вы должны связать учетную запись GitHub. В отличие от Heroku, который может работать от «простого» толкания GIT, Digital Ocean поддерживает только добавление репозитория GitHub. Digital Ocean использует приложение GitHub и поддерживает выбор только те репо, к которым вы хотите предоставить доступ.

Поток адаптации спрашивает, какое приложение у вас есть, в зависимости от того, что автоматически определено в репо. Когда я создаю приложение Rails, я вижу только Веб -сервис в качестве опции, и он автоматически заполняет команду «запустить», чтобы быть Bundle Exec Rails Server . Если я выберу приложение со встроенным файлом Docker, я также вижу Статический сайт вариант.

Здесь есть некоторые настройки, которых нет в Heroku. Во -первых, вы можете выбрать, на каких префиксах HTTP вы хотите установить свое приложение. По умолчанию / , что, вероятно, имеет смысл в 99% случаев. Идея этих префиксов, возможно, вы хотите установить свое главное приложение к / а затем иметь отдельный «компонент», нанесенный на карту /администратор . Это затрагивает еще один момент о платформе приложений, который я буду обсуждать позже; Как приложения разделены на «компоненты». Второй вариант, с которым я не был знаком с Героку, — это Http port, которое ваше приложение будет слушать. Это бросило меня за петлю всего за секунду. На Heroku вам предоставлено $ Port переменная среды и ожидается прослушивать HTTP -запросы на этом порту. Поэтому моя первоначальная мысль заключалась в том, что этот вариант предназначался для экспозиционного HTTP -порта. Единственная причина, по которой я понял, что этого не было в том, что он был предварительно заполнен 8080 Анкет Если бы это был внешний порт, я предположил, что он будет предварительно заполнить 80 Поскольку http по умолчанию. Из -за этого дефолта я понял, что это был порт, который я должен был послушать, но здесь можно было бы полезно. Документы Объясните, что порт есть, но этот документ не связан с потоком адаптации.

Архитектура

А Приложение является объектом верхнего уровня в DOAP; Это соответствует семантике в Хероку.

Архитектурно «компоненты» и то, как они живут в «приложении», — это то, что больше всего отличает платформу приложений Digital Ocean от Heroku. В Heroku «приложение» прикреплено к конкретному репо, и все «Dynos», работающие под ним, работают в одном и том же репо и запускаются из того же «базового изображения» или контейнера. При DOAP приложение может иметь несколько «компонентов», где каждый компонент имеет свой собственный репо. Контейнер также имеет один запустить командование

Это делает компонент, похожий на динамо в Героку. Например, как компонент, так и динамо являются «масштабируемым/оплачиваемым устройством». Здесь вы решаете, сколько оперативной памяти/процессора получает контейнер и сколько контейнеров вы хотите использовать такого типа.

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

Это открывает некоторые возможности в цифровом океане, которые будут гораздо сложнее воспроизвести в Heroku. Например, у вас может быть отдельное репо для вашего веб -процесса и ваш рабочий процесс; Они могли бы даже быть на разных языках! Но я не хочу иметь отдельный репо для моих фоновых процессов в качестве моих веб -сайтов. Моя бизнес -логика обычно охватывает эти две услуги, и наличие отдельных репо звучит как выгода. С префиксом маршрута, о котором мы упоминали ранее, вы также можете создать совершенно отдельное приложение администратора и установить его на /приложение . Это позволило бы вам разделить два приложения на уровне репо, но позволило бы их доступно с той же конечной точки. Если я хочу отдельное приложение «администратора» наше в противном случае, кажется, что почти предпочтительнее переместить его в отдельный домен, даже если это просто другой поддомен. Несмотря на то, что он открывает некоторые интересные двери, ни один из случаев, которые я проложил, не являются вещами, которые я ожидаю на самом деле использовать.

Компонент также является тем, где вы устанавливаете переменные среды, что означает, что для широко распространенных Env Vars вам необходимо предоставить их в каждом компоненте. В Heroku переменные среды настраиваются на уровне приложения и совместно используются по всему динасу. Настройка их на компонент означает, что у меня есть несколько мест для обновления переменных среды, которые применяются как к веб -процессам, так и к рабочим процессам. Обычно есть Env Vars, которые применяются только к одному процессу, но они редко конфликтуют и затрудняют конфигурацию по всей стране.

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

Опыт разработчика

Хероку, на мой взгляд, отличный пользовательский опыт. Частично это, вероятно, мое знакомство с продуктом, и, к счастью, цифровой океан достаточно близко, чтобы я никогда не чувствовал себя «потерянным» в продукте. Это было легко ориентироваться и использовать.

Тем не менее, большинство вещей в платформе приложений Digital Ocean казалось, что им не хватало полировки. Ничего не было явно неправильно, но это определенно похоже на новый продукт. Для одного примера я хотел повторно развернуть коммит, потому что первое развертывание не удалось. Не было места, чтобы выбрать конкретный коммит/филиал для развертывания на панели «развертывания». Есть большой Развернуть Кнопка вверх, но нажатие, которое начинает развертывание из вашего настроенного филиала и не дает вам вариантов. Это кажется, что это должно удовлетворить 90% случаев. Но если я уже хочу развернуть вручную, вместо того, чтобы использовать автоматические разверты, есть более высокая вероятность, что я сделать хочу отклониться от стандартного пути здесь.

Приставка

Консоль Вкладка в веб -интерфейсе — это то, что мне очень понравилось, что Героку не предлагает. Эта панель дает вам консоль доступ к любым вашим «компонентам». Это позволяет вам провести некоторую отладку или обслуживание данных в живых экземплярах. Это похоже на Хероку бежать ; Тем не менее, консоли не получают отдельный контейнер и вместо этого используют ваши существующие живые компоненты. У этого есть некоторые технические плюсы и минусы. Поскольку экземпляр консоли прикрепляется к существующему компоненту, нет ожидания консоли; Как есть с Хероку. С другой стороны, поскольку это повторно использует компоненты из вашего приложения, выполнение любой тяжелой обработки может повлиять на производительность вашего приложения.

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

Журналы

Опыт ведения журнала в цифровом интерфейсе Ocean Web, кажется, довольно наравне с тем, что вы получаете из коробки от Heroku. Вы можете жить, чтобы пройти процесс в веб -интерфейсе или через их соответствующие клис. Живой хвост имеет ограниченную историю и отсутствие поиска, но он хорошо работает для быстрого доступа.

Тем не менее, я никогда не полагаюсь на встроенный журнал Heroku для любого производственного варианта использования и почти всегда выбираю стороннюю службу журнала. В Heroku это обычно так же просто, как добавить дополнение. В DOAP, похоже, нет платформенного способа отправки журналов в другой источник. Заставляя вас настроить это на уровне приложения, если это важно для вас.

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

Buildpacks

Как я уже упоминал ранее, платформа Digital Ocean App использует те же самые платформу, что и Heroku для развертывания ваших приложений. Это означает, что большинство приложений, которые могут быть развернуты на Heroku, также должны быть развернуты в цифровом океане. Есть одно большое предостережение, хотя; Вы не можете выбрать, какой сборник (ы) использовать. Это означает, что вы должны полагаться на цифровой океан, чтобы выбрать правильные для вашего проекта. Это также дает вам немного меньше гибкости в том, как работает ваше приложение. Например, я недавно настроил наше приложение на работе, чтобы запустить, используя Джемаллок , a Malloc Альтернатива, которая часто имеет лучшую производительность для приложений Ruby. Мы сделали это через BuildPack Heroku-Buildpack-Jemalloc , что позволило нам переключиться на Jemalloc без каких -либо изменений приложения. Настройки для среды сборки, подобной этой, не кажутся возможными, учитывая текущие предложения платформы Digital Ocean App.

Миграции базы данных

Еще одна распространенная вещь, которую необходимо сделать многим веб -приложениям, — это запустить миграции базы данных по каждому развертыванию, добавление новых таблиц или столбцов, которые могут использоваться недавно развернутым кодом. В Heroku мы можем указать задачу после развертывания после развертывания, но Перед тем, как какие -либо новые контейнеры будут введены в эксплуатацию. В цифровом океане нет такой конфигурации, которую я смог найти. Вы можете указать команду сборки и команду запуска, что это все. Возможно, что команда запуска будет чем -то вроде Bundle Exec Rake DB: Migrate && Bundle Exec Rails Server . Но это вызвало бы миграцию в каждом контейнере вместо одного раз, прежде чем все контейнеры будут развернуты. Это не идеально и затрудняет создание надежной системы CI/CD в цифровом океане.

CI/CD

Упомянув, непрерывную интеграцию и доставку, я наткнулся на другую проблему с платформой Digital Ocean App, которая затрудняет рекомендацию. Digital Ocean предлагает вам настраивать непрерывную доставку при создании приложения. Тем не менее, это кажется неполным, так как, похоже, не интегрируется с какой -либо настройкой тестирования непрерывной интеграции. Под этим я имею в виду, когда я добавил тестовый набор в свой демонстрационный репо, коммиты, которые ударили Master, начнут развертываться непосредственно перед тем, как у них будет время тестировать. Для небольших проектов это может показаться лишь незначительным раздражением. Но это удаляет ключевую часть рисунка CI/CD, который, я думаю, заставит людей либо изобрести колесо, и выяснить свою собственную инфраструктуру автоматического развертывания или жить с потенциально отдавливым кодом из-за несчастного случая.

Ценообразование

Цены на платформу Digital Ocean App разделены на две половины, одну для «базового» и одну для «профессионала». Основная версия сэкономит вам несколько долларов в месяц на одном «компоненте», но не позволит вам масштабировать горизонтально, что означает, что у вас может быть только один экземпляр каждого компонента в основных планах.

Самый дешевый мыльный план подрывает Heroku Hobby Dyno, что здорово! Базовый компонент в 5 долларов в месяц имеет одинаковые 512 МБ ОЗУ, что и Heroku, и у них обоих есть общий отдельный процессор, но версия Heroku составляет 7 долларов. Ни один из них не может масштабироваться горизонтально.

За 10 долларов в месяц в DOAP Basic вы можете получить 1 ГБ оперативной памяти и один VCPU; 12 долларов за план PRO. 2 ГБ оперативной памяти составляет 20 и 25 долларов на базовые и профессиональные планы соответственно. Это все цены, которые просто недоступны на Heroku и с щедрым количеством оперативной памяти. Следующий шаг Хероку после того, как хобби-«стандартный 1-х динамо, который составляет 25 долларов в месяц и все же имеет только 512 МБ ОЗУ. На DOAP вы получаете 2 ГБ оперативной памяти за те же 25 долларов в месяц (20 долларов за базовый план без горизонтального масштабирования).

Лично меня привлекают к этой модели ценообразования. Большой прыжок между Heroku’s Hobby Dynos и их Dynos Standard-1x всегда отбрасывал меня. К счастью для моего кошелька, ни один из моих проектов не должен был закончить Hobby Dynos. Но в будущем я хотел бы иметь возможность обращаться к платформе Digital Ocean App для этих небольших личных проектов.

Большие цены на коробку становятся немного сложнее, чтобы сравнить на бумаге, в основном потому, что Heroku не публикует какую-либо процессовую статистику и вместо этого дает смутные описания «50x вычислений».

Но все еще выглядит так, как цифровой океан тоже дешевле. Цифровой океан не предлагает выделенные случаи на базовом плане. Таким образом, самая дешевая выделенная коробка на DOAP имеет 1 процессор и 4 ГБ оперативной памяти за 75 долларов в месяц на их профессиональной линии. Самый дешевый специальный экземпляр на Heroku-это Performance-M, который поставляется с 2,5 ГБ оперативной памяти и 12-кратной вычислительной работы, за 250 долларов в месяц. На DOAP больше всего на 50 долларов, вы можете получить их самый большой экземпляр, который имеет 4 процессора и 16 ГБ оперативной памяти. За 300 долларов это воровство по сравнению с 14 ГБ производительности Heroku, которая стоит 500 долларов. Я не запускал тесты, чтобы сравнить экземпляры, но вы определенно получаете больше оперативной памяти для своего доллара.

Одна вещь, на которую можно посмотреть на цифровом океане, это пределы пропускной способности. На их «базовом» уровне вы получаете 40 ГБ исходящих данных в месяц и 100 ГБ на уровне Pro Per App. Стоимость взимается в размере 0,10 долл. США/ГБ. Вы не платите за пропускную способность в Heroku, но есть ограничение данных на 2 ТБ. Для тяжелых приложений вниз по течению Data это может завоевать ценообразование весов в пользу Heroku.

Вывод

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

В целом, я думаю, что платформа DOAP довольно молода, и общий опыт разработчиков может быть улучшен. У меня есть некоторые вещи, которые я хотел бы видеть улучшенным, но не вытащил бы меня с платформы, такой как конфигурация переменной среды. Тем не менее, отсутствие способа легко обработки автоматических миграций рельсов плюс автоматические разверты, происходящие до того, как CI не решается использовать платформу Digital Ocean App в его нынешней форме. Это определенно вещи, которые можно улучшить, и я хотел бы снова проверить это.

Для личных и побочных проектов цены действительно привлекательны. Наличие чего -то дешевле, чем Хероку, с достойным клоном в функциональности, определенно стоит того. Специально для личных проектов, где ставки ниже, и я могу позволить себе «больше боли в работе по развертыванию», платформа приложений Digital Ocean в будущем может стать отличным выбором!

Что касается профессиональной стороны, я определенно не собираюсь защищать свой магазин в ближайшее время. Мы ценим опыт разработчика слишком высоко, чтобы рассмотреть возможность переключения на DOAP прямо сейчас. Например, я думаю, что отсутствие возможности отправлять журналы куда -то равномерно — это тяжелая продажа для производственных приложений. Я знаю, что с ним можно обработать на уровне применения, но это всего лишь еще один из хороших разработчиков, которые заставляют меня любить Хероку, несмотря на их стоимость.

Лично я буду ждать использования платформы приложений Digital Ocean. Я определенно хочу вернуться и попробовать это для личных проектов, как только у него будет немного времени, чтобы созревать! Цены очень конкурентоспособны, и я надеюсь, что они продолжат улучшать опыт разработчика и работать над превзойденной Heroku!

Фотография Ракель Мартинес на Неспособный

Оригинал: «https://dev.to/coreyja/digital-ocean-app-platform-vs-heroku-2mfh»