2016-03-31 30 views
6

Non ho una tonnellata di esperienza con heroku, e ancor meno con phoenix, quindi questa potrebbe essere una domanda stupida ... ma voglio essere certo di fare una buona scelta per l'hosting :)Scaling phoenix su heroku

Da quello che ho capito, il modo in cui scala phoenix è aggiungere un altro server, lanciare un altro nodo e collegarli, quindi lasciare che BEAM/OTP funzioni magicamente per gestire il bilanciamento del carico di lavoro. Su heroku, i dynos non possono davvero parlare insieme su una rete locale, che da quello che capisco è qualcosa che BEAM richiede per raggruppare. Quindi l'aggiunta di dynos si tradurrà in un modello di ridimensionamento più "tradizionale", in cui si dispone di un bilanciamento del carico esterno che bilancia le connessioni tra nodi non connessi, con il db che è stato condiviso.

La mia domanda qui è quanto sarà grande questo impatto? È più solo un problema quando si colpisce un livello serio di carico/scala, o significa che spendere molto più denaro in infrastrutture è necessario?

risposta

7

Potrai ottenere le migliori prestazioni su un host che supporta il clustering, ma Phoenix ha esattamente un sistema adattatore PubSub per le implementazioni come Heroku: il cambiamento di configurazione https://github.com/phoenixframework/phoenix_pubsub

una riga e mix.exs dipendenze di entrata e si' Avremo canali multinode su heroku tramite il nostro adattatore Redis.

+0

- In Phoenix 1.2 c'è un adattatore PG2 impostato di default per PubSub; qualche motivo per usare Redis sul default corrente su Heroku? Grazie! – Svilen

2

Questa è una domanda molto aperta, quindi sono sicuro che la mia risposta non sarà completa.

Nella vostra situazione la domanda più importante è: I Phoenix utilizzerà i canali?

Se si utilizza semplicemente HTTP vecchio, può essere in gran parte senza stato. Esistono molti metodi per simulare una connessione stateful come l'archiviazione delle sessioni nei cookie. Alla fine della giornata, non importa se i tuoi server di back-end sono connessi tra loro, perché ognuno di loro sta facendo calcoli indipendenti. Il tuo bilanciamento del carico può selezionare casualmente qualsiasi server e funzionerà sempre. Questa interessante funzione di http consente a questo protocollo di scalare così bene. Puoi sicuramente usare Heroku in quello scenario e funzionerà alla grande.

Se si utilizzano i canali Phoenix, le cose si complicano. Devi comunque essere in grado di collegarti a uno qualsiasi dei server, ma probabilmente invierai messaggi ad altri utenti in tempo reale e potranno essere collegati ad altri server. Phoenix risolve questo problema per te raggruppando usando BEAM e questo sarà difficile per Heroku. O addirittura impossibile.

Per riassumere: non è una questione di piccola scala/grande scala. È una questione di caratteristiche. Scalare i canali richiederà il clustering, scalando semplicemente il vecchio HTTP non lo farà.

+0

Non è un grande costo creare un'istanza di Phoenix per ogni banco (che è bassicaly cosa succede)? Anche per un semplice vecchio HTTP? –

+0

Non è un grosso costo. Se si confrontano applicazioni Phoenix e Rails simili, Phoenix dovrebbe avere una memoria e un ingombro della CPU inferiori. Quindi, se stai esaurendo le risorse su un banco prova, ne fai un altro. – tkowal

+0

penso che sia anche una cosa mitigabile, con https://github.com/phoenixframework/phoenix_pubsub_redis grazie per l'ottima risposta a una domanda non molto bella :) –