客户(大约1000名)注册了我的服务并收到了客户唯一的api密钥。然后,当他们通过AWS api网关调用AWS lambda函数以访问DynamoDb中的数据时,他们将使用密钥。
要求1 :客户是根据api调用的数量来计费的,因此我必须能够对它们进行计数。 AWS仅提供每个lambda的api调用总数的指标,因此我有几种选择:
要求2 :lambda可以访问的数据对于每个客户都是唯一的,因此取决于所提供的api密钥。 为此,我还有很多选择:
以上所有选项似乎都不是设计解决方案的好方法。有规范的方法可以做到这一点吗?如果没有,以上哪个选项是最好的?由于不熟悉AWS,我是否错过了一个显而易见的解决方案?
答案 0 :(得分:1)
我将根据经验尝试解决您的问题,但也许Michael-Sqlbot或John Rotenstein可能会给出更适当的答案。
要求1
1)听起来不错。我在这里没有发现任何严重问题。
2),恕我直言,这是3中最好的。它将使数据访问与计费服务脱钩,这在微服务世界中是一件好事。
3)这是不可扩展的。想象一下,您的系统在增长,最终得到了10K Lambda函数。您不仅必须建立一个非常可靠的机制来自动化该过程,而且还需要监视1万种不同的事物(想象CloudWatch日志,API Gateway等),更不用说您将拥有1万种功能完全相同的代码(分开客户特定参数)。我什至不会考虑这一点。
要求2
1)它可以工作,并且非常适合DynamoDB服务器模型:在一个唯一的表中存储尽可能多的数据,因此您可以一次性获取所有数据。据我所知,您甚至可以将此ApiKey用作分区键,并且为了简单起见,您可以将客户端的数据作为JSON存储在名为data的列中。由于您的查询仅需要通过ApiKey进行查询,因此在DynamoDB中存储JSON不会造成伤害(但是请记住,如果您需要使用其JSON属性中的任何一个进行查询,而不是麻烦的话,因为DynamoDB的查询功能非常有限)
2)否,因为要求1.3
3)否,由于上述原因。
如果您仍然需要将ApiKey存储在不同的表中,以便您可以运行不同的分析并对客户端的呼叫,访问,计费等进行更细粒度的控制,那么这也不成问题,只需确保重复即可您的ClientData
表上的ApiKey而不是创建FK(DynamoDB不支持FK,因此您需要自己管理这些约束)。在NoSQL世界中,复制就可以了。
您的用例显然是一个多租户用例,因此,我还建议您阅读Multi-Tenant Storage with Amazon DynamoDB,这将使您有更多的见解并扩大您的选择范围。多租户并非易事,如果实施不当,可能会给您带来很多麻烦。我认为这就是为什么AWS还为我们准备了这篇不错的文章的原因:)
如果您有更多信息要分享,很高兴在评论部分继续进行此操作
希望这会有所帮助!