用于处理许多请求的Performant API

时间:2017-09-05 18:33:43

标签: node.js mongodb amazon-web-services aws-lambda aws-api-gateway

我正在开发一个iOS应用程序来显示来自MongoDB数据库的新闻。该应用程序有大约50,000个活跃用户,因此它在服务器上非常繁重。我想重新思考如何构建API。我刚刚学到了一些关于AWS API Gateway,Google Cloud Functions,Firebase等的知识。

如果我只需要一些功能来提取新闻列表,用户列表等,那么从2017年开始构建此API的最佳方法是什么?我一直以为我应该简单地创建一个带有一些端点的Node.js服务器。但现在看来,使用AWS API Gateway创建单独的端点似乎更高效,每个端点都指向AWS Lambda函数。

但真正最具扩展性的选择是什么?

2 个答案:

答案 0 :(得分:0)

Cloudfront(使用缓存) - > API网关 - > Lambda将是一个可扩展的解决方案。由于您没有选择DynamoDB,因此您需要为您的存储和可用性管理mongoose。

为了使其更先进,您可以将Lambda Edge与Cloudfront一起使用,使其在多个区域中处于活动/活动状态。因此,如果一个地区出现故障,应用程序仍然可用。

答案 1 :(得分:0)

当您说" Performant"时,这对您的方案意味着什么?

如果您需要一些提取新闻列表,用户列表等的功能,那么听起来就不会出现性能问题。

如果您想知道AWS无服务器堆栈是否可以处理数千或数百万个请求,答案是肯定的,API Gateway + Lambda可以处理任何规模的请求。

如果您只需要通过其哈希键查询数据,那么DynamoDB非常适合!此外,还有一个auto scale feature。但是,如果您需要执行扫描或一些复杂的查询,那将会有点贵,有时会变慢。对于此方案,您可以将DynamoDB数据流式传输到Elasticsearch或数据仓库解决方案。

我不确定将Lambda与MongoDB结合起来是否会那么棒。我们假设您选择托管的MongoDB服务,例如Mongo Atlas,您需要为您的系统增加更多复杂性,如VPC Peering,以及管理/优化与MongoDB的lambda连接({{3 }})。如果您正在处理一百万个请求调用,我想很多Lambda函数将开始并行运行,您的MongoDB中将打开多少个连接?

除了AWS无服务器堆栈之外,Optimizing AWS Lambda Performance with MongoDB Atlas可以轻松扩展您的系统。

所有解决方案都有优缺点,您可以使用API​​ Gateway + Lambda或Elastic Beanstalk(或其他一些供应商解决方案)进行扩展。我想"可扩展"是云供应商目前提供的内置功能,以及"性能"只是在设计基础架构时应该分析的主题之一。