2016-03-31 152 views
6

我沒有一個與heroku的經驗噸,甚至更少與鳳凰,所以這可能是一個愚蠢的問題......但要確保我是一個很好的選擇託管:)在heroku上縮放鳳凰

根據我的理解,您對phoenix進行縮放的方式是添加另一個服務器,啓動另一個節點並將它們連接起來,然後讓BEAM/OTP發揮其魔力來處理工作負載平衡。在heroku上,dynos不能通過本地網絡實實在在地交談,根據我的理解,這是BEAM需要集羣的東西。因此,添加dynos將導致更「傳統」的縮放模型,其中您有一個外部負載平衡器來平衡未連接節點之間的連接,並且db是共享狀態。

這裏我的問題是這會產生多大的影響?當你達到嚴重的負載/規模水平,還是意味着在基礎設施上花費更多的資金,那麼這是否僅僅是一個問題呢?

回答

7

你會得到支持集羣主機上的最佳性能,但鳳凰有一個PubSub的適配器系統正是爲了部署像Heroku的: https://github.com/phoenixframework/phoenix_pubsub

一號線配置變化和mix.exs的DEP進入和你」我們將通過我們的Redis適配器在heroku上創建多節點通道。

+0

- 在Phoenix 1.2中,默認情況下有一個PG2適配器設置爲PubSub;任何使用Redis超過Heroku當前默認值的理由?謝謝! – Svilen

2

這是非常開放的問題,所以我相信我的答案不會全面。

在你的情況下,最重要的問題是:我會鳳凰使用頻道嗎?

如果您使用普通的舊HTTP,它可能大部分是無狀態的。有很多方法可以模擬有狀態的連接,如在Cookie中存儲會話。在一天結束時,後端服務器是否互相連接並不重要,因爲每個服務器都在進行獨立計算。您的負載均衡器可以隨機選擇任何服務器,並始​​終工作。 http的這個很酷的功能使這個協議能夠很好地擴展。在這種情況下你肯定可以使用Heroku,並且它會很好用。

如果您使用Phoenix頻道,事情會變得複雜。您仍然希望能夠連接到任何服務器,但您可能實時將消息發送給其他用戶,並且可以將其連接到其他服務器。 Phoenix通過使用BEAM進行集羣解決了這個問題,這對Heroku來說很難。甚至不可能。

總結:這不是小規模/大規模的問題。這是一個功能問題。縮放頻道將需要羣集,縮放普通的舊HTTP不會。

+0

這是不是一個實例化每個測功機鳳凰應用程序(這是什麼發生的bassicaly)的大成本?即使只是一個普通的舊HTTP? –

+0

這不是一個很大的成本。如果您比較類似的Phoenix和Rails應用程序,Phoenix應該具有更低的內存和CPU佔用空間。因此,如果您在一臺測功機上耗盡資源,只需旋轉另一臺。 – tkowal

+0

我認爲這也是一件可以避免的事情,用https://github.com/phoenixframework/phoenix_pubsub_redis感謝一個不是很好的問題:) –