Database 云架构

Database 云架构,database,web-services,architecture,amazon-web-services,cloud,Database,Web Services,Architecture,Amazon Web Services,Cloud,我正在研究云服务来托管一个电子商务站点。我试图了解一些基本知识,了解它们是如何进行缩放的 从AWS、Rackspace等文档中我可以收集到: 设置1: 您可以获得一个Web服务器实例(AWS-EC2,Rackspace-Cloud服务器)。然后,您可以增加该实例以拥有更多资源,或者制作该实例的副本以处理更多流量。看起来您可以在这些实例上安装本地数据库 设置2: 您可以启动Web服务器实例(AWS-EC2,Rackspace-Cloud Server)。您还可以启动数据库实例(AWS-RDS、Ra

我正在研究云服务来托管一个电子商务站点。我试图了解一些基本知识,了解它们是如何进行缩放的

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

设置1: 您可以获得一个Web服务器实例(AWS-EC2,Rackspace-Cloud服务器)。然后,您可以增加该实例以拥有更多资源,或者制作该实例的副本以处理更多流量。看起来您可以在这些实例上安装本地数据库

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

当我使用术语“实例”时,我想到的只是可以通过单个访问点访问的副本,并且数据在后台跨每个副本进行同步。这可能是错误的心理图像,但这是我现在得到的最好的

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

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

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

谢谢你抽出时间

更新: 将问题移至此处:


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

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

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


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

让我看看我是否正确理解您的意思。您的应用服务器是一个EC2实例。而且您的数据库也是EC2实例,但属于集群实例类型。在这些实例中,您有自己的自定义代码,使用k-safe复制保持每个集群实例中的所有数据同步。对不起,我在谷歌上搜索到的关于k-safe复制的内容不多。所以我的评论可能有点偏离……在这个论坛上,我可能超出了我的技术深度。在本例中,我们有四个“大型”EC2实例。一个是应用服务器,有Apache/Tomcat,另外三个是数据库服务器。数据库分布在其中三个数据库上,因此它们构成了一个数据库集群。设置数据库时,有一个设置(a)在每台机器(“节点”)上完全复制数据,或(b)在机器(“节点”)之间分发数据。这三个可以扩展到N。谷歌我看到k-safety是一个Vertica术语,请参阅感谢更新。现在情况清楚多了。再次感谢您的更新