Dynos są serwerami efemerycznymi. Dane nie zachowują się między ponownymi uruchomieniami dynamu i nie można ich udostępniać innym dynamom. Praktycznie rzecz biorąc, każda aplikacja bazodanowa zainstalowana na dyno jest w zasadzie bezużyteczna. Dlatego właśnie bazy danych na Heroku (np. Postgres) są dodatkami. InfluxDB powinien być ustawiony na innej platformie (np. AWS EC2 lub VPS), ponieważ dodatek Heroku nie jest dostępny.
Aby rozpocząć, ważne jest, aby zrozumieć pojęcie "ślimaka". Slugs to kontenery (podobne do obrazów Docker), które zawierają wszystko, co potrzebne do uruchomienia programu na infrastrukturze Heroku. Aby wdrożyć InfluxDB An ślimak InfluxDB musi zostać utworzony * Istnieją dwa sposoby tworzenia ślimak dla bibliotek Go:..
- Utwórz ślimak bezpośrednio z idź wykonywalnego jak opisano here **
- Zbuduj ślimak ze źródła przy użyciu buildu Heroku Go (wyjaśniono poniżej).
Aby zbudować ślimak ze źródła przy użyciu buildpack najpierw sklonować repo InfluxDB Github. Następnie dodaj plik Procfile w katalogu głównym repo, który mówi Heroku polecenie, aby uruchomić po uruchomieniu dyno.
echo 'web: ./influxd' > Procfile
Kompilacja Go wymaga, aby wszystkie zależności były zawarte w katalogu. Użyj narzędzia zależności godep, aby sprzedać wszystkie zależności do katalogu.
go get github.com/tools/godep
godep save
Następnie zatwierdz zmiany wprowadzone do repozytorium git.
git add -A .
git commit -m dependencies
Na koniec utwórz nową aplikację i powiedz jej, aby skompilowała się z build build Go.
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 pokaże stronę błędu. Pojawi się błąd, ponieważ typ procesowy "web" Heroka wymaga, aby aplikacja nasłuchiwała przychodzących żądań na porcie opisanym przez zmienną środowiskową $PORT
, w przeciwnym razie zabije dyno. Interfejs API InfluxDB i panel administratora działają odpowiednio na portach 8086
i 8083
.
Niestety, InfluxDB nie pozwala na ustawienie tych portów ze zmiennych środowiskowych, tylko poprzez plik konfiguracyjny (/etc/config.toml
). Mały skrypt bash wykonany przed uruchomieniem InfluxDB może ustawić poprawny port w pliku konfiguracyjnym przed uruchomieniem InfluxDB.
Kolejny problem, Heroku ujawnia tylko jeden port na dyno, więc interfejs API i panel administracyjny nie mogą być narażone na działanie Internetu w tym samym czasie. Inteligentne odwrotne proxy może obejść ten problem, używając Heroku's X-Forwarded-Port
request header.
Podsumowując, nie używaj Dynoku Heroku do uruchamiania gry InfluxDB.
* Oznacza to, że korzyści z samodzielnego pliku wykonywalnego Go są tracone podczas wdrażania do Heroku, ponieważ musi być ponownie skompilowana na stosie Heroku użytkownika.
** Tworzenie ślimaka bezpośrednio z pliku wykonywalnego InfluxDB nie działa, ponieważ nie ma wbudowanego sposobu na odsłuchanie odpowiedniego portu podanego przez Heroku w zmiennej środowiskowej $PORT
.
Tak, ale z dużą ilością zapytań, co się stanie z wydajnością? Nic dobrego, jak sądzę, chyba że VPS jest w tym samym gronie, co heroku na Amazon. Czy się mylę? –
Wystarczyłoby trochę testów. Na przykład. w jaki sposób kropelka Cyfrowego Oceanu w tym samym regionie porównuje się do instancji Amazon w innym regionie. Poza tym rozważa się [rozmiar dyna] (https://devcenter.heroku.com/articles/dyno-size), np. ile pamięci RAM jest potrzebne do wykonania instancji klasy InfluxDB? Jeśli odpowiedź jest bardziej niż myślisz, chciałbym pójść z instancją Amazon (w tym samym regionie, co Twoje instancje Heroku) wyłącznie w celu obniżenia kosztów. Zaktualizuję odpowiedź, aby odzwierciedlić te dodatkowe uwagi. – opyate