# Feedblendr 架构-使用 EC2 进行扩展

> 原文： [http://highscalability.com/blog/2007/10/30/feedblendr-architecture-using-ec2-to-scale.html](http://highscalability.com/blog/2007/10/30/feedblendr-architecture-using-ec2-to-scale.html)

一个男人做了一个梦。 他的梦想是将一堆 RSS / Atom / RDF 提要混合到一个提要中。 这个人是 [Feedville](http://feedville.com/) 的 Beau Lebens，并且像大多数梦想家一样，他的硬币有些短缺。 因此，他在廉价的托管服务提供商的家中避难，而 Beau 实现了他的梦想，创建了 [FEEDblendr](http://feedblendr.com/) 。 但是 FEEDblendr 消耗了太多 CPU 来创建混合供稿，以至于廉价的托管服务提供商命令 Beau 来寻找另一个家。 博去哪儿了？ 他最终在亚马逊 EC2 的虚拟机室内找到了一个新家。 这是关于 Beau 最终如何能够在负担得起的 CPU 周期的摇篮中安全地创建自己的供稿的故事。

网站：http：//feedblendr.com/

## 该平台

*   EC2（Fedora Core 6 Lite 发行版）*   S3*   阿帕奇*   的 PHP*   的 MySQL*   DynDNS (for round robin DNS)

    ## 统计资料

    *   Beau 是具有一些系统管理员技能的开发人员，而不是 Web 服务器管理员，因此创建 FEEDblendr 涉及很多学习。*   FEEDblendr 使用 2 个 EC2 实例。 两个实例都使用相同的 Amazon 实例（AMI）。*   已经创建了 10,000 多个混合，其中包含 45,000 多个源 feed。*   每天大约创建 30 个混合。 实际上，这两个实例上的处理器被钉得很高（大部分时间的平均负载为 10 到 20）。

    ## 架构

    *   轮询 DNS 用于在实例之间进行负载平衡。
    -手动更新 DNS，因为在更新 DNS 之前验证实例可以正常工作。
    -实例现在看起来比以前更稳定，但是您仍然必须假设它们随时都可能丢失，并且两次重启之间不会保留任何数据。*   由于 EC2 没有像样的持久性存储系统，因此数据库仍托管在外部服务上。*   AMI 保持最小。 这是一个干净的实例，带有一些自动部署代码，可从 S3 加载应用程序。 这意味着您不必为每个软件版本创建新实例。*   部署过程为：
    -软件是在笔记本电脑上开发的，并存储在 Subversion 中。
    -Makefile 用于获取修订，修复权限等，打包并推送到 S3。
    -AMI 启动时，它将运行脚本以从 S3 获取软件包。
    -打开包装包，并执行其中的特定脚本以继续安装过程。
    -Apache，PHP 等的配置文件已更新。
    -固定了服务器特定的权限，符号链接等。
    -Apache 重新启动，并使用该计算机的 IP 发送电子邮件。 然后使用新的 IP 地址手动更新 DNS。*   提要独立于每个实例进行智能缓存。 这是为了尽可能减少对饲料的昂贵轮询。 尝试将 S3 作为两个实例的通用提要缓存，但是速度太慢。 也许可以将提要写入每个实例，以便将它们缓存在每台计算机上？

    ## 学过的知识

    *   低预算的启动可以使用 EC2 和 S3 有效地引导。*   对于精打细算的人，免费的 ZoneEdit 服务可能与每年 50 美元的 DynDNS 服务（效果很好）一样好。*   循环负载平衡缓慢且不可靠。 即使 DNS 的 TTL 较短，某些系统仍会长时间使用寻址的 IP，因此新计算机无法实现负载平衡。*   RSS 实施存在许多问题，无法有效地合并摘要。 因为没有可靠的交叉实现方式来判断提要何时真正更改，所以不必要地花费大量 CPU 读取和混合提要。*   考虑到实例可以随时消失，这确实是一个很大的观念转变。 您必须更改您的架构和设计以适应这一事实。 但是，一旦将此模型内部化，就可以解决大多数问题。*   EC2 较差的负载平衡和持久性功能使开发和部署变得异常困难。*   使用 AMI 的能力来传递参数，以选择要从 S3 加载的配置。 这样，您就可以测试不同的配置，而无需移动/删除当前活动的配置。*   创建一个自动化测试系统以在实例启动时对其进行验证。 如果测试通过，则自动更新 DNS。 这使得创建新实例变得容易，并且使慢速人员脱离了循环。*   始终从 S3 加载软件。 您想要发生的最后一件事是实例加载，由于某种原因无法联系您的 SVN 服务器，因此无法正确加载。 将其放在 S3 中实际上消除了这种情况的发生，因为它在同一网络上。

    ## 相关文章

    *   [什么是“新闻河”风格的聚合器？](http://www.reallysimplesyndication.com/riverOfNews)*   [使用亚马逊服务以 100 美元的价格构建无限可扩展的基础架构](http://highscalability.com/build-infinitely-scalable-infrastructure-100-using-amazon-services)

我可能会缺少一些东西，但我看不出这是“使用 EC2 进行扩展”的有趣示例。

在 Beau 使用 EC2 的方式使用 EC2 和从正常提供商设置两个租用服务器之间似乎没有什么区别。 实际上，获得租用服务器可能会更好，因为成本可能更低（EC2 实例的成本为每月 72 美元/月+带宽），并且数据库将位于同一网络上。

Beau 似乎没有做任何利用 EC2 的事情，例如根据需求动态创建和丢弃实例。

我在这里想念什么吗？ 这是使用 EC2 进行扩展的有趣用法吗？

>我可能缺少一些东西，但是我看不出这是“使用 EC2 进行缩放”的有趣示例。

我承认在发现有趣的事情上有些变态，但从博人的立场（这是很多人的观点）来看，这部戏令人激动。 故事始于冲突：如何实现这个想法？ 第一种选择是传统的廉价主机选择。 长期以来，故事的结局已经到了。 具有高端 CPU，RAM 和持久存储的专用服务器仍然不便宜。 因此，如果您不赚钱，那将是故事的结局。 通过添加越来越多的专用服务器进行扩展是不可能的。 希望新的网格模型将使很多人继续写自己的故事。 他创建系统的学习曲线是最有趣的。 弄清楚如何进行设置，负载均衡，软件加载，测试，常规的螺母和螺栓开发工作。 这样一来，他就可以在需要的时候立即获得更多的 CPU。 他已经可以进行基础工作，因此能够快速添加该功能。 但是现在它运行良好。 计划中的扳手是数据库，它指出了 EC2 的致命缺陷，即数据库。 如果该部分工作得更好，则该计划看起来会更成功，但事实并非如此，这也很有趣。

@Todd，感谢您的撰写，并进行了一些快速更正/澄清：

-“ Beau 是具有某些 sysadmin 技能的开发人员，而不是 Web 服务器管理员，因此在创建 FEEDblendr 时需要进行很多学习。” -需要明确的是，学习曲线主要是在处理 EC2 及其工作原理，而不是 FeedBlendr，它的核心是相对简单的。

-“重新启动之间不会保留任何数据”，这并非完全正确。 重新引导将保留数据，但是真正的“崩溃”或实例的终止将丢弃所有内容。

-“由于 EC2 没有像样的持久性存储系统，数据库仍托管在外部服务上”-此处的情况更多是我不想处理（或付费）设置某些东西来满足 他们没有持久性存储。 它是由其他人完成的，并且可以完成，这似乎对我所做的事情来说太过分了。

-“ EC2 较差的负载平衡和持久性功能使开发和部署比原本要难得多”-很明显，EC2 没有**内在**固有的负载平衡，因此，这取决于您（开发人员/管理员） 自己提供某种方式。 有很多不同的方法可以使用，但是我选择动态 DNS 是因为我很熟悉它。

@Greg 在回答您的问题时-我想这里的重点是，即使 FeedBlendr **当前不是**的扩展子代，这也很重要。 正如 Todd 所说的，这是关于学习曲线以及达到**可扩展**的程度的尝试和磨难。 没有什么阻止我（除了预算！）立即启动另外 5 个实例并将它们添加到 DNS 中，然后我突然扩展了规模。 从那里，我可以终止一些实例并进行缩减。 这就是要达到我什至拥有该选项的地步，尤其是在 EC2 上是如何实现的。

干杯，

英俊

漂亮的文章和鼓舞人心的故事。 很高兴读到这个小家伙正在构建具有扩展能力的东西。

但是，如果我能提供一点反馈意见，则每台机器上独立缓存数据将不会随着应用程序的开发而扩展。 那会引起问题。 如何将 EC2 实例作为专用缓存运行？ 它不是持久性的，如果失败了，那么您将不得不重建现金。 但是假设它是一种简单的存储机制，则应该保持一致。 我认为他们有很多慷慨的储物津贴。

无论哪种方式，几分钟之内能够打开另外 3 个实例的想法绝对是不错的，尤其是当您遇到“斜杠” /“ dugg” /之类的东西时。 如果实例可以检测到自己的高负载并自动启动新实例，那就特别好。

好故事- [http://www.callum-macdonald.com/“](<a rel=) title =” Callum“ target =” _ blank“ > Callum。

> > >需要明确的是，学习曲线主要是在处理 EC2 及其工作方式，而不是 FeedBlendr，它的核心是相对简单的。

我的帽子对你好！ 很少有人会保持自己的观点。

谢谢（你的）信息。 顺便说一句，我已将其标记为@ [http://www.searchallinone.com/Other/Blogging_Locally_with_Outside-in_Founders_and_Only_the_Blog_Knows_Brooklyn__Brian_Lehrer_Live/](http://www.searchallinone.com/Other/Blogging_Locally_with_Outside-in_Founders_and_Only_the_Blog_Knows_Brooklyn__Brian_Lehrer_Live/)