大数据量系统
这半个月一直在忙,忙着改程序,做实验,原来的系统的处理能力是10^4/10^5,我现在需要处理的数据量是10^6/10^7。原来正常的程序却出现了各种各样的异常,最明显的问题有两个,一个是OutOfMemory,一个是Connection Reset。
前一个问题有很多种不同的解决方法,就是增加机器的物理内存,调优jvm的启动参数,如果这些都解决不了问题,那就是程序本身的问题。我遇到的最多的就是BufferedReader溢出、ArrayList的不正确使用。这些问题都解决了还是会发现莫明其妙的溢出的话,还是增加物理内存吧。jvm虽然有垃圾收集机制,但是如果程序设计的初衷就没有为大数据量的数据考虑过的话,内存消耗真是件杯具而且及其不好解决在问题,特别是在code base有10^5级别的时候。
后一个问题,目前我还没有找到好的解决办法,目前能想到的,就是增加发送和接收缓存,平滑发送的速率,可是16*16的链接还是会莫明其妙的断掉。
郁闷了!还是需要再接再厉,外围的方案解决不了问题的话,只能去动核心的代码了。身边也没有有经验的人可以请教,我自己现在倒是对大数据量、巨数据量系统的可伸缩性和性能有了很强的兴趣。
啥系统阿
一个发布 订阅系统
在用异步框架么?哪个?
现在吃不准用Netty会不会快些,还要做些试验来验证下在我们的实验环境和情景中Netty是不是比Mina更快,才能决定是否要换这个东西。
我对你说的两个框架都不熟悉,我不知道Mina用的是什么IO机制,Netty用的是NIO来实现的。
据说NIO的实现会比基于Stream的BufferedReader好很多。但是在NIO中缓存大小是可以指定的,理论上不会出现溢出的情况。
Mina也是基于NIO的,NIO的缓存大小是可以指定的,但是也是有大小限制的(似乎是256kbytes,有待考证),我系统里大概有上G的数据,已经超出可用内存的值了,系统消息的处理速度过慢,消息都被放在了内存里,所以溢出了。