疫情期间“停课不停教,停课不停学”,线上开课第一天,浙江大学网上开课平台访问量即突破100 万次,访客数3万余人,最高峰达 1.1万人同时在线,发起课程直播2000余场,然而系统却未发生一次故障异常。短短29天的冲刺就完成了如此完美的性能保障任务,浙江大学究竟是如何做到的?耐心看下去!

面临挑战

浙江大学是中华人民共和国教育部直属的综合性全国重点大学,位列首批“世界一流大学和一流学科”、“211工程”、“985工程”。

2020年初,面对疫情发展的严峻形势,浙大信息技术中心临危受命,要求30天内完善保障8万师生互动、3000多门课程平稳运行的线上抗疫“第二战场”。大年初二晚上,浙大信息技术中心紧急召开保障视频会议,决定将网上开课直播方案主要依托于已有的“学在浙大”和“浙大钉”平台,可要想实现稳定的“网上开课”,还有一系列性能问题不得不解决。

1. 访客从5万到8万,系统稳定性如何保障?

“学在浙大”平台在最初推出之时,主要以校内访问为主,平台支持的用户数也只有 5 万。疫情期间为了支持全校 8 万师生的校外顺畅使用,必须将关键的业务系统由校园网都迁移到校外云端,然而系统间微服务调用复杂,关键业务迁移极易导致系统出现故障,比如:两个环境的硬件差异,配置差异,网络环境差异,任何一个细小环节出现问题,都有可能导致系统不可用。

2.系统打开速度慢2.5倍,问题出在哪里?

日常教学中,钉钉工作台承载了浙大所有移动端的业务应用,上万人教职工均采用钉钉工作台,可它打开需要5s+的时间(用户最满意的打开网页时间是2s以下),这无疑将对网上教学活动造成巨大负面影响,然而问题到底出现在哪些节点?浙大信息中心急需快速定位并优化这些问题节点。

3. 400台机器是增还是减,如何合理配置?

浙大信息中心的机房,目前总机器数为400+服务器,可对各个网站现有机器能支撑多少访问量,是否可以下线部分机器,目前无可量化的办法。新网站在申请服务器的时候,也面临难以评估机器数量的问题,究竟该如何合理配置服务器资源呢?

4.几十个供应商,完成性能保障任务可能么?

浙大拥有众多功能类应用,大部分采用第三方外购的方式,不同应用交织,整体系统架构错综复杂,链路节点数量庞大,一条核心链路就涉及多家供应商,发现性能故障后,如何快速精准定位链路故障节点是一大难点。生产环境全链路压测是性能保障的最佳选择,该技术主要通过2种方式来实现,一是改造系统中间件,二是植入探针。若采取改造中间件的方式就需要协调各方供应商的开发资源来进行系统代码改造,工程量大,耗时长;若采取植入探针方式,那多方应用与探针的适配性也是需要考虑的问题。

解决方案

为了协助浙大落实“停课不停教,停课不停学”,数列科技采取了一系列的保障措施与解决方案,其中最重要的就是对核心链路进行生产环境的全链路压测与监控。

1.生产环境真实模拟,发现优化性能问题50多个

系统迁移工作完成后,我们对照业务流程图,对整个业务系统进行了全链路压测和性能链路追踪分析,这次压测涉及到了钉钉工作台、统一登录、学在浙大、智学课堂、应用整合系统、OA系统、流程平台等等。

秉持一样的环境、一样的场景、一样的量级三大原则,我们在浙大师生使用的真实系统中,还原真实教学场景中的操作流程,模拟真实数量的师生人数进行压测,通过压测了解系统的并发量、可能存在的系统缺陷,进而升级改造,逐步推进系统的健康稳定。

最终结果如下:共计提前发现并优化50+性能问题,其中【统一登录系统】12个,【钉钉工作台】11个,【学在浙大】26个……

2.精准定位问题节点,打开速度从5秒变为1秒

多轮压测之后,我们提前发现了一系列问题,之前一直困扰浙大信息中心团队的“登录和加载慢问题”,也很快找到原因并得以解决。

【统一登录系统】需要多次重定向才能完成获取认证信息完成登录,因此导致登录请求需要重复认证,进入系统的时间长;

解决方案:降低多次重复重定向认证,减少重定向次数,同时本地缓存认证信息加快认证速度。

【钉钉工作台】静态资源加载缓慢耗时长、css/js文件未压缩,资源比较大使得钉钉工作台进入缓慢。

解决方案:静态资源采用CDN分发加速的同时nginx开启gzip压缩,还有就是css/js静态文件使用压缩版文件。

最终通过性能定位及持续跟踪优化后,页面响应时间从5秒优化到了1秒,系统运行和用户体验变得更加流畅。

3.优化资源配置,节约20%+服务器资源

Takin压测输出的压测报告为技术人员优化服务器配置提供了量化依据,根据压测数据对各个应用、单个机器、集群服务器进行准确的容量水平评估,给出服务器配置建议,增加部分服务器用以支援数据库链接、门户资讯等重要服务,在保障系统稳定运行的同时缩减其他非核心链路的服务器资源,避免过度配置,最终节约出20%的服务器资源,降低了几十万的硬件成本。

4.两大产品助力,协同供应商高效完成任务

Takin采用的是agent无侵入式部署,各个应用系统的供应商基本不需要人员与时间投入来改造系统代码,且经过多年实践积累LinkAgent目前已兼容11种大类、99个大版本、356个小版本中间件,囊括了市面上的主流中间件,基本可以满足多供应商系统的部署需求,省时又省力。

智能巡检E2E助力“网上浙大”教育系统建立可视化的性能监控体系,链路监控可以直接展现整个链路中存在性能瓶颈的微服务架构节点,找出节点所在的应用即可定责并快速协同供应商进行整改优化。

2020年,2月24日早上8:00,浙江大学春学期第一堂课按照原教学计划全部100%顺利开课。24日当天,据统计共开课700余门,涉及近千个教学班。统一身份认证通过学在浙大和浙大钉分别认证了541986和279825次。学在浙大平台当日总访问量突破100万次,在线最高访问量11万余次,访客数近3万余人。整个疫情期间,教学系统运行稳定。

浙大信息中心的实践证明,生产环境全链路压测与监控体系的引入,不仅解决了系统链路的隐藏风险,提升了系统性能的稳定性,而且建立起了一套化被动解决故障为主动发现解决问题的IT性能评估体系,相信可以为以后浙大网上服务系统的性能完善带来不小的帮助。

如果你也对生产环境全链路压测技术感兴趣,Takin的核心功能已正式开源,欢迎使用。

详细了解Takin: https://news.shulie.io/?p=3024

加小树入群交流

短短 29 天,应对高峰 100W+ 访问,看浙大如何交出满分答卷的更多相关文章

  1. 如何用python做出老师看了都给满分的GUI学生管理系统毕设

    序 言 哈喽大家好鸭!我是小熊猫 最近有什么有趣的事情发生吗?快来说给我听听( •̀ ω •́ )✧表弟大学快毕业了,学了一个学期Python居然还不会写学生管理系统,真的给我丢脸啊,教他又不肯学,还 ...

  2. 你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对?

    你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对? 你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如果计算 ...

  3. 假如想要建设一个能承受500万PV/每天的网站,服务器每秒要处理多少个请求才能应对?

    假如想要建设一个能承受500万PV/每天的网站,服务器每秒要处理多少个请求才能应对?如何计算? 1.PV是什么:PV是page view的简写.PV是指页面的访问次数,每打开或刷新一次页面,就算做一个 ...

  4. HTTP协议详解以及URL具体访问过程

    1.简介 1.1.HTTP协议是什么? 即超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准.从 ...

  5. 《大型网站系统与JAVA中间件实践》读书笔记-数据访问层

    数据访问层 5.1.2数据库垂直/水平拆分的困难 随着网站业务的快速发展,数据量和访问量不断上升,数据库的压力越来越大. 更换更好的硬件(Scale Up)是一种解决方案,而且在我们能付得起硬件费用并 ...

  6. tftp 限制ip 限制ip段 或者多个ip段访问

    1 限制单个ip访问 tftp 配置tftp信息 vi /etc/xinetd.d/tftp 在 service tftp配置信息中添加  only_form =ip 重启 service xinet ...

  7. 在Linux系统中如何设置APACHE服务器里的后台页面只允许某个IP地址访问

    补充资料 本网络中使用LINUX服务器,web服务器是由APACHE搭建,IP地址为192.168.1.5,后台页面为/admin/login.jsp . 如何设置后台页面LOGIN.JSP只允许19 ...

  8. SqlBulkCopy 插入100W条数据时 属性BatchSize的作用

    (1)100W条insert语句在一个连接内一句一句加 花了01:17:19.0542805 (2) SqlBulkCopy 插入100W条数据 设置BatchSize=500 耗时:00:03:29 ...

  9. apache本地和局域网访问设置

    apache本地和局域网访问设置 最近做项目需要同事ajax发项目给我,因为是测试环境,所以需要能访问我的服务器.我服务器直接用的wampserver.因为没有接触过,所以百度了一下,都是没有成功,后 ...

随机推荐

  1. 你的 SQL 还在回表查询吗?快给它安排覆盖索引

    什么是回表查询 小伙伴们可以先看这篇文章了解下什么是聚集索引和辅助索引:Are You OK?主键.聚集索引.辅助索引,简单回顾下,聚集索引的叶子节点包含完整的行数据,而非聚集索引的叶子节点存储的是每 ...

  2. openwrt开发笔记三:uci移植及API调用

    1.uci编译安装.移植 安装依赖 libubox #安装cmake sudo apt-get install cmake #下载依赖库libubox git clone http://git.nbd ...

  3. FTP协议简介

    1. FTP协议概述 FTP协议的英文全称为File Transfer Protocol, 简称为FTP, 它是从一个主机向一个主机传输文件的协议. FTP协议中客户端和服务器进行文件交互的方式如下图 ...

  4. ysoserial CommonsColletions6分析

    CC6的话是一条比较通用的链,在JAVA7和8版本都可以使用,而触发点也是通过LazyMap的get方法. TiedMapEntry#hashCode 在CC5中,通过的是TiedMapEntry的t ...

  5. msf宏钓鱼

    kali下载python脚本,生成rtf文件: 下载脚本:git clone https://github.com/bhdresh/CVE-2017-8759.git 生成rtf文件: python ...

  6. <input type="file">如何实现自定义样式

    利用样式覆盖来实现效果:先看下原本和改变后的样式 1 <!doctype html> 2 <html> 3 <head> 4 <title>file自定 ...

  7. 用Java写了一个程序,将一个Mysql库中的表,迁移到另外一个server上的Mysql库中

    用Navicat做数据迁移,因为数据量比较大,迁移过过程中一个是进展不直观,另外就是cpu占用率高的时候,屏幕跟死机了一样点不动按钮,不好中断. 想了想,干脆自己写一个. 在网上找了一个sqllite ...

  8. POJ2251——Dungeon Master(三维BFS)

    和迷宫问题区别不大,相比于POJ1321的棋盘问题,这里的BFS是三维的,即从4个方向变为6个方向. 用上队列的进出操作较为轻松. #include<iostream> #include& ...

  9. 一起搞懂PHP的错误和异常(二)

    上回文章中我们讲到了错误是编译和语法运行时会出现的,它们与逻辑无关,是程序员在码代码时不应该出现的,也就是说,这些错误应该是尽量避免带到线上环境的,他们不能通过try...catch捕获到.而异常则正 ...

  10. Jmeter系列(25)- 常用逻辑控制器 (4) | Include控制器Include Controller

    认识 Include Controller Include Controller :译为包含控制器,用来添加 Test Fragment(测试片段).具体是什么意思呢,我们先来了解下 Test Fra ...