Ответ 1
При развертывании приложения Heroku вы создаете образ виртуальной машины, называемый slug
, используя один или несколько buildpacks
. Когда экземпляр виртуальной машины запускается из этого slug
, он называется dyno
.
Каждый dyno
запускает один процесс внутри вашей виртуальной машины приложения. Heroku официально не описывает, как инициализируются динамики, но анекдотический анализ показывает, что многие диноды запускаются на одном экземпляре Amazon XL
EC2, обмениваются диском, процессором и памятью на всех динамиках. При совместном использовании ресурсов определенно "шумные соседи", но прямые данные или статистика не предоставляются. Я могу поделиться своим историческим опытом, что это действительно происходит.
Каждый dyno изолирован в хостинговой машине EC2, но разделяет основные ресурсы. Это похоже на то, как docker
и другие контейнеры приложений работают.
Динамики регистрируются в сетке маршрутизации Heroku, интеллектуальном балансировщике нагрузки, который отображает входящий веб-трафик на приложение dyno. Каждый dyno имеет порт TCP, который зарегистрирован в сетке маршрутизации.
Heroku - это сервис более высокого уровня на Amazon EC2. Они внедряют развертывание, обеспечение, мониторинг, доступность и автоматическое масштабирование с премиальными затратами на исходный хост EC2. Вы можете запускать свои собственные экземпляры EC2, но вам нужно реализовать эти службы самостоятельно.
Отказ от ответственности: Я не являюсь сотрудником Heroku и не имею специальных знаний об Heroku, кроме как как пользователь большого приложения с высоким трафиком Rails.
ОБНОВЛЕНИЕ: Сегодня утром Heroku запустил PX
размерные динамики, которые размещены на специальном экземпляре EC2 c1.xlarge
, который решает все проблемы шумных соседей и конкуренции ресурсов, о которых я говорил выше, По цене. Подробности здесь: https://blog.heroku.com/archives/2014/2/3/heroku-xl