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

piy*_*ush 2 amazon-ec2 amazon-web-services

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

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

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

Guy*_*Guy 6

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

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

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

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

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

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


Cha*_*lke 5

当然,不同机器之间通信时会存在延迟。如果它们都位于同一可用区,则可用性会非常低,通常是同一 LAN 上的两台服务器所期望的。

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

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

最后,考虑使用 Amazon 的 RDB(关系数据库服务)而不是 MySql 数据库的专用 EC2 实例。成本差不多,亚马逊会打理家务。