7

我使用節點應用程序純粹用於使用Redis PubSub的socket.io通道,目前我已將它分散到3臺機器上,並由其中一臺機器上的nginx負載平衡支持。Phoenix應用程序如何針對多臺機器量身定製渠道規模?使用HAProxy?如何將消息廣播到所有節點?

我想用Phoenix應用程序替換這個節點應用程序,而且我仍然是新來的erlang/Elixir世界,所以我仍然沒有想到單個Phoenix應用程序如何跨越多臺機器。谷歌搜索所有可能的縮放和負載平衡條款什麼都沒有產生。

1.0 release notes提到這對於渠道:

即使在計算機集羣,您的信息通過節點自動

1)廣播所以我基本上部署應用到N臺服務器,在其中的每一個啓動牛仔服務器,類似於我如何處理節點和他們我把他們綁定nginx/HAProxy

2)如果是這種情況,如發行說明中所述,通道消息如何在所有節點上廣播?

編輯3:以Theston答案,澄清,沒有這樣的東西作爲鳳凰的應用,而是,藥劑/二郎應用程序,我更新了我的搜索字詞,發現關於擴展和負載均衡一些有趣的結果。

編輯2:從Elixir's creator發現這一點:

藥劑提供了一種用於處理分組和全球進程的便利(共享節點之間),但仍然可以使用外部庫(如Consul或Zookeeper)進行服務發現,或者依賴HAProxy進行負載平衡基於HTTP的前端。

編輯:Connecting Elixir nodes on the same LAN是提到藥劑間通信的第一個,但它不涉及到鳳凰本身,而不是它如何與負載均衡相關,而且每鳳凰節點與另一通信清晰。

回答

3

鳳凰是不是應用程序,當你生成一個鳳凰項目創建與鳳凰僅僅是一個依賴(有效一堆東西,使構建應用程序更加容易的Web部件)的藥劑應用。

因此,您需要做的任何節點分發仍然可以在您的Elixir應用程序中發生。

您可以將Phoenix用於Web路由,然後將數據傳遞到底層的Elixir應用程序以處理跨節點的分發。

它值得讀取http://www.phoenixframework.org/v1.0.0/docs/channels(如果您還沒有),它解釋了Phoenix通道如何使用PubSub分發(可以配置爲使用不同的適配器)。

另外,您是否在運行mix phoenix.server時在部署服務器上啓動了牛仔?

如果是這樣,那麼我建議你看EXRM https://github.com/bitwalker/exrm

這將捆綁你的藥劑應用到一個自包含的文件(如果你喜歡用Capistrano的),你可以簡單地部署到生產服務器,然後你開始你的申請。

這也意味着您不需要在生產機器上安裝任何Erlang/Elixir依賴項。

總之,鳳凰不像Rails,鳳凰不是應用程序,不是棧。它只是一個依賴項,爲您的Elixir應用程序提供有用的功能。

+0

太棒了,我的想法是Phoenix = Rails。更新了我的搜索條件,甚至找到了關於這個主題的書http://www.erlang-in-anger.com/ –

+1

很高興我可以幫助:)還有另外兩個令人敬畏的書我推薦https://www.manning .com/books/elixir-in-action和https://pragprog.com/book/phoenix/programming-phoenix – TheStoneFox

0

除非我誤解了你的用例,否則你仍然可以使用你的節點版本的應用程序的確切縮放技術。只需將Phoenix應用程序部署到> 1臺計算機,並使用配置爲將請求轉發到其中一臺應用程序機器的Nginx負載平衡器。

內置的節點通信二郎等用於在超過一個Web應用程序以不同的方式擴展應用程序。例如,分佈式數據庫或隊列。

+0

在這種情況下,引用的「您的消息自動跨節點廣播」由內部pubsub完成? –

0

看看Phoenix.PubSub 這是Phoenix內部有通道通道位的地方。

目前有兩個適配器:

  • Phoenix.PubSub.PG2 - 採用分佈式藥劑,服務器之間的直接交流的通知。 (這要求您以elixir/erlang分佈式集羣方式部署應用程序。)
  • Phoenix.PubSub.Redis - 使用Redis在服務器之間交換數據。 (這應該類似於在socket.io和其他文件中找到的解決方案)
相關問題