我明白你來自哪裏。不過,我認爲你應該從另一個角度來看問題。您的問題似乎與負載不平衡的事實沒有特別的關係。可以說你確實解決了這個平衡問題。你仍然會失去大量的請求。我不知道你的客戶如何連接到你的服務,所以我不能詳細說明你如何解決這個問題,但你可能希望看到改進代碼更健壯,並計劃連接到掉線。沒有連接30秒以上的服務應該依賴沒有掉線的連接。早在TCP/UDP套接字的時代,在構建失敗方面做了很多工作,不知何故,這在當今的HTTP世界中已經失傳。
我想說的是,如果你編寫客戶正在使用的代碼進行連接,那麼將代碼構建得更加健壯,並通過重試來處理失敗。一旦開始執行重試操作,您需要確保您的API調用是原子級的,並在必要時使用事務。
最後,我會回答你原來的問題。亞馬遜的ELB甚至可以從相同的計算機/ IP地址進行循環。如果你的客戶端總是連接到同一個服務器,那麼它最有可能是緩存響應的瀏覽器或代碼。如果他們不直接從瀏覽器訪問您的REST API大多數語言讓你得到IP的名單給定主機名。這些IP將成爲負載均衡器的IP地址,您可以隨機洗牌,然後每次使用頂部條目。例如,您可以使用以下PHP代碼將請求隨機發送到不同的負載均衡器。
public function getHostByName($domain) {
$ips = gethostbynamel($domain);
shuffle($ips);
return $ips[0];
}
我知道它很遲,但我面臨着同樣的問題。下面標記的答案對我沒有用處,因爲我的一些ec2實例尚未加載,所以爲什麼要啓動新的實例。你有沒有找到其他解決方案? – 2013-09-24 14:04:21