
我研究了 Amazon Web Services 上的許多後端設置,尤其是 Instagram 的後端設置。在他們的Instgram 工程博客他們提到他們如何在三個 NGINX 伺服器前面有一個彈性負載平衡器,這些伺服器位於運行 django/Gunicorn 的應用程式伺服器前面,為什麼會這樣(是為了緩衝?快取?)
如果是這種情況,如何將這些 NGINX 伺服器連接到 django/gunicorn 應用程式伺服器?
答案1
看了一眼 Instagram 帖子,我不相信他們使用 Nginx 進行緩衝或緩存(儘管我可能是錯的)。我使用類似的東西,但使用 HAProxy 而不是 Nginx。
我們採取這種方法的一些原因:
- Nginx 和 HAProxy 運作在第 7 層,而 ELB 運作在第 4 層。
- 當健康檢查失敗時,優雅地終止連線。當流量從停止服務的執行個體流出時,ELB 可以繼續將流量傳遞到 HAProxy/Nginx。看https://forums.aws.amazon.com/message.jspa?messageID=231571
- 如有必要,您可以即時擴展負載平衡層
- 關於 HAProxy/Nginx 層後面每個實例的流量和效能的更好指標
- ELB 可以偵測 HAProxy 執行個體何時發生故障並停止傳送流量
答案2
我能想到的有幾點:
- 它分發請求並監控伺服器的運作狀況,因此,如果您的 nginx 伺服器崩潰,該網站將繼續完美運作。
- 亞馬遜在其端做了一些拒絕服務緩解措施。如果您自己處理負載平衡,您將為所有訪問它們的流量付費。如果亞馬遜阻止了一些針對您的 ELB 的攻擊,您無需為該部分付費。
- 允許您將 nginx 伺服器的安全群組鎖定到 ELB,使它們比向公共 Internet 開放更安全。