2017-05-14 152 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)和一个连接在处理程序子外部建立。 –