【问题标题】:Cloud Architecture云架构
【发布时间】:2012-07-17 00:46:48
【问题描述】:

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

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

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

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

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

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

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

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

感谢您的宝贵时间!

更新: 将问题移至此处:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 让我看看我是否理解正确。您的应用程序服务器是一个 EC2 实例。而且您的数据库也是 EC2 实例,但属于集群实例类型。在这些实例中,您有自己的自定义代码来保持每个集群实例中的所有数据同步,使用 k-safe 复制。
    • 抱歉,我的谷歌搜索并没有提供太多关于 k 安全复制的信息。所以我的评论可能有点不对...
    • 我在这个论坛上的技术深度可能不够。在我们的例子中,我们有四个“大型”EC2 实例。一个是应用服务器,有 Apache/Tomcat,另外三个是数据库服务器。数据库分布在其中三个中,因此它们构成了一个数据库集群。在设置数据库时,有一个设置是(a)在每台机器(“节点”)上完全复制数据,或者(b)在机器(“节点”)之间分布数据。这三个可以缩放到 N。谷歌搜索我看到 k-safety 是一个 Vertica 术语,参见en.wikipedia.org/wiki/…
    • 感谢您的更新。事情现在清楚多了。再次感谢您的更新。如果我对此有误,请纠正我,但是:在每台机器(“节点”)上复制数据与在机器(“节点”)之间分发数据的选项......这是 AWS-EC2 提供给您的选项?或者这是您在 EC2 上运行的数据库软件给您的选项(我猜您正在运行 Vertica?)?我认为是后者,但想知道在翻阅亚马逊的文档和用户选项时是否遗漏了什么。保重,周末愉快!
    • K-safe 与独立复制是 Vertica 的一个选项。我看到 EC2 MySQL 也提供了可扩展性和复制功能 (aws.amazon.com/articles/1663),这篇 SO 帖子推荐了 Amazon RDS (stackoverflow.com/questions/2418659/…),它允许扩展 EC2 的 MySQL 风格。
    【解决方案2】:

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

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

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

    【讨论】:

    • 哇...谢谢。我认为 RDS 是答案,但听起来它仍然有一些缺点。我正在再次阅读 RDS 页面以找到它说它是单个实例的位置。是否暗示在这里?:“可扩展 – 通过简单的 API 调用或几次单击 AWS 管理控制台,您可以扩展数据库可用的计算和存储资源,以满足您的业务需求和应用程序负载。对于 MySQL 数据库引擎,您还可以将一个或多个只读副本与您的数据库实例部署相关联,..."
    • "...使您能够扩展单个数据库实例的容量以应对读取繁重的数据库工作负载。"我猜更多的“只读副本”与多个数据库的含义并不相同。
    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 2011-09-28
    • 1970-01-01
    • 2011-07-14
    • 2015-08-12
    • 1970-01-01
    • 2019-07-15
    • 2020-05-22
    相关资源
    最近更新 更多