修复自定义主题组件的 429 错误

您希望完成什么工作?
我们有一个自定义主题组件(“传记书”),最近开始返回 429 错误。这一问题始于 11 月 26 日,在此之前一切正常。

“传记书”通过修改 /u 路由以更美观的方式展示用户信息。为此,它还会从每位用户的 .json 文件中请求额外的用户信息。“传记书”原本采用懒加载以避免 429 错误,但四天前这一机制失效了。我不确定四天前发生了什么,但 Discourse 团队已确认速率限制方面并未进行任何更改。

相关代码仓库地址为:GitHub - sethgodin/discourse_biobook: Bio Book feature for Discourse

最初为我们开发该组件的开发者目前无法接手此修复工作,因此我们需要有人能够介入现有代码,解决相关错误,使自定义主题组件恢复正常运行。

我们不需要新增功能,无需更改现有功能,也不希望进行任何重构。我们只需解决 429 错误,让“传记书”恢复其原有功能。

您希望何时完成?
我们希望于 2020 年 1 月 6 日(星期一)前完成。

您能为此任务提供的预算是多少(美元)?
我们的预算为 250 美元,用于解决 429 错误。

我们理解,解决 429 错误即可修复所有相关问题。如果情况并非如此,请告知我们,我们将相应调整预算。

1 个赞

你是如何安装 Discourse 的?

用户 IP 地址是否被正确记录?

1 个赞

我们由 Discourse 托管,使用的是商业版计划。

我猜是这样,但不确定。我该如何确认?

1 个赞

因此,它是以每组 50 名用户的方式进行延迟加载,而 max_reqs_per_ip_per_10_seconds 的默认值也设置为 50。包括主页面在内,这段代码将在 10 秒内发出至少 51 个请求,从而超过了速率限制。

换句话说:我不明白这之前是如何起作用的……?

3 个赞

那么一切运行正常。这太遗憾了。如果是配置问题,修复起来会比理查德描述的情况容易得多。

我也不太确定是怎么回事,但它已经正常运行了一年多。直到四天前,我们从未遇到过 429 错误。

我们上周已在全球范围内为所有 Discourse 实例启用了速率限制。下周我们可以调查该插件,看看是否有更合理的批量 API 可供其使用。

6 个赞

哇,我最近也因为类似的原因遇到了同样的问题(拉取用户信息来显示卡片!),临时实现了一个小 hack 来解决,然后特意来到论坛,想看看是否有我不知道的批量 API,或者学习如何实现这样的接口。

1 个赞

@sam 啊……这真是个好消息。非常感谢你提供的背景信息!

1 个赞

抱歉,Alex,我上周的回答有误。我没意识到我们之前并没有部署那个更改。

4 个赞

一切顺利,@HAWK,感谢你的反馈。

在收到 @sam 和团队关于是否有更合适的批量 API 可替代的回复之前,我将暂时搁置这个项目。

谢谢大家。

1 个赞

嗨 Alex,

我刚查看了主题组件。它确实引入了大量工作和海量的需求。我们实施的速率限制在这里完全正确,就像免疫系统一样。

我们会解决这个问题,但可能需要一到两周才能全部完成。

在我看来,这里的关键在于你需要目录开始返回用户卡片所拥有的所有信息。棘手的是,主题组件无法修改服务器,因此我们需要对核心 API 进行一些更改,使我们能够一次性获取多个人的用户卡片信息。

随着进展,我们会及时更新你。关于预算,我们这次将免费处理,但我估计修复这个问题大约需要 2 天的工作量,这远远超出了最初的预算。表面上看起来简单,但实际上需要非常复杂的内部改动。

8 个赞

感谢 @sam 和团队,这非常有帮助。核心 API 的变更肯定将造福我们,我想也会惠及 Discourse 的其他用户。很高兴我们将能够使用 Bio Book,并使其运行得更加合理。一两周的时间对我们来说没问题。

我理解您关于初始预算和修复范围的说法。您能免费提供这项服务,真是太慷慨了。谢谢。

我们会等待进一步的消息。

4 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.