在AWS上托管的应用程序,用于访问多个外部数据库

时间:2017-08-01 12:43:41

标签: mysql database amazon-web-services data-warehouse amazon-rds

这个问题与应用程序开发并不完全相关,而是从架构的角度来看。假设一个应用程序必须在AWS上托管,这将需要来自多个外部第三方持有数据库的通信(不是强制要求在AWS上,可能是他们自己的数据中心或托管) - 也许一个客户端将是使用MySQL,另一个MSSQL或Oracle等。

因此,这些外部数据库中保存的数据可能会频繁更改,并且应用程序应始终检索更新的数据。我能想到的一种方法是使用另一个RDBMS DB(来自我们这边)专门存储来自外部数据库的所有这些数据,并使我们的数据库始终保持同步。但我不确定这是否是实现这一目标的好方法。

或者我是否需要使用Redshift等任何数据仓库工具来存储实时同步的所有数据,然后在我们的应用程序中使用DW数据?根据这里的架构师的说法,实现这一目标的好方法是什么,主要是多个外部数据库连接和同步?

2 个答案:

答案 0 :(得分:2)

对于您的用例,我建议创建一个REST API,它将作为移动应用程序的后端服务。

没有什么理由,您不应该使用移动应用程序直接连接到后端数据库。

安全风险

  • 要求公开访问数据库,这是一个很高的安全风险。
  • 存储移动应用程序内的数据库访问凭据存在另一个安全风险。

性能

  • 直接与数据库通信可能会导致数据传输方面的性能问题,如果您有后端服务,则可以根据查询从不同来源合并后最佳地发送和接收批量数据。
  • 还可以通过API或后端服务获得服务器端缓存的好处。

通过API实现数据的通用视图,您可以连接到多个数据库并相应地检索数据,还可以在API中处理身份验证和授权。

下图说明了在AWS中使用无服务器技术堆栈(API Gateway& Lambda)构建可连接到多个后端数据库的API的架构。

Serverless Architecture Solution

几点要强调

  • 您可以根据业务逻辑的复杂性决定使用单个Lambda或多个Lambda函数。
  • 建议将所有Lambda放在VPC中,然后与远程数据中心建立VPN连接,以便不需要公开公开数据库访问。

答案 1 :(得分:2)

从那里开始:

  

所以基本上你需要构建一个移动应用程序,这需要   从不同的数据库中检索数据   数据中心用于读写

最便宜的方法是允许应用直接连接到这些数据库,因此您根本不需要额外的基础设施。缺点:安全性(您必须在mob。客户端上存储数据库凭据)并且不可能实现集中式缓存。

选项2:修改您的应用以使用位于AWS的中介,然后再连接到缓存和原始数据库。也许API Gateway可能会派上用场。如果你需要中介真的很快,我建议不要使用lambda而是使用自动缩放的ec2。需要一些金钱和时间。

选项2.5:除了选项2,您还可以将DB从站作为只读副本添加到您的AWS账户。更快但更贵。

选项3:将数据库移至AWS并在旧位置保留只读副本。从商业角度来看可能是不可能的。

选项4:在ec2上设置原始DB和DB之间的主 - 主复制(RDS不允许主 - 主afaik)。缺点:我不确定稳定性。

不要忘记在传输过程中加密您的数据库流量,默认情况下它不受SSL保护。