2015-02-23 18 views
5

E 'possibile, e se sì, come? Mi piacerebbe essere in grado di raggiungerlo dalla mia infrastruttura Heroku esistente.Come eseguire InfluxDB su Heroku?

Avrò bisogno di un Procfile? Da quello che ho capito è solo un binario autonomo scritto in Go! quindi non dovrebbe essere così difficile da implementare, sono solo curioso di come distribuirlo perché non penso di capire i dettagli della distribuzione di Heroku.

risposta

1

mi piace pensare che tutto è possibile su un nodo Heroku quando si utilizza un personalizzato buildpack, ma ci sono alcune considerazioni quando ospitano con Heroku:

  • ops, per esempio backup, monitoraggio (ci si comporta l'installazione di servizi aggiuntivi, l'apertura di porte aggiuntive, ecc - Heroku potrebbe ottenere nel modo qui)
  • prestazioni, considerando dyno size
  • e se avete bisogno di un banco prova più grande, il costo diventa un problema. Avrai più soldi per la tua fortuna quando andrai sulla rotta IaaS.
  • altre "caratteristiche" di un banco di prova, ad es. disco effimero

mi raccomando hosted InfluxDB o spinning il proprio su un VPS, ognuno dei quali si può puntare le applicazioni basate su Heroku esistenti. Aiuterà quindi a ottenere tali istanze il più vicino possibile (cioè la stessa regione, o co-localizzata se possibile), presumendo la necessità di una bassa latenza tra DB e stack di app.

+0

Sì, ma con molte domande, che cosa succederà alle prestazioni? Niente di buono, immagino, a meno che il VPS non si trovi nello stesso cluster di heroku aka su Amazon. Ho sbagliato? –

+0

Alcuni test sarebbero sufficienti. Per esempio. in che modo un droplet Digital Ocean nella stessa regione viene confrontato con un'istanza Amazon in una regione diversa. A parte questo, [dyno size] (https://devcenter.heroku.com/articles/dyno-size) potrebbe essere una considerazione, ad es. Quanta RAM pensi che sarebbe necessario per la tua istanza InfluxDB? Se la risposta è più di quanto pensiate, vorrei andare con un'istanza Amazon (nella stessa regione delle istanze di Heroku) solo per i risparmi. Aggiornerò la risposta per riflettere queste considerazioni aggiuntive. – opyate

4

Heroku Dynos dovrebbe non essere utilizzato per distribuire un'applicazione di database come InfluxDB.

I dynos sono server effimeri. I dati non persistono tra il riavvio del dyno e non possono essere condivisi con altri dynos. In pratica, qualsiasi applicazione di database distribuita su un banco prova è sostanzialmente inutile. Questo è il motivo per cui i database su Heroku (ad esempio Postgres) sono tutti componenti aggiuntivi. InfluxDB dovrebbe essere impostato su una piattaforma diversa (come AWS EC2 o VPS) poiché un componente aggiuntivo Heroku non è disponibile.


Detto, è possibile distribuire InfluxDB ad un banco Heroku.

Per iniziare, è importante capire il concetto di "lumaca". Le lumache sono contenitori (simili a immagini Docker) che contengono tutto il necessario per eseguire un programma sull'infrastruttura di Heroku. Per distribuire InfluxDB, una lumaca InfluxDB deve essere creato * Ci sono due modi per creare una lumaca per le librerie Go:..

  1. Creare una lumaca direttamente da un Go eseguibile come descritto here **
  2. costruire il slug dalla fonte usando il pacchetto build Heroku Go (spiegato sotto).

per costruire il proiettile dalla fonte utilizzando un buildpack, primo clone repo InfluxDB Github. Quindi aggiungi un Procfile alla radice del repository, che indica a Heroku il comando da eseguire all'avvio del banco prova.

echo 'web: ./influxd' > Procfile 

Il pacchetto di sviluppo Go richiede che tutte le dipendenze siano incluse nella directory. Utilizzare lo strumento di dipendenza Godep per distribuire tutte le dipendenze nella directory.

go get github.com/tools/godep 
godep save 

Successivamente, confermare le modifiche apportate in precedenza al repository git.

git add -A . 
git commit -m dependencies 

Infine, creare una nuova app e dirgli di compilare con il pacchetto 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 mostrerà una pagina di errore. Viene visualizzato un errore perché il tipo di processo "Web" di Heroku richiede che un'app ascolti le richieste in arrivo sulla porta descritta dalla variabile di ambiente $PORT, altrimenti ucciderà il banco prova. L'API e il pannello di amministrazione di InfluxDB funzionano sulle porte 8086 e 8083, rispettivamente.

Sfortunatamente, InfluxDB non consente di impostare tali porte da variabili di ambiente, solo tramite il file di configurazione (/etc/config.toml). Un piccolo script bash eseguito prima dell'inizio di InfluxDB potrebbe impostare la porta corretta nel file di configurazione prima che InfluxDB si avvii.

Un altro problema, Heroku espone solo una porta per dyno in modo che l'API e il pannello di amministrazione non possano essere esposti a Internet allo stesso tempo. Un proxy inverso intelligente potrebbe ovviare a tale problema utilizzando Heroku X-Forwarded-Port request header.

In conclusione, non utilizzare i dynasty di Heroku per eseguire InfluxDB.


* Questo significa che i benefici di un eseguibile standalone Go sono persi durante la distribuzione di Heroku, dal momento che deve essere ricompilato per lo stack di Heroku.

** La creazione di una lumaca direttamente dall'eseguibile InfluxDB non funziona perché non esiste un modo integrato per ascoltare la porta corretta fornita da Heroku nella variabile di ambiente $PORT.