多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 使用 Amazon 服务以 100 美元的价格构建无限可扩展的基础架构 > 原文: [http://highscalability.com/blog/2007/7/30/build-an-infinitely-scalable-infrastructure-for-100-using-am.html](http://highscalability.com/blog/2007/7/30/build-an-infinitely-scalable-infrastructure-for-100-using-am.html) 您是否真的可以使用亚马逊的存储,网格和排队服务平台以不到 100 美元的价格创建无限扩展的基础架构? 看起来如此,至少对于正确的应用而言。 亚马逊将重点介绍了使用核心外部服务来构建下一代网站的“自带滚动式”与“按点连接”方法的未来之战。 他们的论点很强烈。 使用 Amazon 的平台,您可以快速构建基础架构,否则这些基础架构将需要花费很长的时间才能实现,要创造大量的资金,并且需要大量的人来实施和维护。 但是,亚马逊不提供 SLA,因此您可以将皇冠上的宝石与您真正信任吗? Facebook 最近以一套更全面的服务超越了亚马逊的愿景。 未来的战斗正在进行中。 网站:http://aws.amazon.com/ ## 信息来源 * [幻灯片:构建高度可扩展的 Web 应用程序](http://www.slideshare.net/iwmw/building-highly-scalable-web-applications)* [播客:技术:亚马逊网络服务](http://www.itconversations.com/shows/detail1728.html)* [亚马逊服务主页](http://aws.amazon.com/)。 ## 平台 * Amazon ECS(电子商务服务)* Amazon S3(简单存储服务)* Amazon SQS(简单排队服务)* Amazon EC2(网格服务)* 亚马逊网络搜索服务* 亚马逊弹性付款服务(Amazon FPS)* REST and SOAP Service Interfaces ## 里面有什么? ### 为什么要使用外部服务? * Amazon 的服务取代了应用程序堆栈中的盒子,电线和磁盘驱动器。* 亚马逊花了十年时间和超过 10 亿美元开发了世界一流的 Web 服务,每天都有数百万的客户使用。 也许您可以利用自己的网站体验?* 关注客户。 如果 Web 开发不是要提供客户价值,则为 70%。 这是关于建立和管理数据中心的。 您最好将精力花在客户身上,而不是浪费精力。* 更快上市。 缩放很难。 当您专注于增加用户价值时,让其他人担心 。* 针对峰值负载进行设计非常昂贵。 因此,将固定成本变成可变成本。 假设您要处理来自 slashdot 或 digg 的高流量,或者您有很高的季节性需求,那么拥有适当的基础结构来处理这些负载是一笔高固定成本。 您可以在其他地方更好地使用这笔钱。 创建一个可以自动和 临时扩展资源以应对高峰需求的基础架构是很有意义的。* 高可靠性和可用性。 专用服务可能比您可以创建的服务更可靠。 它说“可能”,因为亚马逊未提供 SLA,因此您将无法获得任何保证。 这个想法是,亚马逊足够便宜且可靠,因此很少有故障是可以接受的。 此外,SLA 通常会在出现问题时退还一些钱,它们 并不能真正保证任何事情。* 这是便宜的 CDN。 亚马逊的存储网络可以服务于相对便宜的内容交付网络。 在 [减少您的网站的带宽使用情况](http://www.codinghorror.com/blog/archives/000807.html)中讨论了此选项。 这个想法是,仅经常下载一个简单的 [favicon.ico](http://www.hanselman.com/blog/FavIconicoCanBeABandwidthHog.aspx) 文件就可以使用很大一部分带宽。 使用$ 3 /月的 S3 将 90%的带宽卸载到外部主机是一个不错的选择。 但是,没有 SLA 的 S3 不能被认为是正确的 CDN。 ### 亚马逊 ECS(电子商务服务) * 该服务公开了 Amazon 的产品数据和电子商务功能: 有关所有 Amazon.com 产品的详细产品信息,访问产品图像,与产品相关的所有客户评论等。* 亚马逊产品定价过高。* 我发现这项服务令人失望。 如果您想在 Amazon 之上建立商店,这似乎很棒,但是我没有找到将自己的产品添加到商店的方法,因此我认为它通常没有用。 ### Amazon S3(简单存储服务) * 该服务将数据存储在 Amazon 的存储网络中。* 每个 GPB 每月$ .15 的存储空间* $ .01(1000 至 10000 个请求)。* 每 GB 数据传输$ .10-$ .17。* 服务是:快速,可靠,可扩展,冗余,分散。* 您可以具有每个对象的 URL。 这意味着您可以直接使用 URL 引用图像或其他文件,因此可以在网页中使用。* 典型用途:CDN 和备份存储。* 存储分配到多个位置,因此您可以进行一定程度的地理分布。 ### Amazon SQS(简单排队服务) * 此服务提供用于存储消息的 Internet 规模排队服务。 分布式参与者将工作放在队列中,而将工作从队列中移出。* 每 1000 条邮件$ .10。* 每 GB 数据传输$ .10-$ .18。* 该服务是:可扩展,弹性,可靠,简单,安全。* 典型用途:集中式工作队列。 将作业放在队列中,不同的参与者可以弹出队列的工作并在获得 CPU 时间时对其进行处理。* 截至 2007 年,预期的邮件延迟为 2-10 秒。 这对于许多应用程序来说是可怕的,对于许多其他应用程序来说却并不坏。* 可扩展性的一部分。 有任何数量的生产者和消费者。 您不用担心。* Queues are spread across multiple machines and multiple data centers. ### Amazon EC2(网格服务) * 该服务可在云中提供可调整大小的计算能力。 它旨在使开发人员更容易进行 Web 规模的计算。* 基本上,您可以为 Linux 发行版创建 Xen 映像,然后将其上传到其“弹性计算云”中。 然后,您可以使用 API​​启动任意多个实例。* 典型用途:转码,音频工作,负载测试。* 对服务器的根级别访问以及对计算机的完全控制。* 可以按分钟放大和缩小。* 对于实时处理,一个批评是较慢的 CPU(1.75 Ghz Xeon)。 如果您的应用程序以线性比例编写,那么这可能不会成为问题。* EC2 实例不是持久性的,因此您无法在其中存储数据库。 您有一些本地存储,但是当实例消失时,它就会消失。* 启动和停止图像需要花费几分钟,因此并不是真正需要的图像。* You can add anything you want to an image. If you want a database you can add it in. ### GigaVox 媒体示例网络规模架构 * 您可以开始了解 Amazon 的服务如何协同工作。 假设您有大量的 MP2,希望将其转码为 MP3。 您将原始媒体存储到 S3 中,将工作请求放入 SQS 中,并使实例在 EC2 中运行以处理队列并执行转码,然后将结果存储回 S3 中。 这正是 GigaVox 所做的。* GigaVox 是一家播客公司。 -他们获取原始录音并将它们说出来的内容从 MP2 转换为 MP3。 还执行许多其他代码转换。 -然后,根据制作节目,将这些大块媒体组装在一起成为一种交付格式。 例如,旧的播客可以每晚更新最新的广告。 -大规模执行此操作将需要大量昂贵的资源。* 使用 Amazon 的服务,GigaVox 可以获得地理上的冗余和故障转移,从而获得相对便宜的 CPU,带宽和存储费用, 和带宽成本。 您没有盒子或电线。 无需管理数据中心。 而且您可以以较小的固定成本进行增长。* 消息在队列上带有时间戳。 如果消息在队列中等待的时间太长,则它们可以启动更多 EC2 映像。 您可以平衡成本。 您还可以在基于客户的优先级机制中分层。* 他们每个实例都有自己的消息队列,用于命令和控制。* 出于安全原因,他们通过 ftp 将文件上传到实例,而不是通过 S3。* 亚马逊云的所有带宽都是免费的。 这是使服务协同工作的重要业务考虑因素。* 另一组实例和队列负责组合交付的媒体。* 使 GigaVox 以较低的启动成本为客户提供价值。 ## 得到教训 * 建立或购买始终是一个艰难的决定。 如果某项服务无法正常工作,那么您可能会失去客户,并且您无能为力,其他人还会向其他人发送紧急电子邮件。 这是一种可怕的感觉。 但是,如果确实可行,那么您可能会领先于游戏。 如何选择? 那会告诉:-) * 构建虚拟化层,以便您可以在其他提供商可用时切换到该提供商,或者可以用自己的服务替换它。 如果他们厌倦了提供服务或性能下降,这可以减少您对亚马逊的依赖。 * 作为一家使用 Amazon 服务的初创公司,这并不是什么大风险,因为您已经处于危险境地。 极低的启动成本可以缓解任何风险,而资金始终是初创企业的问题。 * 在许多情况下,购买自己的专用服务器可能仍然是更好的方法,因为您可以获得更多的控制权,更低的延迟,并且相同的硬件可用于多种用途。 * 软件即服务是一个强大而实用的想法。 它改变了您构建软件的方式。 它迫使您围绕界面对软件进行分层。 并且一旦您的软件由接口组成,您将拥有可以轻松更换的松散耦合的组件。 如果您想为客户提供 API,那么您还具有平台 API 的基础。 最高的开发水平将使用您提供给客户的相同 API 来构建服务。 * 松散耦合的,基于消息的体系结构与服务接口相结合,使您可以考虑抽象层的多个层次。 您不必费解,这使您可以释放使用大型行为块来构建应用程序的方式。 * 为异步交互界面设计 UI 带来了一些挑战。 可能需要一段时间才能执行操作,那么您如何与用户交互以进行处理呢? * 我本能地怀疑亚马逊能否交付。 但是,如果您遇到的问题类型正确,则确实可以使用 Amazon 服务廉价地完成很多工作。 ## 也可以看看 * [Flickr](http://highscalability.com/flickr-architecture) 和 [YouTube](http://highscalability.com/youtube-architecture) 也处理服务级别 API。 * [在 Amazon EC2 和 Amazon S3 上运行 Hadoop MapReduce](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=873&categoryID=112) 实用计算最终将成为现实且负担得起。 小公司可以使用 Amazon,Hadoop 和 Hbase 与巨头竞争吗? 实际上,甚至 Yahoo 最近都宣布了对 Hadoop 的支持:<cite>“展望未来,并思考大规模计算的经济如何继续改善,不难想象,在 Hadoop 和基于 Hadoop 的基础架构如此普遍的时代 LAMP(Linux,Apache,MySQL,Perl / PHP / Python)堆栈有助于推动 Web 的先前发展。”</cite> 在此处阅读更多信息: [http://innowave.blogspot.com/2007/08/amazon-ec2-s3-hadoop-open-source.html](http://innowave.blogspot.com/2007/08/amazon-ec2-s3-hadoop-open-source.html) 没有“无限扩展”这样的东西。 完美的可伸缩性意味着,如果您将资源增加一倍,则无论从速度,容量还是所测量的任何方面,都将获得双倍的性能。 实际上,您拥有无限的资源并不能使您的应用程序无限扩展。 这只是意味着您可以忽略一些可伸缩性问题,例如收益递减。 “在 2006 年 4 月开始的将近 7 个小时中,Amazon 的 S3 存储服务只返回了服务不可用的消息。该事件在 2007 年 1 月再次发生,破坏了 Amazon 99.99%的正常运行时间目标。” (摘自 [http://flud.org/blog/2007/04/26/eradicating-service-outages-once-and-for-all/“](<a rel=) >彻底消除服务中断, 它还提出了一种用于*真正*可扩展和不受干扰的系统的替代架构。) 单独使用 Amazon 应用程序如何扩展 500GB MySQL 数据库? 我知道这不一定是您在这里所说的,但是对于大多数 Web 应用程序而言,扩展意味着更多的 Web /应用程序服务器和更多的数据库功能。 我看到在 Amazon 上解决此问题的一种解决方案是每 10 分钟备份一次 MySQL 数据库。 这可能适用于 50mb 的数据库,但适用于 10GB 的数据库,更不用说 50-100GB 的数据库了? 然后,当您的数据库集群出现故障时,您如何向您的用户解释说,您选择使用 Amazon“无限扩展”的最后几个小时丢失了价值数小时的数据? 只是好奇-我会很乐意以某种方式解决这个问题。 这仍然是早期技术-仍然太丰富和太慢。 当平均带宽突破 10mb / s,而每次使用的价格又下降了一个数量级时,我们将面临一场真正的革命。 在此之前,这些服务的市场有限。 本地存储是您要查找的选项,现已可用(截至本周)。 然后,您可以将本地副本备份到 s3。 请记住,您不会为每个备份存储 10GB,而是存储更改增量,因此,实际上增量比您表示的要多得多。 您可以构建按地理位置分布的多集群环境,并且构建涉及轮循(m / m / m-环形拓扑)或 m / s / s 甚至 m / m( m / s / s 和 m / s / su 形拓扑)。 这些技术还处于起步阶段。 由于缺乏云故障转移,目前唯一不可能的情况是服务故障。 在 Amazon 的情况下,使 SOAP 服务终止并不意味着您的服务(必定)终止,而是意味着您无法按需扩展等,并且您不能进行更改,直到 SOAP 服务恢复为止。 由于 s3 复制,目前针对 Amazon 的现有解决方案可能内置 20-40 秒的延迟(s3 的性能可能会有所不同),但是本地存储可以在本地磁盘上排队,然后从那里进行备份 ,减少问题的影响(即使服务崩溃,本地存储也将保持不变)。 希望能有所帮助。 它可以进行架构设计,而这个问题不再是秀场停止。 很明显,您不是财务专家。 当您超越“带宽/存储”比较,进入云计算的总运营成本时,我的分析一直显示高性能站点的总体成本降低了 5-7 倍(这是 Sun Microsystems VS Amazon 上的 A / B ,而且我相信 Sun 是最有效的解决方案,因为它们具有很高的 CPU 密度),而在最坏的情况下,我看到的是 2 比 1 的降低。 第二个问题不受个人开发人员的考虑,但是对于使用基础结构的公司来说,它的主要问题是调配的速度。 云将应用程序的配置从数天,数周或数月转移到数小时,数分钟和数秒。 而且,从本质上讲,它们将为 SaaS 和其他企业技术提供复杂的应用程序(由于成本优势,所谓的“企业云”将兴起)。 IBM,VMWare,XEN,Microsoft,Google 和 Amazon 知道它还没有为“ Enterprise”做好准备,但是它很快就会成熟。 考虑 Forrester 报告( [http://tinyurl.com/6s5qyc)](http://tinyurl.com/6s5qyc),),其中显示: 云计算是否已为企业准备就绪? “还没有,但是这种破坏性的创新正在迅速成熟” 技术的成熟度是一个问题(安全性,可用性等),但是它将得到解决。 并期待*内部*云计算的兴起,这将改变竞争环境,价格将不可避免地下降,随着解决方案的成熟,对价格敏感度较低且有很多意料之外的麻烦的客户将进入市场。