我计划运行一个网络应用程序,并期望有大约100到200个用户的流量。
目前我在亚马逊上设置了单个小型实例。该实例包括所有内容 - Web服务器(Apache),数据库服务器(MySQL)和IMAP服务器(Dovcot)。我正在考虑将数据库服务器移出此实例并为其创建单独的实例。现在我的问题是 -
答案 0 :(得分:6)
如果您希望扩展您的体系结构,则应将Web服务器与数据库服务器分开。
您将支付的低延迟(即使在多个可用区之间约为1-2毫秒)也会为您提供更好的性能,因为您可以单独扩展每个层。
您可以获得的另一个好处是可以提高数据库的安全性。如果您的数据库位于单独的实例上,则可以阻止从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实例。成本大致相同,亚马逊负责管理。