1分钟4万条记录,东南大学选课系统更快一步
东南大学是中华人民共和国教育部直属全国重点大学,中央直管副部级建制,是国家“双一流”、“985工程”、“211工程”重点建设高校,入选“珠峰计划” [97]  [120-121]  、“强基计划”  、“2011计划”、“111计划”、卓越工程师教育培养计划、卓越医生教育培养计划、学位授权自主审核单位 、首批未来技术学院建设高校  ,为“建筑老八校” 、卓越大学联盟  、长三角可持续发展大学联盟  、中英大学工程教育与研究联盟 、中俄工科大学联盟、碳中和世界大学联盟成员。
每年一到选课周期,超高并发、脉冲式的压力,让学校把心都提到嗓子眼了;学生们摩拳擦掌,今年能不能顺利选上课,就看“人品”吧。为了缓解选课压力,每个学校可谓“八仙过海各显神通”,有条件的学校选择采用更多的硬件负载来提高系统并发能力,有的学校采用分流选课模式来降低并发。但是选课周期一过,那些硬件资源就显得很浪费;而分流选课无法避免学生频繁刷新,系统很容易崩溃,同时分批选课造成选课资源也不平衡,热门课程谁先选谁有优势。


针对以上让人头痛的问题,我们该怎么办?不要急,我们金智教育有办法!卓越的产品能力+个性化预演方案+经验团队的业务周期服务,三管齐下,解决顽疾,从而给学生提供毫秒级的稳定选课体验,解决校方的后顾之忧。


在12月东南大学刚刚结束的一轮选课中,金智选课系统表现斐然。


4个年级本科生“同台竞技”,万人同时在线,2秒钟内就产生了约1700条选课记录,1分钟便达到47763条选课记录,稳如泰山,丝般顺滑。

东南大学选课系统自上线18年以来,使用金智选课系统共开展选课40余次。覆盖业务广泛,包括正选、重修、辅修、本研互选等多种场景,为学校师生提供稳定、顺畅的选课体验。自18年第一次服务两个年级约8000+学生选课,到2021年12月本轮选课增长到四个年级16000+学生同时在线选课,金智教育的选课系统都表现稳定。特别在本次选课中,在线峰值人数达到14000+人,2分钟内就产生了约47000+条选课记录。从监控数据看,单台选课服务器的请求数达到峰值约14000次/分钟,常规刷新页面平均耗时20ms,而选课更只实现10ms以内完成,你眨一次眼,我选了20门课。

本轮选课,各方面如何做到如此丝滑??小伙伴们睁大眼睛,专业知识来咯↓↓


1、自定义压缩算法,防止网络阻塞

为了提升选课服务的处理速度,减少前后端通信数据量,降低带宽要求,将选课所需数据放入内存进行处理计算是最优途径,金智新版系统在压缩算法上采用了三个解决方案:

首先,减少本身对象的大小,独创了开发态与运行态压缩算法。通过减少key的大小能很大程度上缩减存储,兼顾开发态时key的取名不影响代码可读性,平衡二者,采用nutzJson序列化的方式。

其次,由于学生和教学班的基数庞大,为了保存二者的关系独创了整数值压缩存储算法。

最后,数据分片,将学生对象相关数据按照自定义HASH算法存储在不同的redis上,支持redis集群,将选课所有所需数据缓存,实现0db操作减少单个redis的压力。

2、优化系统架构,平滑毛刺与尖峰

选课是一个高并发的系统,几万名学生会在短短几分钟内登录系统进行抢课操作,在保障不特别增加硬件成本的前期下应对这种高并发就需要技术架构的优化,新选课系统的技术架构参见下图。

东南大学选课系统更快一步.png

利用lvs解决nginx单点问题,提升系统并发能力上限至50万。同时,新选课采用disruptor这个队列对选课第一分钟的巨大洪峰流量做削峰填谷处理,最大限度平滑了毛刺与剑锋。

3、避免选课事故,全面提升系统安全性

所有请求需要计算的数据都放置进内存,由其课容量的计算,选课课容量是控制一门课程只允许多少学生选课的界限,是一条红线,绝对不能出错

超过课容量就会产生教学事故,同时又要保障课容量的计算效率,新版系统采用lua脚本的方式来控制课容量,既保障正确性又保障计算效率,利用lua脚本将选课时间统一集中在nginx服务器上,防止不同服务器之间的时间差异。

通过令牌桶算法通过nginx做限流操作,支持对ip、用户在单位时间内的非法请求做拦截。

4、7×24h,持续运维保障

为保障东大选课平稳流畅,金智工程师们从11月底,周末无休持续进行调优,每天工作到凌晨三点,不断优化,最终确认现有环境。

例如针对如何避免选课并发问题,选课前后投入40台服务器用于测试调优,根据每次的测试结果不断调整资源分配比例。在经过开发十余次的优化,最终确定基于21台服务器组成本次选课的服务集群,为本次选课成功奠定最坚实的基础。

另外针对系统架构,数据库和缓存,软件架构,参数调优,用户行为分析,性能监控等多方面为选课保驾护航。

东南大学选课系统更快一步2.png