Heroku Dynos должен не использовать для развертывания приложения базы данных, такого как InfluxDB.
Dynos - это эфемерные серверы. Данные не сохраняются между перезапусками dyno и не могут использоваться совместно с другими динамиками. Практически говоря, любое приложение базы данных, развернутое на dyno, практически бесполезно. Вот почему базы данных на Heroku (например, Postgres) - это все дополнения. InfluxDB должен быть настроен на другой платформе (например, AWS EC2 или VPS), поскольку дополнение Heroku недоступно.
Тем не менее, это можно развернуть InfluxDB на дино Heroku.
Для начала важно понять концепцию «слизняков». Слизы представляют собой контейнеры (похожие на изображения Docker), в которых хранятся все необходимое для запуска программы в инфраструктуре Heroku. Для развертывания InfluxDB, пробковый InfluxDB должны быть созданы * Есть два способа создания слизняка для библиотек Go:..
- Создать слизняк непосредственно из Go исполняемого, как описан here **
- Строить пул из источника, используя сборку Heroku Go (объяснено ниже).
Чтобы построить пулю из источника с помощью buildpack, сначала клонировать InfluxDB Github репо. Затем добавьте файл Procfile в корень репо, который сообщает команде Heroku, что она запускается при запуске dyno.
echo 'web: ./influxd' > Procfile
Коммутатор Go требует, чтобы все зависимости были включены в каталог. Используйте инструмент зависимостей godep для экспорта всех зависимостей в каталог.
go get github.com/tools/godep
godep save
Далее, сделайте изменения, сделанные выше, на git repo.
git add -A .
git commit -m dependencies
Наконец, создайте новое приложение и скажите ему скомпилировать с помощью Go buildpack.
heroku create -b https://github.com/kr/heroku-buildpack-go.git
git push heroku master
heroku open // Open the newly created InfluxDB instance in the browser.
Heroku покажет страницу ошибки. Ошибка будет отображаться, потому что тип процесса «Интернет» Heroku требует приложения для прослушивания входящих запросов на порте, описываемых переменной окружения $PORT
, иначе он убьет dyno. API и панель управления InfluxDB работают на портах 8086
и 8083
, соответственно.
К сожалению, InfluxDB не позволяет устанавливать эти порты из переменных среды, только через конфигурационный файл (/etc/config.toml
). Небольшой скрипт bash, выполненный до запуска InfluxDB, может установить правильный порт в файле конфигурации до запуска InfluxDB.
Другая проблема: Heroku предоставляет только один порт на каждый динамометр, поэтому API и панель администратора не могут быть одновременно открыты в Интернете. Умный обратный прокси мог бы обойти эту проблему, используя Heroku's X-Forwarded-Port
request header.
Нижняя линия, не используйте динамики Heroku для запуска InfluxDB.
* Это означает, что преимущества автономного Go исполняемому теряется при развертывании Heroku, так как он должен быть повторен для стека Heroku в.
** Создание пули непосредственно из исполняемого файла InfluxDB не работает, потому что нет встроенного способа прослушивания правого порта, данного Heroku в переменной окружения $PORT
.
Да, но с большим количеством запросов, что произойдет с производительностью? Я думаю, ничего хорошего, если только VPS не окажется в том же кластере, что и героика, ака на Амазонке. Я ошибаюсь? –
Некоторые испытания были бы достаточными. Например. как капелька Digital Ocean в том же регионе сравнивается с экземпляром Amazon в другом регионе. Кроме того, [dyno size] (https://devcenter.heroku.com/articles/dyno-size) может быть рассмотрен, например. сколько RAM вы считаете нужным для своего экземпляра InfluxDB? Если ответ больше, чем вы думаете, я бы пошел с экземпляром Amazon (в том же регионе, что и ваши экземпляры Heroku) исключительно для экономии средств. Я обновлю ответ, чтобы отразить эти дополнительные соображения. – opyate