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