2012-07-06 152 views
1

我目前在一個負載平衡器下的兩個EC2節點上運行REST API應用程序。而不是來自許多IP的少量流量的標準負載均衡場景,我只從少數幾個IP獲得大量流量。因此,我希望將來自每個IP的請求分散到所有可用的節點中。如何從單個客戶端向多個節點發送ELB轉發請求?

但是,即使關閉會話粘滯性,也不會出現這種情況。看看我的日誌,幾乎所有的請求都會轉到一臺服務器上,而我最小的客戶端會轉到次節點上。這是有害的,因爲對我的服務的請求可能持續30秒,並且丟失主節點意味着不成比例的請求被殺死。

我該如何指導我的ELB爲每個客戶的個人請求進行輪詢?

+0

我知道它很遲,但我面臨着同樣的問題。下面標記的答案對我沒有用處,因爲我的一些ec2實例尚未加載,所以爲什麼要啓動新的實例。你有沒有找到其他解決方案? – 2013-09-24 14:04:21

回答

0

你不能。 ELB使用不可配置的循環算法。你可以做什麼來緩解(而不是解決)這個問題,就是增加額外的服務器到你的ELB和/或讓你的ELB發起的健康檢查請求更頻繁。

+0

不幸的是,健康檢查不是問題 - 他們已經儘可能頻繁。我只是希望能夠比現在更多地分發請求,因爲30秒的連接時間意味着一次只能打開多個連接。發生故障的服務器將削減所有這些連接的關閉,使發生有交通不成比例的服務器上 - 即使它是非常健康的業務處理的量 - 造成大問題。不是因爲新的連接不能及時重定向,而是因爲大量的連接被切斷了。 – 2012-07-06 20:30:34

+0

我明白你在說什麼,因爲我已經在過去通過類似過去(儘管不是長事務)的情況。不幸的是,您現在可以做的最好的做法是橫向擴展,添加主動監控,並且可能會聯繫亞馬遜並請求配置負載均衡。我相信他們已經收到了很多人的這樣的要求。最好的祝福。 – Viccari 2012-07-06 23:48:40

0

我明白你來自哪裏。不過,我認爲你應該從另一個角度來看問題。您的問題似乎與負載不平衡的事實沒有特別的關係。可以說你確實解決了這個平衡問題。你仍然會失去大量的請求。我不知道你的客戶如何連接到你的服務,所以我不能詳細說明你如何解決這個問題,但你可能希望看到改進代碼更健壯,並計劃連接到掉線。沒有連接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]; 
} 
0

我有類似的問題與亞馬遜ELB,但對我來說,事實證明,HTTP客戶端使用連接:保持活着。換句話說,來自同一個客戶端的請求是通過同一個連接服務的,因此它不會在服務器之間切換。 我不知道你使用了哪個服務器,但可能關閉保持活動狀態,迫使客戶端爲每個請求建立一個新的連接。對於擁有大量數據的請求來說,這可能是一個很好的解決方案。如果您有大量的小數據請求,可能會對性能產生負面影響。當您在不同的可用區域的兩個實例

0

可能發生這種情況。

當一個ELB正在與一個可用性區域的多個實例,將循環賽的實例之間的請求。

當兩個實例是在兩個不同的可用性區域,ELB工作的方式是創建兩個服務器(ELB服務器)每個都有自己的IP,並且他們與DNS負載平衡。

當您的客戶端請求的服務器的IP地址的DNS,它接收兩個(或更多)的反應。然後客戶端選擇一個IP並緩存(操作系統通常會這樣做)。除非你控制客戶,否則你可以做的事情不多。

當你的問題是兩個實例在不同的可用性區域,該解決方案可能是在每個可用區至少兩個實例。然後,一臺ELB服務器將處理跨兩臺服務器的循環,並且只有一個IP,因此當服務器出現故障時,它對客戶端來說是透明的。

PS:另一種情況是,當ELB創建具有唯一IP的更多服務器時,您在單個可用區中有很多服務器,並且一臺ELB服務器無法處理所有負載並將其分發到連接的服務器。然後,再次創建一個新的服務器來連接額外的實例,並使用DNS和多個IP分配負載。

相關問題