🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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/)