Amazon web services Web服务器和数据库服务器分别托管在AmazonEC2的不同实例上

Amazon web services Web服务器和数据库服务器分别托管在AmazonEC2的不同实例上,amazon-web-services,amazon-ec2,Amazon Web Services,Amazon Ec2,我计划运行一个web应用程序,预计流量约为100到200个用户 目前我已经在Amazon上建立了一个小实例。这个实例由所有组件组成——Web服务器(Apache)、数据库服务器(MySQL)和IMAP服务器(Dovcot)。我正在考虑将我的数据库服务器移出这个实例,并为它创建一个单独的实例。现在我的问题是—— 我的Web服务器和数据库服务器(都托管在Amazon上的不同实例上)之间的通信是否会出现延迟 如果是,克服这一问题的标准方法是什么?(或者我需要设置虚拟私有云吗?) 我的Web服务器和

我计划运行一个web应用程序,预计流量约为100到200个用户

目前我已经在Amazon上建立了一个小实例。这个实例由所有组件组成——Web服务器(Apache)、数据库服务器(MySQL)和IMAP服务器(Dovcot)。我正在考虑将我的数据库服务器移出这个实例,并为它创建一个单独的实例。现在我的问题是——

  • 我的Web服务器和数据库服务器(都托管在Amazon上的不同实例上)之间的通信是否会出现延迟
  • 如果是,克服这一问题的标准方法是什么?(或者我需要设置虚拟私有云吗?)
我的Web服务器和数据库服务器(都托管在Amazon上的不同实例上)之间的通信是否会出现延迟

是的,但与角色分离带来的好处相比,这是微不足道的

如果是,克服这一问题的标准方法是什么?(或者我需要设置虚拟私有云吗?)

VPC增加了资源的安全性和易管理性,不会影响性能。对于SQL数据库,一两毫秒的延迟通常不会有问题。写入是事务性的,因此在数据100%完成并提交之前,其他请求无法访问数据。I/O吞吐量和可用性更受关注,这就是为什么分离数据库和应用程序很重要的原因


我强烈建议您看看RDS,它是AWS版本的托管MySQL、Oracle或MS SQL Server数据库服务器。这将允许您轻松设置和管理数据库,包括跨可用性区域复制和自动备份。我还写了一篇与你的问题相当相关的文章。

当然,在不同的机器之间进行通信时会有延迟。如果它们都在同一可用性区域中,则可用性将极低,通常是同一局域网上两台服务器的预期值

如果它们位于同一地区的不同可用性区域,预计延迟约为2-3ms(根据2012年AWS re:Invent会议上提供的信息)。这仍然很低

使用VPC不会影响延迟。这不会在实例之间提供不同的物理连接,只是虚拟隔离


最后,考虑使用Amazon的RDB(关系数据库服务)代替MySQL数据库的专用EC2实例。成本大致相同,Amazon负责管理。

如果您希望您的体系结构能够扩展,您应该将web服务器与数据库服务器分开

您将支付的低延迟(即使在多个可用性区域之间约1-2ms)将为您提供更好的性能,因为您可以单独扩展每一层

  • 您可以添加小型(甚至是微型)实例,以在后面处理更多的web请求,而无需复制也必须有数据库的实例
  • 您可以为web服务器添加组,该组将根据使用负载自动扩展web服务器层
  • 您可以扩展DB实例,以获得更多内存,从而获得更好的缓存命中率
  • 您可以在web服务器和数据库之间添加
  • 您可以将其用作托管数据库服务,这样就完全不需要数据库实例(您只需为RDS中数据库的实际使用付费)
您可以获得的另一个好处是提高数据库的安全性。如果数据库位于单独的实例上,则可以阻止从internet访问它。您可以使用只允许从web服务器进行sql连接而不允许从internet进行http连接的

此配置可以在常规EC2环境中运行,无需使用VPC。您当然可以为更具控制力的环境添加VPC,而无需额外成本,也不会增加太多复杂性


简而言之,为了实现可扩展性和高可用性,您应该将层(web和DB)分开。您可能也会发现自己节省了成本。

我也会赞同在数据库中使用RDS的想法。实际上,除非您有非常具体的MySQL需求(群集、多主复制等),并且您希望在AWS中建立数据库,所以您首先应该考虑RDS.RDS不提供超级权限。你不能编辑my.cnf,这很重要。