短短 29 天,应对高峰 100W+ 访问,看浙大如何交出满分答卷
疫情期间“停课不停教,停课不停学”,线上开课第一天,浙江大学网上开课平台访问量即突破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+ 访问,看浙大如何交出满分答卷的更多相关文章
- 如何用python做出老师看了都给满分的GUI学生管理系统毕设
序 言 哈喽大家好鸭!我是小熊猫 最近有什么有趣的事情发生吗?快来说给我听听( •̀ ω •́ )✧表弟大学快毕业了,学了一个学期Python居然还不会写学生管理系统,真的给我丢脸啊,教他又不肯学,还 ...
- 你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对?
你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对? 你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如果计算 ...
- 假如想要建设一个能承受500万PV/每天的网站,服务器每秒要处理多少个请求才能应对?
假如想要建设一个能承受500万PV/每天的网站,服务器每秒要处理多少个请求才能应对?如何计算? 1.PV是什么:PV是page view的简写.PV是指页面的访问次数,每打开或刷新一次页面,就算做一个 ...
- HTTP协议详解以及URL具体访问过程
1.简介 1.1.HTTP协议是什么? 即超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准.从 ...
- 《大型网站系统与JAVA中间件实践》读书笔记-数据访问层
数据访问层 5.1.2数据库垂直/水平拆分的困难 随着网站业务的快速发展,数据量和访问量不断上升,数据库的压力越来越大. 更换更好的硬件(Scale Up)是一种解决方案,而且在我们能付得起硬件费用并 ...
- tftp 限制ip 限制ip段 或者多个ip段访问
1 限制单个ip访问 tftp 配置tftp信息 vi /etc/xinetd.d/tftp 在 service tftp配置信息中添加 only_form =ip 重启 service xinet ...
- 在Linux系统中如何设置APACHE服务器里的后台页面只允许某个IP地址访问
补充资料 本网络中使用LINUX服务器,web服务器是由APACHE搭建,IP地址为192.168.1.5,后台页面为/admin/login.jsp . 如何设置后台页面LOGIN.JSP只允许19 ...
- SqlBulkCopy 插入100W条数据时 属性BatchSize的作用
(1)100W条insert语句在一个连接内一句一句加 花了01:17:19.0542805 (2) SqlBulkCopy 插入100W条数据 设置BatchSize=500 耗时:00:03:29 ...
- apache本地和局域网访问设置
apache本地和局域网访问设置 最近做项目需要同事ajax发项目给我,因为是测试环境,所以需要能访问我的服务器.我服务器直接用的wampserver.因为没有接触过,所以百度了一下,都是没有成功,后 ...
随机推荐
- AFL++初探-手把手Fuzz一个PDF解析器
CVE-2019-13288 目前漏洞在正式版本已经被修复,本文章仅供学习Fuzz过程,不存在漏洞利用的内容 这是一个pdf查看器的漏洞,可能通过精心制作的文件导致无限递归,由于程序中每个被调用的函数 ...
- 利用 Spring Boot 中的 @ConfigurationProperties,优雅绑定配置参数
使用 @Value("${property}") 注释注入配置属性有时会很麻烦,尤其是当你使用多个属性或你的数据是分层的时候. Spring Boot 引入了一个可替换的方案 -- ...
- tslib移植arm及使用
测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 tslib 1.4 下载 https://gitlab. ...
- Python - pip-review 库
使用 pip-review 库(推荐) 安装库 pip install pip-review 检查是否有需要更新的包 > pip-review scikit-learn==0.23.2 is a ...
- 使用python快速搭建http服务
python2语法:python -m SimpleHTTPServer python3语法:python -m http.server 在局域网中使用web去访问http:/IP:8000即可 可以 ...
- Git 初识和使用
目录 目录 目录 概念 工作区/暂存区/版本库 master 版本号 常见命令 环境搭建 Linux 下 Git 和 GitHub 环境的搭建 Git 本地操作 本地仓库的创建和使用 查看信息 查看状 ...
- Docker 安装 MySQL5.6
方法一.docker pull mysql查找Docker Hub上的mysql镜像 #docker search mysql 这里我们拉取官方的镜像,标签为5.6 #docker pull mysq ...
- .Net core 的热插拔机制的深入探索,以及卸载问题求救指南.
.Net core 的热插拔机制的深入探索,以及卸载问题求救指南. 一.依赖文件*.deps.json的读取. 依赖文件内容如下.一般位于编译生成目录中 { "runtimeTarget&q ...
- Linux 文本相关命令(1)
Linux 文本相关命令(1) 前言 最近线上环境(Windows Server)出现了一些问题,需要分析一下日志.感觉 Windows 下缺少了一些 Linux 系统中的小工具,像在这波操作中用到的 ...
- TS基础笔记
TS优势 更好的错误的提示,开发中及时发现问题:编辑器语法提示更完善:类型声明可以看出数据结构的语义,可读性更好; TS环境搭建 1.安装node;2.npm install typescript@3 ...