新手问题 高并发下,第三方登陆的疑问

benzhang · 2015年07月03日 · 最后由 benzhang 回复于 2015年07月08日 · 2545 次阅读

最近在做一个系统只有第三方的登陆,由于并发量比较大,估计大概会有 400 到 500 左右的并发量。但是由于是依赖于第三方的服务比如 (Facebook, Twitter 或者 QQ),延时肯定比本地数据库要高。后台的服务器用的是 unicorn,多进程服务器,所以如果要服务器不是太慢的话,得多开些进程才能够处理这样的并发量。但是问题就是如果并发量再增大的话,只能通过增加进程数量来解决吗?因为数据库连接也是有限的,这么多进程都连接同一个数据库,还得弄个连接池。当然如果用异步多线程来解决就很完美,比如 puma 之类的多线程服务器。由于没有在实际项目中用过 puma,目前还在试验阶段。也想过要放到 background job 里去实现,但由于是登陆,不是很现实的样子。不知道大家有没什么好的建议?谢谢分享

怕登录的第三方接口调用阻塞影响业务的响应时间,可以考虑把登录交给单独的 unicorn 比如在 nginx 配置第三方登录的路径走指定另外的 unicorn. 或直接把登录和用户相关的抽出来,用另外一个子域名,做成 passport 服务

#1 楼 @cxh116 非常感谢你的建议。对我很有帮助。我决定尝试一下把登陆抽取出来,用 puma 来实现。

可以将登陆的服务使用异步服务的方式处理。例如 nodejs。也就是说你调用的第三方不会阻塞 http 的响应,unicorn 肯定是不行的,unicorn 的并发是多进程的,并发的能力取决于 unicorn 的进程数,一台机器上并发 400 多个进程性能会很差的。

#3 楼 @jimrokliu 谢谢你的建议。我现在已经把 IO 高的部分分离出来了,也考虑是否要用 nodejs 去做这一块,但感觉对 nodejs 不是太有把握,现在用 puma 去跑了,测试结果还是蛮满意的。迟点看看能否整理点对比出来。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号