2015-07-22 72 views
1

使用AWS SDK連接到AWS SQS時,似乎有明顯的延遲。如何使用AWS SQS減少連接延遲?

啓動服務以來的第一個連接上3-7秒後,消息開始在一個良好的速度流向消費消息的時候也不是那麼重要 -

,但發佈消息時,它是一個大問題。例如,由於與AWS的連接正在等待發布消息,因此用戶Web請求需要幾秒鐘才能完成。這樣做會影響發送消息的目的,以便將等待時間推遲到後臺工作。

這是一個DNS修復的問題嗎?聯網?或者它是AWS SQS設置?我的網絡應用程序不在AWS網絡中,不確定這是否是一個問題。

簡單的發佈消息代碼:我們在使用過程中

$aws = \Aws\Common\Aws::factory(/* array with connection settings */); 
$client = $aws->get('Sqs'); 
$queue = $client->getQueueUrl(['QueueName' => $queue]); 

// This takes 3 - 5 seconds every time its called. 
$res = $this->client->sendMessage([ 
    'QueueUrl' => $queue['QueueUrl'], 
    'MessageBody' => json_encode($request) 
]); 
+0

總會有一些延遲,你不能做太多的事情。我使用beanstalked,因爲它 – baao

+1

我想我會切換到Beanstalkd ...我們需要一個簡單的隊列,我們​​可以從多個工作人員處消耗。謝謝。 – smorhaim

回答

1

SQS已經顯示出非常低的延遲。但是,我們的邏輯運行在EC2實例上。

很可能,服務器和SQS之間存在顯着延遲。將SQS用於離您的服務器更近的區域,或者將應用程序的邏輯移至EC2或Lambda。

我建議在執行遷移之前編寫一個簡單的測試應用程序,以排除業務邏輯中的問題。

+0

你說得對。雖然我的服務器速度很快,但它們不在EC2內部,但有一些延遲。轉移到EC2目前不是一種選擇,但這是正確的答案。我正在將隊列移動到我的網絡(Beanstalkd)。如果對RabbitMQ有非常不好的體驗,那麼將嘗試Beanstalkd。我們的隊列處於適配器模式,因此切換非常輕鬆。 – smorhaim

0

幫助我減少SQS延遲的一個技巧是直接使用隊列URL,而不是從API構建它。同時使用http而不是https會顯着降低延遲。對我來說,接近20毫秒的影響。

當然,您可能會在安全性和可移植性之間進行權衡,但如果性能不足,可能會有所幫助。