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

时间:2019-02-15 19:59:06

标签: amazon-web-services aws-lambda amazon-dynamodb amazon-rds serverless

我是一个团队的成员,该团队目前正在开发概念证明体系结构/应用程序,以用于政府部门与公众之间的通信服务(目前缩小到卫生部门)。客户特别要求通过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模型不会引起复杂查询的麻烦,等等。东西?我是否错过了可以扩大规模的任何关键方面?

1 个答案:

答案 0 :(得分:2)

让我们首先清除您的一些误解:

  

根据我的研究,我收集到的是,在RDS的情况下,安全性之间存在一个权衡(将Lambda保留在公共RDS实例之外,遵循安全最佳实践的做法,对公共部门而言则是不行) )和性能(将Lambda放入私有RDS实例中,并导致大量的冷启动时间)。不过,可以通过使用CloudWatch ping来取消冷启动时间,这可能是最佳选择,也可能不是最佳选择

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

现在是您的实际问题

  

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

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

不使用DynamoDB的更大原因与访问模式有关。您是否想查找给定护士工作的所有案例?或与特定患者有关?这些查询是关系数据库的设计目的。

  

在DynamoDB的情况下,我个人没有经验(比MySQL更重要)

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