2015-02-23 16 views
5

Czy to możliwe, a jeśli tak, to w jaki sposób? Chciałbym móc dotrzeć do niego z mojej istniejącej infrastruktury Heroku.Jak uruchomić InfluxDB na Heroku?

Czy będę potrzebować Procfile? Z tego co rozumiem, to po prostu samodzielny plik binarny napisany w Go! więc nie powinno być tak trudno go wdrożyć, jestem po prostu ciekawy jak go wdrożyć, ponieważ nie wydaje mi się, że rozumiem tajniki wdrażania Heroku.

Odpowiedz

1

Lubię myśleć, że wszystko jest możliwe na węźle Heroku przy użyciu niestandardowego buildpack, ale istnieją pewne względy, gdy hosting z Heroku:

  • ops, na przykład backup, monitoring (to wiązać instalowania dodatkowych usług, otwierając dodatkowe porty, itp - Heroku może uzyskać w drodze tutaj)
  • wydajności, zważywszy dyno size
  • a jeśli potrzebujesz większej hamowni, koszt staje się problemem. Dostaniesz więcej za swoje pieniądze, gdy przejdziesz na trasę IaaS.
  • inne "cechy" dyno, np. efemeryczność dysku:

Gorąco polecam hosted InfluxDB lub samemu zamienić na VPS, z którego można wskazać istniejące aplikacje oparte na Heroku. Pomoże to w uzyskaniu tych instancji jak najbliżej siebie (to jest tego samego regionu lub, jeśli to możliwe, współlokacji), zakładając potrzebę niskiego opóźnienia między DB a stosem aplikacji.

+0

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ę? –

+0

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

4

Heroku Dynos powinien być nie używany do wdrażania aplikacji bazodanowych takich jak InfluxDB.

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.


Powiedział, że to jest możliwewdrożyć InfluxDB na hamowni Heroku.

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:..

  1. Utwórz ślimak bezpośrednio z idź wykonywalnego jak opisano here **
  2. 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.