LoginSignup
10
8

More than 5 years have passed since last update.

PhoenixでRedisを使わないPubSubでスケール その2

Posted at

その1

前回に続き、今回はPhoenixアプリを使ってPG2でのPubSubを試します。

アプリを用意

自分で用意するのも面倒なので、公式のexampleを使います。

git clone https://github.com/chrismccord/phoenix_chat_example
cd phoenix_chat_example
mix deps.get
npm install

今回は、vagrant上で実行しているので、check_originの設定をfalseにします。

config/config.ex
config :chat, Chat.Endpoint,
  url: [host: "localhost"],
  root: Path.expand("..", __DIR__),
  secret_key_base: "/RjKJmMO6raXPRTq63qTqid1x6lVKTOP+FTxZHfX6Ogd+1xYmH6eZZFhBu1CIwtg",
  debug_errors: false,
  pubsub: [name: Chat.PubSub,
           adapter: Phoenix.PubSub.PG2],
  check_origin: false # ここを追加

phoenixを起動します。

mix phoenix.server

Hello_Phoenix_.png

起動するとこんな感じでチャットが出来るようになっています。

PubSubを試す

別ターミナルでアプリをコピーしてポート違いでPhoenixを起動します。

vagrant-ubuntu-precise-32% mix phoenix.server
[info] Running Chat.Endpoint with Cowboy using http on port 4000

vagrant-ubuntu-precise-32% mix phoenix.server
[info] Running Chat.Endpoint with Cowboy using http on port 4001

この状態では、ただ2つのアプリを立ち上げただけなのでチャットの状態は共有されていません。

その1と同様にsys.configを設定します。
その状態で以下をそれぞれ実行

iex --name foo@127.0.0.1 --erl "-config sys.config" -S mix phoenix.server
iex --name bar@127.0.0.1 --erl "-config sys.config" -S mix phoenix.server

ちょっとわかりにくいですが・・・、
port違いのアプリケーションで a のメッセージが共有されています。

Hello_Phoenix_.png

Hello_Phoenix_.png

これで、PG2でPubSubが出来ました。

PG2でPubSubってどうなの?

web server1台で200万コネクションまでいけてるっぽいです。
更にスケールも、今回試したようにserverを増やせばPG2の性能的にある程度まではスケールするでしょう。

PG2の性能ですが、以下で調べている方がいました。
分散Erlang周りの性能測定メモ

Nodeが増えるごとに性能に劣化が見られるので、
許容できるレベルの劣化を超えるようであれば別にPubSubを用意したほうがいいでしょう。
RedisのPubSubがどのくらいスケールするのか正直わかっていませんが、
Redisをスケールさせるのはかなり難しいので、別の方法を考えたほうがいいと思ってます。

以上です。

PG2のPubSubの仕組み解説をその3でやるかもしれません。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8