2012-12-21 60 views
1

我打算运行一个Web应用程序,预计大约有100到200个用户的流量。在Amazon EC2的单独实例上托管的Web服务器和数据库服务器

目前我在Amazon上设置了单个Small实例。这个实例由一切组成 - Webserver(Apache),数据库服务器(MySQL)和IMAP服务器(Dovcot)。我正在考虑将数据库服务器移出此实例并为其创建单独的实例。现在的问题是 -

  • 我能得到延迟,同时我的网络服务器和数据库服务器之间的通信(两者在不同的情况下,托管在亚马逊)
  • 如果是,什么是克服这种标准呢? (或者我需要建立一个虚拟私有云?)

回答

3

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

如果它们位于同一地区的不同可用区域,则预计等待时间为2-3ms(2012年AWS re:Invent会议提供的每个信息)。这仍然很低。

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

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

+0

RDS不提供SUPER权限。你不能编辑很重要的my.cnf。 – user3705478

3

难道我得到延迟,同时我的Web服务器和数据库服务器(在不同的情况下,这两个托管在亚马逊)

之间的通信是,但与分离角色所带来的好处相比,这并不重要。

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

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

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

+1

我会回应关于为您的数据库使用RDS的想法。真的,除非你有非常特定的MySQL需求(集群,多主复制等),并且你想在AWS中设置数据库,否则首先应该考虑RDS。 –

6

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

您将支付的低延迟(即使在多个可用区域之间也需要1-2ms),因为您可以分别缩放每个层级,因此可以获得更好的性能。

  • 您可以添加小(甚至微)实例来处理load balancer背后更多的网络请求,而不需要重复的是必须有一个数据库,以及一个实例
  • 您可以添加auto-scale组为您的网站服务器会自动调整你的Web服务器层,根据使用负荷
  • 你可以扩展你的数据库实例,有更多的内存,得到一个更好的缓存命中
  • 您可以将Web服务器和数据库之间添加Elastic Cache
  • 可以使用Amazon RDS作为管理的数据库服务,它不需要用一个实例在所有数据库(你只需要支付在RDS数据库的实际使用情况)

的另一个好处是,你可以有数据库上的安全性更好。如果您的数据库位于单独的实例上,则可以阻止从Internet访问它。你可以使用一个security group,它只允许来自你的网络服务器的sql连接,而不允许来自因特网的http连接。

这种配置可以在普通EC2环境中运行,无需VPC的使用。您当然可以将VPC添加到更多的控制环境中,而无需额外的成本和更多的复杂性。

总之,对于可扩展性和高可用性,您应该分开的层(网络和DB)。你也可能会发现自己也可以节省成本。

相关问题