1

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

从我可以从 AWS、Rackspace 等文档中收集到的信息:

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

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

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

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

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

对不起这么简单的问题。我猜文档并没有说得很清楚,因为它太简单了,或者我只是找不到正确的文档/页面。

感谢您的时间!

更新:将问题移至此处:

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

4

2 回答 2

1

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

于 2012-07-18T03:01:25.007 回答
1

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

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

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

于 2012-08-07T12:57:04.547 回答