如何使用异步数据库写入进行快速重定向?
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 提交表单而不进行页面重定向?
如何让我的快速服务器使用 cors 将客户端重定向到不同的域?