1

我在 python 中有一个大的线程提要检索脚本。

我的问题是,如何对传出请求进行负载平衡,以免我经常访问任何一台主机?

这对 feedburner 来说是一个大问题,因为很大一部分站点通过 feedburner 代理他们的 RSS,并且使事情进一步复杂化,许多站点会将其域上的子域别名为 feedburner,以掩盖他们正在使用它的事实(例如“mysite”将其 RSS url 设置为 feeds.mysite.com/mysite,其中 feeds.mysite.com 会跳转到 feedburner)。有时它会阻止我一段时间并重定向到他们的“自动请求”错误页面

4

3 回答 3

3

您可能应该做一个一次性请求(每周/每月,任何合适的)。对于每个提要并遵循重定向以获取“真实”地址。无论您当时的限制情况如何,您都应该能够解析所有提要,保存该数据,然后为添加到列表中的每个新提要执行一次。您可以查看urllib 的 geturl(),因为它从您输入的 URL 返回最终 url。当您对提要执行 ping 操作时,请务必使用原始内容(保留“真实”,仅用于负载平衡)以确保在用户移动它或类似内容时正确重定向。

完成后,您可以简单地设计一种负载机制,例如给定域每小时仅 X 个请求,遍历每个提要并跳过主机已达到限制的提要。如果 feedburner 公开了他们的限制(不太可能),您可以将其用于 X,但否则您只需要估计它并粗略估计您知道低于限制。然而,了解谷歌,他们的限制可能会衡量模式并且没有特定的硬限制。

编辑:添加了评论中的建议。

于 2009-12-01T15:52:37.363 回答
2

如果您的问题与 Feedburner “限制您”有关,那么它肯定会这样做,因为您的机器人的源 IP。“负载平衡到 Feedburner”的方法是从多个不同的源 IP 开始。

现在有很多方法可以实现这一点,其中两种是:

  1. 多宿主服务器:同一台机器上的多个 IP
  2. 多台离散机器

当然,你现在不要在他们面前放一个 NAT 盒子 ;-)


以上处理了可能的“节流问题”,现在是“调度部分”。您应该为每个“目标”维护一个“虚拟调度程序”,并确保不超过相关 Web 服务(例如 Feedburner)的参数。现在,棘手的部分是掌握这些“限制”......有时它们会被宣传,有时你需要通过实验来弄清楚它们。

我知道这是“高级架构指南”,但我还没准备好为您编写代码……希望您能原谅我 ;-)

于 2009-12-01T15:45:59.547 回答
1

“我怎样才能对传出的请求进行负载平衡,这样我就不会经常访问任何一台主机?”

通常,您通过设计更好的算法来做到这一点。

例如,随机打乱您的请求。

或者“公平地”将它们洗牌,以便您循环通过来源。这将是一个简单的队列列表,您可以在其中从每个主机中取出一个请求。

于 2009-12-01T15:50:32.617 回答