云架构

时间:2012-07-18 02:54:02

标签: database web-services architecture amazon-web-services cloud

我正在研究云服务来托管电子商务网站。我正在尝试理解他们如何扩展事物的一些基础知识。

我可以从AWS,Rackspace等文档中收集:

设置1: 您可以获取Web服务器的实例(AWS - EC2,Rackspace - 云服务器)。然后,您可以扩展该实例以获得更多资源或制作该实例的副本以处理更多流量。您似乎可以在这些实例的本地安装数据库。

设置2: 您可以拥有Web服务器的实例(AWS - EC2,Rackspace - Cloud Server)。您还可以拥有数据库实例(AWS - RDS,Rackspace - 云数据库)。因此,Web服务器实例可以通过单个访问点与数据库实例进行通信。

当我使用术语实例时,我只想到可以通过单个访问点访问的副本,并且数据在后台的每个副本之间同步。这可能是错误的心理形象,但这是我现在最好的。

我可以理解设置2如何可扩展。 Webserver实例根本不会改变,因为它只是源代码。因此,所有http请求都会分发到不同的Web服务器实例并进行负载平衡。并且数据查询具有单个访问点,然后分发到不同的数据库实例并进行负载平衡,并且所有数据写入在对应用程序/ Web服务器实例透明的所有数据库实例之间同步。

但是对于设置1,在每个Web服务器实例中本地存在数据库设置,如何在其他Web服务器实例本地的其他数据库之间同步数据?由于每个网络服务器的实例无法相互通信,您如何启动多个实例来扩展应用程序?此设置主要用于具有静态内容的站点,其中数据库内的数据不会更改吗?因此,对于将订单写入数据库的电子商务网站,这种架构是不可行的?或者是否有某种方法可以让每个Web服务器实例将其本地数据库更新为某个主副本?

抱歉这么简单的问题。我猜测文档并没有明确说明,因为它太简单了,或者我只是无法找到正确的文档/页面。

感谢您的时间!

更新: 将问题转到此处:

https://webmasters.stackexchange.com/questions/32273/cloud-architecture

2 个答案:

答案 0 :(得分:1)

我们有一台服务器设置为应用程序服务器,我们的数据库安装在同一可用区域中AWS上的一组独立机器上(最初是三个但可扩展)。我们设置它的方式是使用“k-safe”复制。这是可扩展的,因为数据在机器上分布,并且重复,使得一台机器可以完全消失并且站点继续运行。这也允许分发查询 (另一种配置选项是复制每台数据库计算机上的所有数据)

答案 1 :(得分:1)

关于设置#1,你是对的,如果你在每台机器上使用负载平衡复制整个数据库,你需要担心在节点之间复制数据,这将是复杂的并且会对性能产生影响,或者您需要牺牲一致性,或者将所有内容同步到一个大型数据库,然后您就会失去群集的效果。另外请记住,当吞吐量增加时,添加额外的服务器是一种手动操作,可能需要数小时,因此您无法按需响应吞吐量。

与设置#2相关,此处扩展应用程序非常简单,云提供商会自动为您执行此操作,但数据库将成为瓶颈,如您所知。如果云提供商扩展您的应用程序并且所有这些应用程序实例与同一数据库通信,您将获得更多的应用程序吞吐量,但数据库将很快耗尽容量。有人建议通过在云上建立一个MySQL集群来解决这个问题,这是一个有效的选择,但请记住,如果吞吐量突然增加,你将需要重新配置复杂的MySQL集群,你将无法自动扩展为您的数据。

另一种方法是将云数据库作为服务,AmazonRackSpace云上有几个选项。您提到RDS但它有同样的问题,因为最终它只限于一个没有自动缩放的数据库实例。另一个MySQL数据库服务是Xeround,它将负载分散到多个数据库节点上,并且有一个负载平衡器可以管理这些节点之间的连接并自动同步分区之间的数据。有一个访问点和一个循环DNS,可将请求发送到数千个数据库节点。因此,这可能满足您对单个访问点和数据库可伸缩性的需求,而无需每次进行扩展操作时都需要设置集群或更改集群。