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



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

目前,我已经在Amazon上设置了单个小实例。此实例由所有内容组成 - Web服务器(Apache),数据库服务器(MySQL)和IMAP服务器(DovCot)。我正在考虑将数据库服务器从此实例中移出,并为其创建一个单独的实例。现在我的问题是 -

  • 我在网络服务器和数据库服务器之间进行通信(均在亚马逊上的单独实例上托管)
  • 如果是,克服这一点的标准方法是什么?(或我需要设置虚拟私有云?)

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

您将支付的低潜伏期(即使在多个可用性区之间〜1-2ms),将为您提供更好的性能,因为您可以分别缩放每个层。

  • 您可以添加小(甚至是微型)实例来处理负载平衡器后面的更多Web请求,而无需复制一个必须具有数据库的实例
  • 您可以为您的Web服务器添加自动尺度组,该组将根据使用加载自动扩展您的Web服务器层
  • 您可以扩展您的DB实例,获得更多内存,获得更好的缓存命中
  • 您可以在Web服务器和数据库之间添加弹性缓存
  • 您可以将Amazon RDS用作托管数据库服务,该服务完全消除了数据库实例的需求(您只需为RDS中数据库的实际使用付费)

您可以获得的另一个好处是数据库上的安全性更好。如果您的数据库在单独的实例上,则可以防止从Internet访问它。您可以使用一个安全组,该组仅允许从Web服务器而不允许从Internet的HTTP连接进行SQL连接。

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

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

当然,在单独的计算机之间通信时会有延迟。如果它们都位于相同的可用性区域,它将非常低,通常是您对同一LAN上两个服务器的期望。

如果它们处于同一地区的不同可用性区域,则期望按2-3ms的订单延迟(2012年AWS RE:INVENT会议上提供的信息)。那仍然很低。

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

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

我的Web服务器和数据库服务器之间的通信(均在Amazon上的单独实例上托管)

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

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

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

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

最新更新