嘿,伙计们,我正在为一个hackathon开发一个coronaapi,我们目前有一个“经典”的安装程序,运行在一个ec2vm上,数据只存在于磁盘上的.json文件中。
对于默认路由, /daily
,大约需要400-600毫秒。
现在我一直在瞎折腾,用无服务器的函数重新设计它,这肯定是可行的,但性能方面我严重不足。
我在aws中直接做过一次,使用了他们的api网关和lambda函数以及dynamodb中的数据和redis缓存(redis cloud)。
因此,当请求传入时,它首先检查redis,如果找不到键,它将查询dynamo并返回结果。
这非常有效,响应时间(在第一次lambda冷启动后/redis条目可能不存在)在200-400ms左右稍微低一些。
然而,用aws所需的所有iam配置设置这些单独的lambda函数是一件麻烦事。
因此,由于我也是netlify的忠实粉丝,我决定尝试一下它们的功能(我知道它们基本上也是lambdas)。不管怎样,我使用相同的redis缓存,而不是dynamo(因为我无法找出iam让netlify读取我们的dynamodb),我使用faunadb作为db,它工作得很好。问题是,即使存在redis条目,通过netlify函数的请求也至少需要1秒,通常在1.3-1.5秒左右
你知道为什么会有这么大的差异吗?
aws lambda版本托管在eu-central-1中,redis云示例也是如此。我不知道netlify在哪里设置了我们的功能。这是我能解释两者区别的唯一方法,当两者都只是点击redis缓存并返回结果时。可能netlify函数在us-east-1或者更远的地方,在那里检查redis/从redis获取需要更长的时间。
编辑1:监控软件截图:
编辑2:所以我测试了一个netlify函数路由,它只返回一些随机内容的对象,而不做任何其他请求,而且它和aws的一样快。所以我对netlify的aws区域的请求的假设,不管他们把我的函数放在哪里,查询redis比lambda版本要花更长的时间,在lambda版本中,我可以明确地告诉它从哪个区域执行。。
还有其他想法/建议吗?
暂无答案!
目前还没有任何答案,快来回答吧!