2014-03-13 51 views
3

我正在努力診斷我在系統性能日誌中看到的奇怪症狀,偶爾寫入DynamoDB的操作需要幾秒鐘才能完成。與AWS DynamoDB通信時發生整秒延遲

要查看關於基礎設施的一些背景:

  • 這是AWS(華東地區)
  • 的ELB覆蓋兩個EC2實例(c3.2xlarge)
  • 單DynamoDB表託管的Web應用程序配置爲 每秒讀寫1000次

我有一個運行在EC2實例上的PHP web服務,它從連接中收到一個小請求ser,向dynamo寫入記錄,並返回一個空的響應。傳輸的數據量遠低於1kb。 ELB的流量每天都有所不同,但範圍從每秒幾個請求到超過100個。此處重要的一點是,我直接爲我需要的dynamo操作編寫了一個小型CURL客戶端,因爲AWS SDK引入了70ms在我們的處理時間之上的開銷。

我使用的唯一選項是:

CURLOPT_POST 
CURLOPT_RETURNTRANSFER 
CURLOPT_TCP_NODELAY 

開,我看到的行爲: 99%的病例,由ELB記錄的響應時間30毫秒下這是我們的目標。但是,如果我改變圖表以顯示同一範圍內的最大值,我會看到一幅截然不同的圖片(graph),其中時間落在幾乎整秒的時間間隔內。該圖與負載無關,因爲即使在流量最小的深夜也會發生此情況。這些趨勢促使我深入挖掘,並能夠將延遲隔離到與DynamoDB的連接。

這些看起來像程序化的閾值,而不是一般的噪音。我的第一個想法是,它是指數回退,但我沒有看到來自發電機Web服務的反應(這將表明這(全部200年代))的現象,而且我們的吞吐量現在是我們提供的10%,即使在峯值。再次,即使在流量最小的深夜,我們也會看到這種性能趨勢。如果它沒有回退,那麼它肯定感覺像是某種節流。想法?

使用curl的詳細輸出爲我迪納摩API調用,我看到這樣的條目:

Line 151190: 2014-03-12T16:48:35-04:00 - INFO - Time: 1.001436, (Start Transfer: 1.001416, DNS: 2.6E-5, Connect: 0.998141, Pre-Transfer: 0.998199) 

Line 196871: 2014-03-12T16:48:42-04:00 - INFO - Time: 1.001528, (Start Transfer: 1.001488, DNS: 3.1E-5, Connect: 0.99694, Pre-Transfer: 0.996981) 

Line 430508: 2014-03-12T16:49:19-04:00 - INFO - Time: 1.002823, (Start Transfer: 1.002807, DNS: 3.2E-5, Connect: 0.998972, Pre-Transfer: 0.999009) 

Line 870236: 2014-03-12T16:50:31-04:00 - INFO - Time: 1.000663, (Start Transfer: 1.000642, DNS: 3.0E-5, Connect: 0.001506, Pre-Transfer: 0.001537) 

Line 950109: 2014-03-12T16:50:43-04:00 - INFO - Time: 1.010762, (Start Transfer: 1.010737, DNS: 3.3E-5, Connect: 0.001357, Pre-Transfer: 0.001394) 

的關鍵發現這裏是好像在50%的病例是連接時間,而對於其他50% ,目前還不清楚花費的時間。看起來這裏有另一個組成部分可能有助於端到端的時間,但我正在努力查明可能的結果。

任何幫助將不勝感激!

+0

Dynamo DB在哪個區域?它與EC2實例相同嗎? – Ray

+0

它可能是DNS嗎?正在使用地址或IP?我發現使用ip可以加快速度並且不能確定當前的AWS設置,但可以使用內部地址嗎? –

+0

@Ray - 是的,一切都在同一地區 – Jeff

回答

0

讓你沒有發送Expect: 100-continue標頭,這是導致這種延遲約1秒的常見原因。我相信默認情況下cURL會發送這個頭文件,所以你需要做一些操作來刪除它。

如果最終使用適用於PHP的AWS開發工具包,請確保您也使用像APC或Zend Opcache這樣的操作碼緩存。

+0

謝謝Jeremy - 我在研究過程中遇到了這種可能性,並且添加了代碼以確保我將「Expect:」作爲標題發送,以覆蓋任何默認設置。雖然我看到了奇怪的事情,但我已經打開了CURLINFO_HEADER_OUTPUT標誌,並且沒有看到我的頭文件或Expect:100-繼續存在。它可能是隱藏的,甚至一層進一步下降?所有這一切都是說:我無法證實這已經產生了影響,但我確實知道,在我的標題中添加並清空「Expect:」,我仍然可以看到1秒的延遲。 – Jeff

+0

當你curl詳細輸出時,你沒有在任何地方看到'

+0

您應該確保發佈在DynamoDB論壇上:https://forums.aws.amazon.com/forum.jspa?forumID=131 –