用于Lambda无服务器架构的AWS DynamoDB与RDS

问题描述 投票:3回答:2

我是一个团队的成员,该团队目前正在为政府办公室和公众之间的通信服务开发概念证明体系结构/应用程序(目前缩小到卫生部门)。客户特别要求通过AWS服务采用主要为无服务器的方法,我需要有关如何建立此架构(即Lambda与数据库的关系)的建议。

大致上,该体系结构将利用API网关来处理请求,这些请求将调用不同的Lambda(作为微服务)来访问数据库。

下图描述了一种快速的关系架构。基本上,患者输入其病情的描述,这构成了案例的基础。一个或多个护士会在一个或多个会议期间处理该案例,并记录与该案例相关的笔记。 DB Schema (not enough reputation)

[根据我的研究,我收集到的是,在RDS的情况下,在安全性之间进行了权衡(将Lambda保留在包含RDS实例的公共VPC之外,遵守安全最佳实践,公共部门)和性能(将Lambda放入具有RDS实例的私有VPC中,并且由于提供了ENI而导致大量的冷启动时间)。但是,可以通过使用CloudWatch ping来取消冷启动时间,这可能是最佳的,也可能不是最佳的。

就DynamoDB而言,我个人经验不足(比MySQL经验丰富),并且不确定数据是否适用于NoSQL模型。如果是这样,DynamoDB似乎是更好的方法。从我的理解来看,NoSQL对涉及JOIN等的复杂查询的支持较少,因此可能会取消它。

似乎就数据/关系而言,SQL / RDS似乎更合适,但是如果找到了不错的数据模型,DynamoDB对于Lambda / AWS服务的问题就更少了。所以我的问题是,最好是使用私有RDS实例并尝试通过预热最关键的Lambda来抵消冷启动,还是有NoSQL模型不会引起复杂查询的麻烦,等等。东西?我是否缺少任何可以扩大规模的关键方面?

amazon-web-services aws-lambda amazon-dynamodb amazon-rds serverless
2个回答
2
投票
让我们先消除您的一些严重误解:

[从我的研究中,我已经收集到,在RDS的情况下,安全性之间存在一个折衷(将Lambda保留在公共RDS实例之外,遵循安全最佳实践,对公共部门不适用)和性能(将Lambda放入私有RDS实例中,并导致大量的冷启动时间)。但是,可以通过使用CloudWatch ping来取消冷启动时间,这可能是最佳的,也可能不是最佳的]

    RDS是数据库服务器。您不会在其中执行任何操作。
  • 您可能正在考虑VPC或虚拟私有云。这是一个隔离的网络,您可以在其中运行RDS实例和Lambda。
  • 在VPC内部或外部运行不会影响冷启动时间。当AWS必须启动新容器来运行Lambda时,您将支付冷启动罚款。发生这种情况可能是因为它最近没有运行过,或者是因为它需要扩展以满足并发请求。实际的冷启动时间将取决于您的语言:例如,Java比Python慢​​得多,因为它需要先启动JVM并加载类,然后再执行任何操作。
  • 现在是您的实际问题

    [基本上,患者输入其病情的描述,这构成了案例的基础。一个或多个护士会在一个或多个会议期间处理该案例,并记录与该案例相关的笔记。

    可以

    在NoSQL数据库(例如DynamoDB)中实现。如果没有更多信息,我可能会将Session用作基本文档,使用案例ID作为分区键,并使用Session ID作为排序键。如果您不了解这些术语的含义以及如何根据该密钥构造文档,那么您可能不应该使用DynamoDB。使用

    not

    使用DynamoDB的更大原因与访问模式有关。您是否想查找给定护士工作的所有案例?或与特定患者有关?这些查询是关系数据库的设计目的。
    在DynamoDB的情况下,我个人没有经验(比MySQL更严重)

    您的团队中有人熟悉NoSQL数据库吗?如果没有,那么我认为您应该坚持使用MySQL。学习如何使用Lambda将给您带来很多挑战。


  • 0
    投票
    我认为该主题中的问题未得到回答。使用DynamoDB与RDS相比有什么优势吗?我认为DynamoDB中的查询模式很奇怪而且很局限。分析查询非常不便,需要lambda来处理数据,而不是利用SQL构造。将DynamoDB与PostgreSQL一起用于RDS有什么好处?在将DynamoDB与AWS放大GraphQL生成的架构一起使用后,我开始不太喜欢DynamoDB。双方都有更多经验的人能启发我吗?
    © www.soinside.com 2019 - 2024. All rights reserved.