我是一个团队的成员,该团队目前正在开发概念证明体系结构/应用程序,以用于政府部门与公众之间的通信服务(目前缩小到卫生部门)。客户特别要求通过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模型不会引起复杂查询的麻烦,等等。东西?我是否错过了可以扩大规模的任何关键方面?
答案 0 :(得分:2)
让我们首先清除您的一些误解:
根据我的研究,我收集到的是,在RDS的情况下,安全性之间存在一个权衡(将Lambda保留在公共RDS实例之外,遵循安全最佳实践的做法,对公共部门而言则是不行) )和性能(将Lambda放入私有RDS实例中,并导致大量的冷启动时间)。不过,可以通过使用CloudWatch ping来取消冷启动时间,这可能是最佳选择,也可能不是最佳选择
现在是您的实际问题
基本上,患者输入其病情的描述,这构成了案例的基础。一名或多名护士会在一个或多个会议期间处理此案,并记录与该案有关的笔记。
该可以在NoSQL数据库(例如DynamoDB)中实现。如果没有更多信息,我可能会将Session用作基本文档,使用案例ID作为分区键,并使用Session ID作为排序键。如果您不了解这些术语的含义以及如何根据该密钥构造文档,则可能不应该使用DynamoDB。
不不使用DynamoDB的更大原因与访问模式有关。您是否想查找给定护士工作的所有案例?或与特定患者有关?这些查询是关系数据库的设计目的。
在DynamoDB的情况下,我个人没有经验(比MySQL更重要)
您的团队中是否有人熟悉NoSQL数据库?如果没有,那么我认为您应该坚持使用MySQL。学习如何使用Lambda将给您带来很多挑战。