针对处理并发量大的数据的经历
发布于 2年前 作者 zhs077 2589 次浏览

网关采用nodejs 的TCP模块接收GPS上报上来的数据,采用Http模块的将解析完的数据发送到java写的服务中去。该服务是用structs + sping +ibatis架构,数据库oracle。web服务器采用tomcat,服务器linux red hat 64位,16G内存。第一个问题出现了,当GPS终端量增大了,慢慢的将16G的内存耗尽。时间2-3天。经过排查是数据库的处理速度跟不上服务发送的数据。本来想部署weblogic后来由于出现问题,老是部署失败。最后升级了数据库版本。莫名其妙的好了。郁闷!。前不久数据库都被爆掉了。第二个问题,nodejs网关有时候会出现http连接队列已满。造成无法向服务发送数据。重启后即可。这些问题目前还无法彻底解决只能定时去重启网关。

如果大牛知道请告之。谢谢。。。。以后还会分享一些遇到的技术问题。

14 回复

单线程的V8无法负担太大的并发!

不见得吧。。。

“http连接队列已满"是指那边的连接?

1.如果是 GPS终端量 到 node 的,那是 node 有性能瓶颈了。(个人觉得可能性小)

  1. 如果是 node 发送数据到 tomcat 的http连接,那还是tomcat/oracle这边有问题,来不及处理造成积压。

有条件,建议单独测试下,比如node接收到数据后,暂时不发到tomcat,直接写到本地文件,看看能不能扛住,一步一步排查。

不好意思,看错了,GPS终端量 到 node 的是tcp,不是 http

如果tomcat这边实在处理不过来,node收到数据后先存文件,后面慢慢发,如果要实时性,就直接丢掉好了。

@myy 是实时的,本地文件是扛得住的,每天写5G的文件,猜测是我们的服务器太差了。网卡不行吧。

建议从node端到java那边做个队列吧,不要一收到tcp包就直接转发,而是收到TCP包放入队列,跑一个定时器定时去发,不知道产品需求这样是否还满足了

如果能不经tomcat转一道,而是从node直接入oracle库,是最好的了,除非… oracle 自己也扛不住这么大、这么实时的的数据插入量。

github 上有一些 oracle node 的模块,不过好像都不太活跃的样子,我也一直在找,郁闷~~

只能用oracle了的因为用到thine模式,外网->内网

可以考虑把Tomcat换做Jetty!

感觉需要加入内存数据库层或MQ做缓冲,nodejs内也可以做队列,但服务处理速度跟不上,堆积的数据肯定越来越大,nodejs超过1g可能出现内存已满的错误,如果是长时间速度跟不上应该考虑怎么提高后端速度吧。如果是瞬时处理不过来。缓冲一下就好了。

说的有道理,是oracle数据库处理跟不上,因为oracle还要进行位置分析要花费几百毫秒的时间。话说为什么点击回复都没反应呢??

你的网速慢吧

@zhs077 你好 最近在做这方面的东西 能否给个联系方式 想跟你请教些问题

回到顶部