2016-03-31 5 views
6

私はherokuとの経験のトンを持っていない、そしてさらにフェニックスと少ないので、これは愚かな質問かもしれません...しかし、私はホスティングの良い選択をしていることを確認したい:)herokuのスケーリングフェニックス

私が理解しているように、フェニックスをスケールする方法は、別のサーバーを追加し、別のノードを起動して接続し、BEAM/OTPに作業負荷分散を処理する魔法を働かせます。 herokuでは、dynosはローカルネットワーク上で実際には話すことができません。ローカルネットワークでは、BEAMがクラスタリングするために必要なものです。したがって、dynosを追加すると、接続されていないノード間の接続を分散する外部ロードバランサがあり、dbは共有状態になり、より伝統的なスケーリングモデルになります。

私の質問は、これがどれくらいの影響を及ぼすかです。重大なレベルの負荷/規模に当たっているときだけの問題か、それともインフラストラクチャにもっと多くのお金を費やすことが必要なのかということはもっと重要なことですか?

答えて

7

あなたはクラスタリングをサポートしていますが、フェニックスは正確にHerokuのような展開のためのPubSubのアダプターシステムを持っているホスト上で最高のパフォーマンスを得られます: https://github.com/phoenixframework/phoenix_pubsub

ワンラインの設定の変更とmix.exs depsのエントリとあなた」私たちのRedisアダプターを介してheroku上にマルチノードチャネルがあります。

+0

- PubSubのデフォルトで設定されているPG2アダプタがあります。 Herokuの現在のデフォルトよりもRedisを使用する理由は何ですか?ありがとう! – Svilen

2

これは非常に未解決の質問ですので、私の答えは包括的ではないと確信しています。

最も重要な質問は次のとおりです。私はフェニックスチャンネルを使用しますか?

プレーンな古いHTTPを使用すると、ほとんどステートレスになる可能性があります。セッションをクッキーに保存するなど、ステートフルな接続をシミュレートする方法はたくさんあります。バックエンドサーバーが互いに接続されているかどうかは、1日の終わりには関係ありません。なぜなら、それぞれが独立した計算を行っているからです。ロードバランサは任意のサーバーをランダムに選択でき、常に動作します。 httpのこのクールな機能により、このプロトコルは拡張性に優れています。あなたは間違いなくそのシナリオでHerokuを使用することができ、それは素晴らしい動作します。

フェニックスチャンネルを使用すると状況が複雑になります。いずれのサーバーにも接続できるようにしたいが、おそらく他のユーザーにリアルタイムでメッセージを送信し、他のサーバーに接続することができます。 PhoenixはBEAMを使ってクラスタリングすることでこの問題を解決します。これはHerokuでは難しいでしょう。それとも不可能です。

合計:小規模/大規模の問題ではありません。それは機能の問題です。チャネルを拡大縮小するとクラスタリングが必要になりますが、古いHTTPは縮小されません。

+0

各dynoのフェニックスアプリケーションをインスタンス化するのは大きなコストではありません(これは基本的なことです)。ちょっと普通のHTTPの場合でも? –

+0

それは大きなコストではありません。同様のPhoenixとRailsのアプリケーションを比較すると、PhoenixのメモリとCPUの占有面積は小さくなります。したがって、1つのdynoでリソースが不足している場合は、別のdynoをスピンさせてください。 – tkowal

+0

私はそれもmitigatibleものだと思う、https://github.com/phoenixframework/phoenix_pubsub_redisありがとうございます素晴らしい答えではありません:) –