WebServer和数据库服务器托管在Amazon EC2的单独实例上

时间:2012-12-21 10:42:58

标签: amazon-web-services amazon-ec2

我计划运行一个网络应用程序,并期望有大约100到200个用户的流量。

目前我在亚马逊上设置了单个小型实例。该实例包括所有内容 - Web服务器(Apache),数据库服务器(MySQL)和IMAP服务器(Dovcot)。我正在考虑将数据库服务器移出此实例并为其创建单独的实例。现在我的问题是 -

  • 在我的网络服务器和数据库服务器之间进行通信时,我是否会遇到延迟(两者都托管在亚马逊上的不同实例上)
  • 如果是,那么克服这个问题的标准方法是什么? (或者我是否需要设置虚拟私有云?)

3 个答案:

答案 0 :(得分:6)

如果您希望扩展您的体系结构,则应将Web服务器与数据库服务器分开。

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

  • 您可以添加小型(甚至微型)实例来处理load balancer后面的更多Web请求,而无需复制必须具有数据库的实例
  • 您可以为您的网络服务器添加auto-scale组,根据使用量负载自动扩展您的网络服务器层
  • 您可以扩展数据库实例,获得更多内存,获得更好的缓存命中
  • 您可以在网络服务器和数据库之间添加Elastic Cache
  • 您可以使用Amazon RDS作为托管数据库服务,根本不需要数据库实例(您只需为RDS中数据库的实际使用付费)

您可以获得的另一个好处是可以提高数据库的安全性。如果您的数据库位于单独的实例上,则可以阻止从Internet访问它。您可以使用仅允许来自Web服务器的sql连接而不允许来自Internet的http连接的security group

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

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

答案 1 :(得分:3)

  

我的网络服务器和数据库服务器之间的通信是否会出现延迟(两者都托管在亚马逊上的不同实例上)

是的,但与分离角色所获得的好处相比,这是相当微不足道的。

  

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

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

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

答案 2 :(得分:3)

当然,在不同的机器之间进行通信时会有延迟。如果它们都处于相同的可用区域,则它将非常低,通常是您对同一LAN上的两台服务器的期望。

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

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

最后,考虑使用Amazon的RDB(关系数据库服务)而不是MySql数据库的专用EC2实例。成本大致相同,亚马逊负责管理。