如何使用异步数据库写入进行快速重定向?

Posted

技术标签:

【中文标题】如何使用异步数据库写入进行快速重定向?【英文标题】:How to have fast redirects with async db writes? 【发布时间】:2015-08-03 16:15:49 【问题描述】:

我目前正在使用弹性beantalk 部署在aws 上的node.js api。

api 接受带有查询参数的 url,将参数保存在 db 上(在我的情况下为 aws rds),并重定向到新的 url 而无需等待 db 响应。

到目前为止,该 api 的主要优先级是重定向速度和处理大量请求的能力。这个问题的目的是就如何做到这一点获得您的建议。

我通过一个名为 blitz.io 的服务运行 api,看看它可以处理什么负载,这是我从他们那里得到的报告:https://www.dropbox.com/s/15wsa8ksj3lz99e/Blitz.pdf?dl=0

实例和数据库分别运行在 t2.micro 和 db.t2.micro 上。

如果没有在 db 上执行写入,api 可以处理负载,但是当它在 db 上写入时会在一定负载下崩溃(我分享了后一种情况的报告),即使没有等待 db 响应。

我查看了日志,在/var/log/nginx/error.log中发现如下错误:

*1254 socket() 在连接到上游时失败(24:打开的文件太多)

我不熟悉 nginx 的工作原理,但我想每个 db 连接都被视为一个打开的文件。因此,该错误意味着我们在能够关闭连接之前达到了打开文件的限制。这是正确的解释吗?为什么我会收到错误消息?

我按照这里建议的方式增加了限制:https://forums.aws.amazon.com/thread.jspa?messageID=613983#613983,但它并没有解决问题。

此时我不知道该怎么办。我可以在从数据库获得响应之前关闭连接吗?是硬件限制吗?对数据库的写入很小。

提前感谢您的帮助! :)

【问题讨论】:

【参考方案1】:

如果你只是修改了 ulimit,可能还不够。您应该查看 fs.file-max 文件描述符的数量,

sysctl -w fs.file-max=100000

正如那里解释的那样:

http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/

【讨论】:

以上是关于如何使用异步数据库写入进行快速重定向?的主要内容,如果未能解决你的问题,请参考以下文章

当引导验证成功时,如何使用 $.post 提交表单而不进行页面重定向?

如何将终端输出的信息重定向写入文件中呢?

如何通过 sudo 使用输出重定向? [复制]

如何让我的快速服务器使用 cors 将客户端重定向到不同的域?

如何使用 .htaccess 将错误 404 重定向到主页?

如何使用modelandview进行重定向