我计划运行一个 Web 应用程序,预计流量约为 100 到 200 个用户。
目前我已经在亚马逊上设置了单个小型实例。该实例由所有内容组成——Web 服务器(Apache)、数据库服务器(MySQL)和 IMAP 服务器(Dovcot)。我正在考虑将我的数据库服务器移出这个实例并为其创建一个单独的实例。现在我的问题是——</p>
- 我的网络服务器和数据库服务器之间的通信是否会出现延迟(两者都托管在亚马逊上的不同实例上)
- 如果是,克服这个问题的标准方法是什么?(或者我需要设置一个虚拟私有云吗?)
我计划运行一个 Web 应用程序,预计流量约为 100 到 200 个用户。
目前我已经在亚马逊上设置了单个小型实例。该实例由所有内容组成——Web 服务器(Apache)、数据库服务器(MySQL)和 IMAP 服务器(Dovcot)。我正在考虑将我的数据库服务器移出这个实例并为其创建一个单独的实例。现在我的问题是——</p>
如果您希望您的架构可扩展,您应该将 Web 服务器与数据库服务器分开。
您将支付的低延迟(即使在多个可用区之间也约为 1-2 毫秒)将为您提供更好的性能,因为您可以单独扩展每个层。
您可以获得的另一个好处是您的数据库具有更好的安全性。如果您的数据库位于单独的实例上,您可以阻止从 Internet 访问它。您可以使用只允许来自您的 Web 服务器的 sql 连接而不是来自 Internet 的 http 连接的安全组。
此配置可以在常规 EC2 环境中运行,无需使用 VPC。您当然可以添加 VPC 以获得更好的控制环境,而无需额外成本也不会增加太多复杂性。
简而言之,为了可扩展性和高可用性,您应该分离您的层(Web 和 DB)。您可能还会发现自己也节省了成本。
当然,在不同机器之间进行通信时会有延迟。如果它们都在同一个可用区中,它将非常低,通常是您对同一 LAN 上的两台服务器所期望的。
如果它们位于同一区域的不同可用区,预计延迟大约为 2-3 毫秒(根据 2012 年 AWS re:Invent 会议上提供的信息)。那还是很低的。
使用 VPC 不会影响延迟。这不会为您提供实例之间的不同物理连接,只是虚拟隔离。
最后,考虑为您的 MySql 数据库使用 Amazon 的 RDB(关系数据库服务)而不是专用的 EC2 实例。费用差不多,亚马逊负责家务。
我的网络服务器和数据库服务器之间的通信是否会出现延迟(两者都托管在亚马逊上的不同实例上)
是的,但与分离角色所获得的好处相比,它是微不足道的。
如果是,克服这个问题的标准方法是什么?(或者我需要设置一个虚拟私有云吗?)
VPC 增加了资源的安全性和易于管理,它不会影响性能。对于 SQL 数据库,一两毫秒的延迟通常不是问题。写入是事务性的,因此在 100% 完成并提交之前,其他请求无法访问数据。I/O 吞吐量和可用性更受关注,这就是分离数据库和应用程序很重要的原因。
我强烈建议您查看 RDS,它是 AWS 的托管 MySQL、Oracle 或 MS SQL Server 数据库服务器版本。这将允许您轻松设置和管理数据库,包括跨可用区复制和自动备份。我昨天还写了一篇与您的问题相当相关的博客文章。