我們前一段時間遇到了這一點,我花了相當多的時間在這給我很大的挫折。我會盡力堅持突出點。乍一看,有幾款Heroku自動縮放解決方案看起來不錯。
已經給出heroku-autoscaler的例子實際上是用於自動縮放dynos,並且幾乎是唯一一個宣稱要做到這一點的解決方案(而且它肯定做得不好)。大多數人只會爲你自稱爲自動縮放工作人員。所以,我們先關注一下。您要爲工作人員看的自動壓縮機取決於您實際使用的背景工人的內容,例如delayed_job,resque。這些是人們使用的最常見的後臺處理庫,所以自動縮放器將嘗試將其綁定到其中一個庫中。你可以使用之類的東西:
一些對雪松這些工作的堆棧有些人可能需要一些調整。所有這些問題都是因爲它試圖通過自己的頭髮將自己從沼澤中拉出來。以Hirefire爲例(這可能是最好的一個)。它修改delayed_job,以便工人自己可以查看隊列並在必要時啓動更多工人,如果隊列中沒有更多工作,工人將全部關閉。有幾個問題:
如果你想要把一個工作隊列
- 在未來被執行,而不是現在就對了,你的運氣了。當工作進入隊列時,工人啓動,但由於工作將來將被執行,工人將關閉,並且除非另一工作進入隊列(這是唯一提示工人啓動的工作)
- 您失去了重試失敗作業的能力,這在delay_job中是默認情況下可能的,但是如果失敗的作業多次失敗重試(並且逐漸變長),需要一段時間,但工作人員將關閉在這段時間內並沒有什麼促使他們再次啓動(在本質上,這是相同的問題,因爲在第一個場景)
,解決這個問題是有一個工人連續工作也可以的事情因此需要定期監視隊列可以在必要時執行工作,甚至可以騰出更多的工人。但是如果你這樣做了,那麼你沒有節省任何資金(你有一個工作人員連續24/7連續運行並且必須爲此付費),這就是在heroku上的自動縮放器背後的全部前提。實質上,如果您只有偶爾的後臺處理工作,或者您的後臺作業很可能會失敗,但會成功重試,或者您有後臺作業不需要立即執行,那麼就沒有可以自動擴展的庫使用它將爲你工作。
這裏有一個選擇。編寫Hirefire的人後來將其轉換成一個webapp(Hirefire app),其實質是爲你外部監控你的Heroku工人/指揮官,並根據需要啓動/關閉工人dynos。這是免費的測試版,但它現在花錢,比你爲24/7全天候運行的員工花費的錢要少,但如果你偶爾需要一些後臺工作,那麼它仍然不是微不足道的。無論哪種方式,這是唯一可行的方法,以確保您的後臺作業基礎設施做你想做的(以及滾動你自己的解決方案,這意味着有一臺機器就像一個EC2實例,你可以把一些腳本,將ping你的英雄應用程序和旋轉根據需要啓動/關閉工作人員 - 不費力氣)。
現在Hirefire應用程序確實也會爲您自動調整您的dynos,它會基於掛接到您的heroku請求隊列的延遲執行此操作。然而,我發現這樣做效果不好,也許如果你靠近你的heroku應用程序實際存在的亞馬遜數據中心(我們不是),那麼你可能會有不同的體驗。但是,對我們來說,無論我調整了多少設置,它都會不必要地分散了大量的dynos,並且永遠不會讓它們失效。你可以把它歸結爲它自那時起可能已經有所改進的一個測試版,但那是我的經驗。長話短說,如果你想自動調整你的工人,使用Hirefire應用程序,你會比你想象的節省更多的錢,但它仍然是最便宜的選擇。如果你想自動調整dynos,你基本上運氣不好。這只是爲了像Heroku這樣的平臺的便利而與之共存的限制之一。
非常感謝,很好的回答。我稍後會給Hirefire一個去,如果我找到其他好的解決方案,我也會告訴你。 – FernandoH
@Fernando你最終結伴了什麼? – user456584
@skorks,我嘗試了一段時間heroku-autoscaler。它工作但不完美,我感覺不太好,因爲有些東西可以擴大耗費我的資源。最後,我放棄了通過這些自動縮放..你在考慮使用這些嗎?鑑於我在一年多以前嘗試過,現在可能有更好的解決方案,請告訴我,如果你找到任何! – FernandoH