2015-11-25 32 views
0

會發生什麼: 如果我寫了數百萬線程的線程池支持的服務器應用程序,它會每秒百萬處理數以百萬計的請求/秒:如何做負載均衡器(主服務器線程)的作品

請求

我一直在開發Web服務。 Web服務部署在具有前端負載均衡器的1000臺計算機上。負載平衡器的工作是在實際處理Web請求的服務器之間分配流量。 所以我的問題是,因爲在負載平衡器本身內部運行的進程本身是單線程來監聽端口上的web請求,所以它如何處理每秒接受數百萬次請求。負載平衡器可能正在忙於委派一項任務,那麼在該時刻發生的傳入請求會發生什麼情況?

在我看來,所有客戶端將無法處理,因爲只會有一個請求處理線程來傳遞傳入請求的線程池

這樣沒有多線程服務器應該永遠工作。 我不知道Facebook/amazon每秒處理數百萬次請求。

+1

認爲通過增加線程數量導致併發性增加是錯誤的。你的系統核心數量有限,所以它的工作量與此成正比。 –

+0

擁有數百萬個線程的線程池?有人非常困惑。 – SergeyA

+0

我的意思是支持1000臺服務器的負載均衡器。 同樣的類比適用於具有由工作線程池支持的單個傳入請求處理程序線程的進程 – Saby

回答

0

你是對的,它不會工作。單個計算機可以處理的數量是有限的,這與它運行多少個線程無關。

亞馬遜和Facebook等公司處理它的方式是讓數百或數千臺服務器遍佈全球,然後將請求傳遞給各種服務器。這是一個很大的問題,但如果你想知道更多,我建議你閱讀分佈式計算,並回來,如果你有具體問題。

+0

我想您可能想根據缺乏知識的問題開始較小。 :)如果不是谷歌是你的朋友,我不知道推薦什麼書 –

+0

請檢查更新的問題 – Saby

0

隨着編輯,問題變得更有意義。 每秒發送百萬個請求並不困難。一個分佈操作應該在幾十納秒的粘度上稍微有點並且僅僅包括將接收到的套接字推入隊列。沒什麼大不了的。

一旦完成,平衡器已準備好接受下一個請求。

+0

是的,你有我的問題的要點。我同意你的意見,它會花費納秒,但我真的很感興趣知道會發生什麼,如果讓我們說1000個完全相同時間的請求,即1000個請求在相同納秒時間點擊服務器端口第二,只有一個請求會到達服務器線程,其餘999將被丟棄?儘管如此,請參閱一些關於這些東西的閱讀材料(如何實現負載平衡器) – Saby

+0

以下解釋了幾件事http://computer.howstuffworks.com/internet/basics/question342.htm – Saby

+0

和這個:http:///www.forbes.com/sites/reuvencohen/2013/11/26/google-shows-how-to-scale-apps-from-zero-to-one-million-requests-per-second-for-10/ – Saby

相關問題