2013-02-18 13 views
8

Sto cercando di utilizzare Heroku per un'applicazione PHP che utilizza Redis. Ho visto i vari addon per i redis. Con Redis To Go, ad esempio, puoi utilizzare una variabile d'ambiente $ _ENV ['REDISTOGO_URL'] nel tuo codice PHP, come l'URL del Redis Server.I redis su Heroku sono possibili senza un addon?

La maggior parte di questi add-on ha i propri schemi di prezzo che vorrei evitare. Sono un po 'confuso su come funziona heroku. C'è un modo per installare Redis sui miei Dynos senza gli addon?

Come per esempio, avere un banco di lavoro che funge da server e un altro che funge da client? Se possibile, come andrei su:

  1. Installare ed eseguire il server redis su un Dyno? È lo stesso di che si installa su qualsiasi altra casella unix? Posso solo ssh ad installarlo e installare quello che voglio?

  2. Un Dyno si collega a un altro con un IP/porta via TCP? I dynos worker hanno i propri indirizzi IP di riferimento o URLS nominati che posso usare? Posso ottenerli in modo dinamico da PHP in qualche modo?

il codice PHP per un cliente Redis presuppone c'è un host e la porta che è possibile connettersi a, ma non hanno idea che cosa sarebbe?

$redis = new Predis\Client(array(
     "scheme" => "tcp", 
     "host" => $host, //how do i get the host/port of a dyno? 
     "port" => $port)); 

risposta

10

Redis in esecuzione su un banco prova è un interessante idea. Probabilmente avrai bisogno di creare un redis buildpack in modo che i tuoi dinos possano scaricare ed eseguire redis. Come "redis has no dependencies other than a working GCC compiler and libc" questo dovrebbe essere tecnicamente possibile.

Tuttavia, qui ci sono alcuni problemi che si possono incontrare:

  1. Heroku dynos non hanno un indirizzo IP statico

    "dynos don’t have static IP addresses .. you can never access a dyno directly by IP"

    Anche se si imposta ed eseguire Redis su un banco di prova Non sono a conoscenza di un modo per individuare l'istanza Dyno e inviarla richieste redis. Ciò significa che probabilmente il tuo server Redis dovrà essere eseguito sullo stesso banco di prova del tuo server web/applicazione principale.

    Questo significa che se si tenta di ridimensionare l'app creando più dynos Web, verranno create anche altre istanze di redis locali. I dati non saranno condivisi tra loro. Questo non mi sembra un design particolarmente scalabile, ma se la tua app è abbastanza piccola da richiedere solo un dyno web, potrebbe funzionare.

  2. Heroku dynos hanno un filesystem effimera

    "no files that are written are visible to processes in any other dyno and any files written will be discarded the moment the dyno is stopped or restarted"

    Per impostazione predefinita Redis scrive il suo file di RDB e di registro AOF su disco. Avrai bisogno di eseguire regolarmente il backup da qualche parte in modo da poter recuperare e ripristinare dopo il riavvio del tuo banco. Vedi lo documentation on Redis persistence.

  3. Heroku dynos sono riavviati spesso

    "Dynos are cycled at least once per day, or whenever the dyno manifold detects a fault in the underlying hardware"

    Avrai bisogno di essere in grado di avviare il server Redis ogni avvio del Dyno e ripristinare i dati.

  4. Heroku dynos hanno 512 MB di RAM

    "Each dyno is allocated 512MB of memory to operate within"

    Se il server Redis è in esecuzione sullo stesso banco prova come server web, sottrarre la RAM necessaria per la vostra applicazione principale. Di quanta memoria Redis hai bisogno?

    Ecco alcune domande di tentare di stimare e monitorare l'utilizzo della memoria Redis:

-

complesso: vi suggerisco di leggere su su 12 Factor Apps per capire un po 'di più sul modello di applicazione previsto di heroku.

La versione breve è che i dynos sono destinati a essere lavoratori indipendenti che possono essere facilmente creati e scartati per soddisfare la domanda e che i dynos accedono a varie risorse per leggere o scrivere dati e servire l'app. Un'istanza redis è un esempio di una risorsa. Come puoi vedere dagli articoli di cui sopra, utilizzando un componente aggiuntivo Redis otterrai qualcosa che è statico, stabile e accessibile.

materiale di lettura:

  1. http://www.12factor.net/ - specificamente Processes e Services
  2. The Heroku Process Model
  3. Heroku Blog - The Process Model
+0

Grazie per tutti i link, questo è estremamente utile – user1385729

+0

@ user1385729 Felice che aiuti! :) Sentiti libero di fare altre domande. – culix

+0

@ user1385729 Grazie per avermelo chiesto - mi ha fatto pensare a come usare heroku in molti modi diversi – culix

-1

Redis ha un'architettura client-server è possibile installarlo su una macchina (nel tuo caso banco) e accedervi da qualsiasi client.

per ulteriori informazioni sulle biblioteche è possibile fare riferimento this link o si può passare attraverso questo Redis documentaion, che è un semplice caso di studio di attuare una Twitter clone utilizzando Redis database di annunci e PHP

+0

Grazie, la questione è più su come impostare il client/server su Heroku. La parte di Redis credo di aver capito. – user1385729

+0

la porta predefinita per redis è 6379 che puoi trovare nel file redis.conf e l'host ip è l'ip del tuo server (Dyno nel tuo caso) i.e ip del server su cui esegui il binario "redis-server". –

Problemi correlati