我在 Heroku Stack 上运行 Rails 应用程序(包括 Memcached、DJ 异步工作器、MongoDB 持久存储)。
现在我们使用 Twitter Oauth 作为我们网站上唯一的身份验证选项。 (我们计划最终扩展到 FB 连接、OpenID 和/或电子邮件/密码)。
Ruby/Rails 应用程序,您可能知道,不支持开箱即用的并发。在 Heroku 上,您可以启动额外的应用程序实例 (dynos),这会增加您的并发性(并发能力 = dynos 的数量),但每个实例的费用为 36 美元/月。
一般来说,这不是问题,因为网站上的平均请求耗时 <100 毫秒。
Twitter OAuth 除外。对 Twitter 的 OAuth 相关请求平均需要大约 3,500 毫秒。
所以基本上,当任何人登录整个应用程序实例时,都会被阻止 3-4 秒。
有什么好的方法可以缓解这种情况吗?将这些 Action 放在异步 DJ worker 中会不会很奇怪?它可能会使登录速度变慢一点,但至少如果一群人同时登录和/或 Twitter 真的很慢,这些过程不会影响应用程序的其余部分/其他网络请求吗?
还有其他想法吗?
最佳答案
我想说这个建议现在已经被取代了。我建议您改用 OmniAuth,如果您也需要普通身份验证,则可以使用 Devise。
OmniAuth 是建议的 Rack 应用程序,您基本上可以让所有“大型”OAuth 提供者一举成名。
有 2 个 OmniAuth 特定的 RailsCasts 可以引导您完成所需的内容:OmniAuth Part 1和 OmniAuth Part 2
关于ruby-on-rails - 一种更快/更具可扩展性的 Twitter OAuth Dance in Rails 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3425264/