Friday, January 15, 2010

折腾@jwc

教务管理系统之烂,估计每个学校都各有特色。尤其是在这种*假学分制*前提的选课需求下,选课成了抢课,于是一群人“挤破脑壳”只为刷进系统选上一门老师“好”点的课。

理工教务处用的是“正方现代教学信息管理系统”。这个系统据了解是一群人做了套东西然后浙江大学挂名交钱才推广起来的。所以核心代码都在 /bin/zjdx.dll 浙江大学.dll lol。手头有一份06年弄到手的web系统文件,之前略微看过反编译出来的源码,验证了我找到的两个“疑似注入点”并否定了一个上传点。至于那个Delphi写的客户端,手脱壳之后,dede版本太低,看不了,于是就没折腾。

系统是 IIS + ASP.Net + Oracle。 应用和数据库分离,分别跑在windows和Solaris上。

选课这个功能也是用的这套系统的,但是由于这个系统本身很2的功能实现,基本选课人一多,页面就耍不开了。有时候辛辛苦苦刷开页面,却发现js菜单或者css没加载,而且这页面是IE only的 XD。更恶心的,基本每个页面都检查了referer,即便你看到了页面源码里的地址,直接copy到地址栏也没用。

于是第一个问题,页面的资源偏多,而且没有做任何缓存或者其他的处理,每次访问页面都会载入耗费大量的时间加载图片等。这些资源的处理也是交给IIS的。这种情况下,显然nginx更适合用来handle这种资源。但是如果剥离资源扔个nginx什么的,显然工作量很大。所以,前端配一个nginx高版本或者squid,把后端服务器的图片资源全缓存起来,应用服务器负载会小很多。
于是kangkai 配了一层squid,同时我也拿nginx最新版配了个proxy 加了cache。基本这样处理起来,把所有的请求都走代理过去,只要能刷开页面,基本就不会出现js菜单不加载的情况。不过恶心在url的处理上。

做了这些,于是建立在页面刷开的前提下的用户体验会改善些。
但是,系统的问题还是没有触及皮毛。
现在的系统,经常就出现 web application error 之类的红字警告,然后就是service unavailable了。想起去年选课期间教务处挂在操场上的喷绘,被人用黑笔写了很明显的 service unavailable。lol

某天去教务处机房,零距离接触了服务器。听说这种情况基本重启一下IIS就会好,不过过一会儿又会反复。想到 春生 之前提到的apache 定期 graceful 一下,让 kangkai 试试定时重启IIS。 按今天kangkai说的,这个有点用,不过最后负载又回到数据库上了,这是后话。

从教务处回来,突然想到,出现那种情况有可能是IIS虚拟主机资源分配的问题。以前教务处曾用过两个三个应用服务器,后来都被挪作他用了。据kangkai说现在这个应用服务器高峰期的资源占用也不算高。于是想到可以一台机器多开几个应用,前端的squid来做负载均衡。只是实验性的,因为对IIS资源分配问题也只是怀疑,没法说。只能试试。但是 service unavailabe 这样子感觉应该问题比 web application error 这个要底层,更像是IIS的问题,所以尝试还是有意义的,毕竟据我之前的观察,不同虚拟主机用的是不同的进程跑的。


最后得到的消息,就是刚才说的数据库。据说高峰期数据库服务器的负载上了20,三cpu的机器吧,有点太狠了。。。。
而且以前himo说的,那个系统对数据库简直是滥用,什么样的查询都有。
选课的时候,查询量肯定不会小,一累加就更大了。


可惜kangkai不是专门做技术维护的,只能这样了。

No comments:

Post a Comment