我正在尋找與我正在使用產品進行的架構設計決策有關的幫助。AWS SQS異步排隊模式(請求/響應)
我們已經有多個生產者(由API網關調用到Lambda中發起)將消息放入SQS隊列(請求隊列)中。可以有多個同時調用,所以會有多個並行運行的Lambda實例。
然後我們有消費者(讓我們說20個EC2實例)對SQS進行長時間輪詢以處理消息。他們需要大約30-45秒來處理每條消息。
然後,我會理想地將響應發回給發出請求的生產者 - 這是我與SQS一起努力的部分。理論上我會有一個單獨的響應隊列,最初的Lambda生產者將會消耗這些響應隊列,但似乎沒有辦法選擇具體的相關響應。也就是說,每個Lambda函數可能會選擇另一個函數的響應。我正在尋找類似於此設計模式的東西:http://soapatterns.org/design_patterns/asynchronous_queuing
我可以看到的唯一選擇是爲每個Lambda API調用創建一個新的SQS Response隊列,並在其消息中傳遞消息中的ARN對此的迴應,但我無法想象這非常有效 - 尤其是當每分鐘有數百條消息時?我錯過了明顯的東西嗎?
我想唯一的另一種選擇是設置一個更大的消息代理(例如RabbitMQ/ApacheMQ)環境,但是我希望儘可能避免這種情況。
謝謝!
嗨馬特,謝謝你的迴應。我不確定S3如何在這種情況下工作 - 生產者將不得不輪詢以檢查S3響應文件是否存在? S3上沒有長時間輪詢我可以找到,所以即使我每秒都檢查一次,它看起來效率很低,特別是每分鐘可能有數百個請求。 –
正確,你將不得不輪詢S3。 AWS無法向您的Lambda函數反饋迴應已準備就緒。所以你有4個選項:(a)使用SQS,每個請求一個隊列,(b)使用SQS,共享結果隊列(這兩個選項都不是理想的),(c)輪詢某個結果的東西(S3,數據庫等) 。),或(d)使用非AWS服務。 –
再次感謝,我感謝您在此問題上的明確和專業知識。我之前沒有使用過Redis,但是你的鏈接(特別是Request + Reply MQ Pattern)聽起來像是一個很好的選擇,所以我會調查一下,看看它是否適用於我們的環境。再次感謝。 –