2017-05-14 38 views
1

我需要創建一個API,其中供應商將使用REST調用將數據推送到服務器,並且需要將此數據進一步推送給數據所屬的移動應用程序(使用Websocket猜測)的用戶。AWS API網關 - 用於AWS EC2端點或AWS Lambda?

供應商使用REST API:我需要檢查供應商憑證並將該數據寫入數據庫。

我很想知道我應該使用什麼方法?我應該使用AWS API Gateway來提高安全性和可伸縮性嗎?

並使用AWS API網關時 - 使用EC2端點或Lambda端點會更好。

回答

1

使用EC2 vs Lambda取決於您希望如何設計服務和特定用例。無服務器是近來的一種趨勢,但您不需要無服務器,只是爲了實現無服務器。

對於您的使用案例,如果REST API將公開更新數據庫,我們假設RDS,Lambda函數可能不是理想的選擇。因爲每次調用lambda函數時都需要打開一個連接。而且,如果您在NO VPC配置中運行lambda,則需要公開公開您的RDS端口。如果它的DynamoDB,它運作良好。

但是,您希望通過說網絡套接字將更新推送到移動應用程序。你肯定需要一個WebSocket服務器,我想它的EC2。

您可以設計您的應用程序,使您的所有業務邏輯駐留在lambda函數中,更新數據庫,將消息發佈到SQS隊列。 WebSocket服務器然後可以從SQS隊列中拾取消息併發布更新。這將您的應用程序架構分解開來。這只是一種方法,不會從盒子中水平縮放。或者 - 您可以選擇將所有內容放在一個EC2實例中,公開一個更新數據庫的REST API並將更新發布到WebSocket連接。

+0

謝謝Yeshodhan。因爲,我需要使用RDS - 看起來Lambda不是一種選擇。所以,我可以使用EC2實例,我可以使用1個EC2進行API處理,然後將消息發佈到SQS隊列中,並且可以有另一個EC2實例來處理與用戶的WebSocket通信。 我在這裏看到一個技巧:這導致了一個問題,我將如何識別哪個EC2設備從SQS讀取,移動用戶是否連接到相同的EC2設備,然後才能夠傳輸(當我們嘗試scale) – j10

+0

或者我可以使用哈希邏輯,其中API調用將由同樣連接到用戶移動設備的相同EC2設備處理。 根據用戶名或供應商名稱,AWS API網關是否允許使用此類邏輯將API調用轉移到相應的EC2設備。 – j10

+1

*「對於您的用例,如果您將公開REST API更新數據庫,那麼假設RDS,Lambda函數可能不是理想選擇,因爲每次調用lambda函數時都需要打開連接。」*不必要。一個lambda容器可以保存其RDS連接以便在其下次調用時重用。至少用['context.callbackWaitsForEmptyEventLoop = false'](http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html)和一個連接在處理程序子外部建立。 –