前言
众所周知,每当大流量访问和点击时,学校的教务系统总会有各种各样的问题,就如在抢课时,就会出现大面积的卡顿、数据错误、选课失败等等问题。今天,试着分析一下为什么会出现这样的问题。
分析web网页的工作流程
在如今的web开发当中,一般都会去遵循MVC三层架构的形式来达到更高的开发效率。
当客户端发出请求给服务器(如点击查询、选课、改信息、退选等操作),请求数据首先会到表现层(Controller),然后业务层(Service)就会根据表现层的数据让持久层(Dao)去进行增删改查(相当于查询、选课、改信息、退选等操作),然后将信息返回给业务层,最后通过表现层来将结果告知游览器,并做页面展示。
当服务器出现问题(访问人数太多、带宽不足、服务器卡爆),就会无法保证游览器所有请求都能正确处理,也无法保证服务器的响应能够正确的发给游览器,从而就会出现各种各样的问题。
就如我们选课时出现的:访问网页失败、掉Session(需要重新登录)、选课失败、页面异常等等。
分析强智系统
通过登录教务系统,发现我们的系统是由jsp开发的。
首先我们来看下百度百科对JSP简介:
JSP(全称JavaServer Pages)是由Sun公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。
JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
也就是说,JSP是有java“一次编写到处运行”的特性的、基于java代码的一种脚本语言。
使用jsp的好处呢这里就不多说了,我们来讲一下jsp缺点:
1.JSP在编写的时候可以使用网页代码(HTML/CSS/JS),也可以嵌入java代码,虽然在页面展示时可以用el和jstl直接做数据交互,但是这就会造成前端和后端的代码的混淆,毕竟现在都讲究前后的分离。
当数据交互时的动态资源和网页静态资源全部交互在一起时,代码维护会比较困难,页面的耦合性大,服务器的压力会更大。典型的特点就是,服务器不行时,前端页面也跟着完蛋,也就是说,用户体验是让人怀疑的。
2.jsp是基于java的脚本语言,大多数中小企业都是使用Apache的Tomcat服务器,在处理高并发时效果是不如Nginx这样的服务器的。
特别是在处理高并发的情况下,tomcat更容易造成崩溃,当连接数过多的时候就会出现服务器僵化的现象了。当抢课的时候,可能是几千上万人的同时点击,服务器的压力可想而知,后面进不来的人,后面是很难挤进去的。。
所以,较大的企业往往要有更高级的算法、要对数据库进行性能优化,使用高并发redis来增加代码质量,增加用户的体验。
3.jsp页面内容太多,既有静态又有动态java代码,页面响应慢,从底层原理来看还是要生成静态html,所以效率也慢。
4.对比jsp,html页面可以使用ajax异步交互的技术,在不加载整个页面资源的的情况下就能做到数据交互,这点是jsp不足的地方。
所以,在我们分析了web网页的工作原理和学校教务系统的技术类型后,我们就可以简单知道,为什么学校教务系统在抢课的时候经常崩溃了。
换个好点的服务器可以吗?
答案是可以的,有句话叫底大一级压死人,显然在这里也是可以的。学校能够更换带宽更大、配置更好的服务器、增加服务器数量、增加维护服务器机房的管理人员的话,这种情况是可以有明显改善的。
毕竟我们从上面的分析来看主要问题还是出于服务器的性能、技术的选用和优化,准确的说还要有更高明的算法机制来保障高并发的使用,那么从服务器层面来解决也是有效途径之一。
但是,从学校的管理层面来说,想要实现这样真的有那么容易吗?
由于我没有去过学校的服务器机房、不知道学校服务器具体的数量和性能,所以无法准确的判断,但是至少从日常使用来看,我们的教务系统是毫无问题的,能够基本满足需求。从决策者来说,当然是不能够有太多的资源浪费,毕竟选课也就一学期一次。
如何更好的选课?
官方推荐:认准360游览器(兼容模式)----×
个人推荐:使用chrome、firefox、ie等多种游览器混合的,以chrome为核心,firefor、ie游览器辅助的模式。----√
最后提前几分钟就进入登录教务系统、多开几个页面,占得先机抢先进入服务器,免得被服务器的访问限制阻挡在外。
当教务系统进不去的的时候可以多开上面几个游览器,重复刷新,必要的时候删除教务系统网站的cookie。
最后
以上为个人拙劣的见解,主要从web网站的工作流程、jsp的技术优缺来分析教务系统卡顿的原因,难免有些不对的地方,烦请指出,互相学习。