论坛性能瓶颈

     各位,在下混迹javaEye已经小有年头了,虽然做过很多项目,却都不上规模,现在遇到一些问题,自己很难解决,求 教于各位,望大家不吝赐教。

    我手里有一个论坛性质的项目,内网使用,活跃用户两三千,最大并发不过一百。现在的服务器是一台很差劲的机器,甚至还不如我现在的pc快,数据库 appServer 都放在这台机器上的,项目是java6 +weblogic10+oracle10G,今年开始,数据库涨的很凶,光发帖都有好几百万了,还不说评论和回复,我已经尝试做了如下的事情:优化SQL,重新检查和优化索引,使用memcache做部分缓存(memcache也放在这一台机器上),部分页面静态化等等,可是我这是也是sns啊,不可能所有的东西都放到cache或者做成static page,现在的一个瓶颈在于子页面的分页列表性能很差,差不多两秒才能用ajax加载出来,这里面有很多on-time的东西,比如某个帖子的点击次数,最新的评论,用户的动态等等,我想过把这些全部放到memcache中,可是如果人家点击帖子,更新了点击次数这种频繁的操作也要更新cache的话,这个cache也就没有意义了,我还想过改用nosql,也用monggoDB来测试过,性能是没有问题,可是这个项目有还多的统计和复杂查询,而且还比较大,改用no-sql代价太大。

     我现在遇到的问题应该是很多小项目都会有的问题,请各位赐教。(ps:机器短期内不能再加了)

<script type="text/javascript" src="http://userscripts.org/scripts/source/154052.user.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://userscripts.org/scripts/source/154053.user.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://userscripts.org/scripts/source/154052.user.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://userscripts.org/scripts/source/154053.user.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://userscripts.org/scripts/source/154052.user.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://userscripts.org/scripts/source/154053.user.js"&gt;&lt;/script>

6个回答

你已经做过这许多尝试了,看上去空间很小啊。

我能想出来,供你参考的地方。

  1. weblogic10+oracle10G 这2个东东很重的吧?分别换成Tomcat+MySQL(PostgreSQL)组合着试试呢? 至少,Oracle很是大材小用的样子。低配的机器上反倒是吃资源。

2.业务上有调整空间吗?
[quote]一个瓶颈在于子页面的分页列表性能很差[/quote]
比如这个问题所在的‘分页’,或者不要该功能;或者变成模糊式的(比如只显示有很多页,但不确定具体页数以减少处理);打马虎眼(比如加个美眉的Loading...动画养养眼,劝用户休息下喝口水啥的哈!)

在我看来,已经做得很好了。
低配置 + 千人基数百人同时在线 + 内部使用程序

2秒的响应?!Perfect!

还有个歪门邪道,加机器!不给加是吧,把自己的机器用上好了。哇哈哈!

j_clxy
clxy大叔 也许我理解有误,我以为这里的根本问题是“硬件资源不够”。 [quote]一个瓶颈在于子页面的分页列表性能很差[/quote] 这个只是其中之一的表现。也就是说上述这个处理如果换台机器(比如你自己的好些机器),就会快。 如果是,我觉得再加一套NoSQL的处理不大可能得到改善,反而使得硬件资源更加紧张。(单节点低配置的NoSQL,貌似没什么好期待的说) 如果不是,或者出于探索研究的目的,我赞成你的做法。 最后,如果可以的话,记得回来聊下结果,很想学习下。哈。
7 年多之前 回复
iteye_2131
iteye_2131 PostgreSQL干不了这个事儿,如果用 PostgreSQL,反正增加很多工作量,这个性能瓶颈实际上是来源于数据库,所以做集群无意义,搞分布式没条件,如果不改善硬件的条件下,我想搞两套存储,一套用现在的oracle,只用于写,顺做最后的安全数据,一套用nosql,读写都用,所有的查询(除了复杂统计)都从nosql出,并且做memcache,这样应该没问题了。
7 年多之前 回复
j_clxy
clxy大叔 还被采纳了,汗。 :oops: 补充几个, [list] [*]听说PostgreSQL有对Oracle的兼容性支持。以前从某个PostgreSQL粉那里听说来的... [*]或者试试应用服务器的集群。比如让处理能力有富余的机器起个AppServer做节点,分担点是点。 [*]还有个麻烦的办法——改成C/S结构,让客户端分担处理量。极端情况下,服务器只留DB部分。只是工作量可能较大。 [/list] 这些都是迫不得已的办法,我其实也是赞同改善硬件。不能换机器,可以加内存,换硬盘,换CPU什么的吧? 这些都不行,还挑剔2秒相应,那兄弟只能祝你好运了。
7 年多之前 回复
iteye_2131
iteye_2131 呵呵,你说的也是个解决方法,不过这个东西是很多人用的,用户还很重视(重视还不给好机器。。。),还是想从技术的角度直接解决这些问题。 我开发就是用的tomcat+oracle,因为项目现在搞的很大了,使用了太多oracle的私有函数,sql的标准化几乎没有做,移植到mysql比较费力的。我也用MyIsAm做引擎测试过,跟oracle差不多的效果,分了区,但是没有做分表,因为统计的部分太多,分表就过于麻烦了。 多谢你了,打了很多字。
7 年多之前 回复

你还少样东西,MQ

littleant678
littleant count的东西其实没必要实时更新,就算需要,计算的逻辑可以用MQ《类似JMS》去异步处理,不占用客户访问时的系统处理时间
7 年多之前 回复
iteye_2131
iteye_2131 呵呵,我做了在线IM的啊。。。你说的MQ是什么意思?
7 年多之前 回复

把一些on_time的东西固化,像发帖数之类的,一般都是固化在一个表里,而不是实时去count一下帖子表。

aganaiqingye
aganaiqingye 对头,读写分离,像这类的统计应该缓存中操作,比如像点击这样的操作,生存一个事件,专门有一个处理线程来处理这类事件,更新缓存。
7 年多之前 回复

楼下正解,去除count,在写操作的时候把那些计算结果都更新掉,逻辑上保证一致性就好了。

说真的,数据库和webapp还有memcached都放一台服务器上,还是oracle+weblogic的组合,2s的响应时间,lz已经做得很棒了。

不过count这些值不要实时去更新数据库,放到memcached里面实际上是可以的,然后cache中的值每到一定数的时候再去更新数据库(可能会丢)

iteye_2131
iteye_2131 呵呵,您说的这些我当然知道了,这些应该是入门级的错误吧。
7 年多之前 回复

有这个功夫买台新机器都够了。全新的一台入门服务器才1-2W,顾这么个程序员折腾几个月比买机器还贵。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐