北大青鸟编程学习方法(1万并发0.8s响应让选课速度飞)

北大青鸟编程学习方法(1万并发0.8s响应让选课速度飞)(1)

上了教务系统的学校通常都为每年选课的“秒杀情况”头疼不已,访问速度慢甚至系统崩溃,使得“选课”成为高校师生吐槽的焦点。然而,东南大学却通过优化数据库及应用服务器,让选课速度重回“子弹飞”的感觉!

他们都做了什么?

有什么值得借鉴的地方?

让小编带着大家一探究竟!

东南大学选课业务

学校数字化校园从2008年建设至今已有7个年头,已建应用系统超过40个,覆盖学生的教学、管理和老师的科研、评奖等各个方面。其中,教务系统于2009年投入使用,包括学籍管理、选排课、成绩管理等40多个模块。经过长期磨合,目前各个功能均得到充分使用。

学校每学期都有学期末预选和开学退改选两次选课。考虑到选课系统压力太大,均为按年级分批次开放选课,即第一天下午一点开放一个年级,一点半开放一个年级,依次顺延,当天完不成的延续到第二天,每个年级人数约4000人左右。

(优化前)

优化后,数据库服务器CPU及内存的使用率几乎保持在20%左右,如图:

北大青鸟编程学习方法(1万并发0.8s响应让选课速度飞)(2)

(优化后)

↓↓↓ 优化前后集群数据库另一节点CPU使用对比

北大青鸟编程学习方法(1万并发0.8s响应让选课速度飞)(3)

(优化前)

北大青鸟编程学习方法(1万并发0.8s响应让选课速度飞)(4)

(优化后)

↓↓↓ 优化前后前端应用服务器CPU利用率对比

优化前,前端选课应用服务器CPU利用率瞬间攀升至90%。

北大青鸟编程学习方法(1万并发0.8s响应让选课速度飞)(5)

(优化前)

优化后,前端选课应用服务器CPU利用率瞬间最高才40%。随后逐渐下降,经过30分钟左右,趋于平稳。

北大青鸟编程学习方法(1万并发0.8s响应让选课速度飞)(6)

(优化后)

从昨天到今天,我们做了…

在这样的服务体验提升的背后,学校都做了哪些工作呢?

1.数据库系统层面

数据库SQL优化:优化了近50条SQL语句及相关的存储过程,通过将近2个月的SQL语句优化,绝大部分SQL语句的执行效率提升了数十倍。

数据库服务器优化:数据库服务器是建立在2台P570小型机上。通过缜密的分析,学校对于2台IBM AIX小机的网络、内存、IO参数、内核参数进行了反复的调试,使得小机的硬件性能发挥到了最佳值。

2.中间件层面

通过分析过往选课期间的监控数据,我们发现中间层没有承担应有的压力,而是将压力全部传给了数据库层。所以在这次调优中,需要将压力向中间件层转移。

升级DBCP连接池版本:原先的连接池版本1.2.2 年代久远,性能不佳,已无法承担大并发的需求。此次我们通过研判,已将连接池版本升级到1.3.1,使得性能提高3倍以上。

优化连接池参数:在 选课系统上线之后,连接池的参数并未经过优化。之前配置的部分连接池参数设置在当前的业务规模看来已不合理,导致系统花费了大量的资源消耗在连接的建立与销毁上。因此,重点优化了初始大小、最大活动大小、最大/最小空闲大小等参数。通过优化调整这些参数,连接池的效率提升了1个数量级。

线程池的调整:Websphere的线程池,我们经过多次Loadrunner 性能测试,已调整到最优值,每个server线程池最大值=最小值=初始化值=25。整个系统从架构上吞出量从原先的18M/s 大大的提升到了150M/s,吞出量提升9倍。

↓↓↓ 可看到线程池调整前后的吞出量对比

北大青鸟编程学习方法(1万并发0.8s响应让选课速度飞)(7)

(图:线程池调整前吞出量)

北大青鸟编程学习方法(1万并发0.8s响应让选课速度飞)(8)

(图:线程池调整后吞出量)

3.HTTP层面

HTTP与APP之间的通信,原先HTTP服务器的转发效率非常差,第一次打开要6秒左右。

经过研判与测试分析,原因为HTTP到业务系统的转发效率慢,通过优化HTTP主机上与选课应用服务器之间的网络,可大大的优化转发的效率。

↓↓↓ 调整前后性能对比

北大青鸟编程学习方法(1万并发0.8s响应让选课速度飞)(9)

整个优化过程,网络中心依照“设定阶段目标、进行压力测试、开展专项优化”的方式科学地开展。网络中心前后组织了4000、8000和10000三个并发目标的压力测试和优化。

优化后,数据显示10000并发的情况下,登录教务系统的平均响应时间为0.792s,选课的功能响应时间为0.8s,登出系统的响应时间为0.16s,TPS达到800。

北大青鸟编程学习方法(1万并发0.8s响应让选课速度飞)(10)

(图:压力测试响应数据表)

教务系统建设及维护建议

根据东南大学及其他多所学校教务系统的建设及运维维护经验,金智教育项目负责人弓子介建议学校从以下几个方面提升系统性能:

1.数据库服务器的独立

很多高校往往会将所有的数据库都放在同一套物理服务器或集群中。实际上,这样的数据库分布是不太合理的。因为系统的资源是统一分配的,如果其中一个数据库的负载太高(如选课等高并发业务),势必会造成资源的分配倾斜,导致其它的数据库运行受到影响。

东南大学也曾面临这样的困惑。2015年初,学校就已将教务的数据库同公共数据库及业务数据库分离出来使用独立的环境。

2.软件版本的更新及补丁更新

及时关注数据库、中间件等软件版本的更新。及时更新基础环境软件的版本,能充分利用各类软件的新特性,为提供良好的运行提供必要的条件。此外,定时修复补丁,也能避免触发运行过程中的各类bug。

3.定期的压力测试

每次选课之前要执行必要的压力测试,以确保当次选课业务的顺利开展。因为每次选课的人数、系统运行的情况、硬件资源的运行情况都在变化。知己知彼,方能百战不殆!

4.业务的开展合理安排

选课业务开展前期会涉及到教师的排课业务。事实上,排课业务与选课业务对于数据库而言,是不同类型的业务模型。尽可能的在选课业务期间,避免执行排课等这类消耗大量资源的业务开展。

5.持续的运维保障

任何系统要持续健康的运行,都离不开维护人员的持续维护。任何软件系统都不能奢望上线之后能一如既往的稳定运行。每一套健壮的系统背后都有一批默默无闻的运维工程师在日夜坚守。

东南大学是中央直管、教育部直属的副部级全国重点大学,中国著名的建筑老8校之一,国家“985工程、211工程”首批重点建设的大学。学校设有29个院 系,75个本科专业;有全日制在校生32000余人,其中研究生13000余人,另有在职硕士研究生3100余人,是一所以工科为主,多学科协调发展的综合性研究型大学。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页