问题描述
有多个Lambda函数,文件通过这些函数进行处理,用户希望将每个计算的状态存储在计数器中,以便更好地进行日志记录和监控。用户计划使用以下方式进行日志记录:
file-name Lambda1 Lambda2 Lambda3
Name1 Done Done In-process
用户将在相应的Lambda函数下更新文件的状态为Received
、In-process
和Done
。用户有两个疑问:
1. 这种做法是否可行?如果不可行,是否有更好的替代方案?
2. 如果可行,使用RDS还是DynamoDB作为存储更好/更便宜?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
问题1:日志记录的最佳实践
对于这种分布式架构下的状态信息,可以考虑使用事件溯源(Event Sourcing)来进行日志记录。事件溯源可以简化分布式系统的复杂性,并避免使用传统数据库范式带来的许多问题。你可以在SoftwareEngineering SE上进一步了解事件溯源的最佳实践。
问题2:RDS vs DynamoDB
选择RDS还是DynamoDB作为存储取决于你的流量情况。如果你的流量波动较大,DynamoDB是一个非常可扩展的选择,它可以提供可靠的吞吐量。但是,如果你的流量在几个小时内可能增长10倍(波动性较大),DynamoDB可能会过于昂贵,因为你需要预留最大吞吐量,否则可能会被限流。
RDS是一种基于你选择的实例类型的托管关系型数据库,因此它可以处理更大的流量波动,但在可扩展性方面不如DynamoDB。
另外,你还可以考虑使用Redis作为简单的键值/计数器存储,它具有出色的速度和效率。如果只是用于日志记录,Redis可能已经足够了。
其他建议
如果你每秒写入的消息数量较大,成本将取决于这个因素。通常情况下,DynamoDB更便宜。但在这种情况下,我建议你使用S3将日志消息输出到文件中。从技术上讲,这应该是一个足够好的解决方案,而且与DynamoDB或RDS相比,设置和维护成本要低得多。
以上是关于DynamoDB和RDS作为计数器存储的选择的解决方案。根据你的具体需求和流量情况,选择适合你的存储方案。
请注意,以上解决方案仅供参考,具体选择应根据你的实际需求和预算来决定。