我最近閱讀的SoundCloud球隊做出了巨大的博客文章。本文討論了軟件體系結構的演變。的Apache +乘客== HAProxy的+ Mogrel服務器(M/M/C排隊)
http://backstage.soundcloud.com/2012/08/evolution-of-soundclouds-architecture/
在部分「負載分配和一點點排隊論」肖恩·特雷德韋,大約排隊論,以及如何更好地使用隊列會談。
他寫道:
我們希望,從來沒有排隊系統,但是如果它沒有排隊,等待時間 隊列中是最小的。以M/M/c模式爲極限,我們問自己「我們如何使c儘可能大?」
要做到這一點,我們需要確保單個Rails應用程序 服務器永遠不會收到同時
我們增加HAProxy的進入我們的基礎設施,配置每個後端有一個最大連接數> 1,並加入我們的後端流程的所有主機,以獲得>那美妙的M/M/C還原多個請求任何主機上排隊的HTTP請求,直到任何後臺駐留程序等待時間變得可用
顯然,他們正在使用HAProxy + Rails服務器(也許是Mongrel)。 好的,HAProxy會傳入請求並只在可用時調度到Mogrel/Thin。
也許我可能是完全錯誤的),但是Apache +乘客做同樣的事情,對不對? 一個隊列(Apache處理傳入請求)和C工作人員(子進程)
感謝@mosch。 「當你需要更多的實例時,apache不能處理它,你將不得不把東西放在頂部」意味着當乘客池中沒有可用的孩子時,apache將清除傳入的請求? apache沒有入隊嗎? – CHAPa
我的意思是我不知道如何讓apache將傳入的請求分發給不同的主機。乘客正在處理單個主機和幾個機架應用程序(這意味着乘客池在本地主機上),但它不會中繼到不同的主機(AFAIK)。 – moritz