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

Mysql 托管在AWS上的应用程序,用于访问多个外部数据库';s,mysql,database,amazon-web-services,data-warehouse,amazon-rds,Mysql,Database,Amazon Web Services,Data Warehouse,Amazon Rds,这个问题不仅仅与应用程序开发有关,而是从架构的角度来看的。假设一个应用程序必须托管在AWS上,这将需要来自多个外部第三方持有的数据库的通信(AWS上不是强制性的,可能是他们自己的数据中心或托管地)-可能一个客户端将使用MySQL、另一个MSSQL或Oracle等 因此,这些外部数据库中保存的数据可能会频繁更改,并且应用程序应始终检索更新的数据。我可以想到的一种方法是使用另一个RDBMS数据库(来自我们这边),专门存储来自外部数据库的所有数据,并保持数据库始终同步。但我不确定这是否是实现这一目标的

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

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


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

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

有几个原因,你不应该使用你的移动应用程序直接连接到后端数据库

安全风险

  • 需要使数据库可公开访问,这是一种高安全风险
  • 另一个安全风险是在移动应用程序中存储数据库访问凭据
演出

  • 直接与数据库通信可能会导致数据传输方面的性能问题,如果您有后端服务,它可以在根据查询组合来自不同来源的数据后,以最佳方式发送和接收批数据
  • 还可以通过使用API或后端服务获得服务器端缓存的好处
通过API拥有数据的通用视图,您可以连接到多个数据库并相应地检索数据,还可以在API中处理身份验证和授权

下图说明了在AWS中使用无服务器技术堆栈(API网关和Lambda)构建API的体系结构,该API可以连接到多个后端数据库

需要强调的几点

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

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

有几个原因,你不应该使用你的移动应用程序直接连接到后端数据库

安全风险

  • 需要使数据库可公开访问,这是一种高安全风险
  • 另一个安全风险是在移动应用程序中存储数据库访问凭据
演出

  • 直接与数据库通信可能会导致数据传输方面的性能问题,如果您有后端服务,它可以在根据查询组合来自不同来源的数据后,以最佳方式发送和接收批数据
  • 还可以通过使用API或后端服务获得服务器端缓存的好处
通过API拥有数据的通用视图,您可以连接到多个数据库并相应地检索数据,还可以在API中处理身份验证和授权

下图说明了在AWS中使用无服务器技术堆栈(API网关和Lambda)构建API的体系结构,该API可以连接到多个后端数据库

需要强调的几点

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


      因此,基本上您需要构建一个移动应用程序,这需要 从位于不同位置的不同数据库检索数据 读写数据中心

      最便宜的方法是让应用程序直接连接到这些数据库,这样你就根本不需要额外的基础设施。缺点:安全性(必须在mob.client上存储DB凭据)和无法实现集中缓存

      选项2:修改应用程序以使用位于AWS的中间层,然后连接到缓存和原始DBs。也许API网关会派上用场。如果您需要中间层非常快,我建议不要使用lambda,而是使用具有自动缩放功能的ec2。需要一些钱和时间

      选项2.5:除了选项2之外,您还可以将DB从属服务器作为读取副本添加到AWS帐户。更快但更贵

      选项3:将DBs移动到AWS,并将读取副本保留在旧位置。从商业角度来看,这可能是不可能的

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

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

      从这里开始:


      因此,基本上您需要构建一个移动应用程序,这需要 从位于不同位置的不同数据库检索数据 读写数据中心

      最便宜的方法是让应用程序直接连接到这些数据库,这样你就根本不需要额外的基础设施。缺点:安全性(必须在mob.client上存储DB凭据)和无法实现集中缓存