APP下载

基于架构优化提升高校选课系统性能

2018-11-05丁建峰

科教导刊 2018年23期
关键词:负载均衡

丁建峰

摘 要 高校选课系统在实际选课活动中屡屡瘫痪,需要采用何种方式来改善其整体性能?这里从架构优化的角度,提出了系统架构优化的路径,给出了适用于不同访问规模、改造成本、技术要求的架构方案,并提出了系统架构优化实施的基本步骤。

关键词 选课系统 架构优化 Nginx 负载均衡 LVS

中图分类号:G473.4 文献标识码:A DOI:10.16400/j.cnki.kjdkz.2018.08.008

Abstract The course selection system in colleges and universities is often paralyzed in the actual course selection activities. How to improve its overall performance? From the perspective of architecture optimization, this paper puts forward the way of system architecture optimization, gives the architecture scheme suitable for different access scale, transformation cost and technical requirements, and puts forward the basic steps of implementation of system architecture optimization.

Keywords course selection system; architecture optimization; Nginx; load balancing; LVS

0 引言

為了满足学生大规模选课的需要,目前各高校普遍使用选课系统进行网上选课。各校在选课的过程中普遍遇到了系统拥堵、服务瘫痪的问题。主要原因是为了公平起见各校通常指定某一时间开始选课,课程选课基于先选者先得,结果大量用户同时抢跑,平时运行稳定的系统迅速崩溃。

为了解决高并发访问下WEB应用系统的性能问题,已有不少研究和实践,主要有下述三类:一是如高宗振、[1]史强、[2]孔祥真 [3]等人对特定的负载均衡策略的研究;二是如谢佳运、[4]邓小善、[5]文捷等[6]从系统设计与开发角度对系统性能提升策略的讨论;三是综合上述两个维度的研究与实践,如潘旭武、[7]郝阳 [8]等人的研究。

这些研究比较侧重于特定的技术,如某一种负载均衡方案、某一种查询优化方法、某一种页面性能提升技巧或是若干种技术的综合运用,但采用了这些技术或方法未必可以解决选课系统的困境。负载均衡本身并不能解决选课系统的问题,一些学校为解决问题花数十万部署了负载均衡设备选课系统崩溃照旧。其他各种优化方法技术也只是在一定程度、某些环节上提升了系统的性能,在大规模并发访问情形下这些效果非常有限。要从根本上解决选课系统性能瓶颈问题,需从系统架构上进行改进,一个性能可伸缩的弹性架构才能真正应对大规模并发访问带来的挑战。本文将从系统架构的角度讨论选课系统性能优化的路径,并讨论了高校实施架构优化的具体步骤。

1 系统架构优化路径

有句话说“架构是进化而来的”,意指架构优化是针对现有状况不断改进的过程,是对现有的薄弱环节进行改进的过程。因此本文将从选课系统的初始状态开始根据访问量的增加逐步改进系统架构。

1.1 基于DNS对WEB站点层进行扩展

选课系统典型的初始架构为“浏览器——单WEB服务器——单数据库服务器”模式,随着用户并发访问量的增加,通常WEB服务器首先出现服务瓶颈,因此首先要着手对WEB站点层进行水平扩展。

图1是在初始架构基础上通过DNS对WEB站点进行水平扩展的示意图,这是一种低成本且十分有效的扩展模式,理论上WEB服务器数可以无限扩展。具体只需要将各WEB站点IP解析在同一个域名下,用户访问该域名时,DNS轮动返回各个IP。如此实现了对WEB服务器的负载均衡。这种方式可以迅速扩展WEB站点规模,但有下列弊端:

(1)DNS不会感知到具体WEB站点的可用性,当某个WEB站点服务故障(如网络中断、系统崩溃等),用户对这个站点的访问将失败。

(2)扩容非实时。DNS域名解析的生效需要一个刷新周期。特别是在公网运营商DNS缓存的刷新时间更长,可能会达数小时,会一定程度影响系统使用。

(3)暴露了各个WEB服务器的地址。因为是基于DNS解析的,所以每个WEB服务器的IP都需公开。这带来了潜在的风险。

1.2 基于Nginx对WEB站点层进行扩展

为了避免图1 DNS负载均衡模式的问题,可以改用反向代理Nginx对WEB站点层进行水平扩展,见图2。Nginx是一个高性能的 HTTP 和反向代理服务器,也是目前使用最为广泛的HTTP软负载均衡器。它可以承担相当高的负载压力,一般能支撑超过每秒数万次的访问请求(与服务器的配置及服务的优化程度有关),甚至有服务器经优化后达到了支持每秒数十万的访问请求的水平。Nginx支持对故障WEB站点的探测感知,能够把流量引导到非故障的WEB站点,同时也没有DNS负载均衡模式下暴露过多IP、扩容非实时等问题。但这种模式也有缺点:(1)多了一个反向代理层,架构变复杂,多了一道反向代理层的延时。(2)反向代理层的Nginx为单点部署,如发生故障系统将不可访问。这对于选课这样的大规模正式活动来说是一个风险。

1.3 通过Nginx集群解决反向代理层高可用问题

为避免图2中反向代理层的单点故障风险,图3用两台Nginx组成一个集群,分别部署Keepalived,设置成相同的虚IP,实现Nginx负载均衡服务的高可用。当一台Nginx挂了,Keepalived能够探测到并将流量自动迁移到另一台Nginx上。Keepalived是一个运行于Linux下的开源软件,主要提供负载均衡和高可用功能。图3方案解决了反向代理层的高可用问题,但是Nginx集群的资源利用率下降到50%(一主一备)。对于万人以下的院校来说,选课活动每秒的HTTP请求峰值一般在10万以下,该架构的WEB站点响应能力应能满足要求,最多再适当提高Nginx服务器的配置应能解决问题。但对于更大规模的并发访问,超过了Nginx服务器单机系统的处理能力,该如何解决?

1.4 反向代理层性能瓶颈的解决

要解决图3中反向代理层Nginx集群的性能瓶颈,可以基于DNS对反向代理层进行水平扩展(图4),原理与图1中DNS对WEB站点层扩展相同。这个方案下,反向代理层的Nginx集群可以无限扩展,实现了高性能与高可用;WEB站点层同样可以不断扩展,实现了高性能和高可用。

图4方案中Nginx集群也可以使用其他负载均衡集群代替,如LVS(Linux Virtual Server)或F5集群。替换后,负载均衡层多个LVS或F5集群也通过DNS实现弹性扩展。相较Nginx,LVS或F5有着更强的处理性能,但部署成本上升。

1.5数据层架构的优化与扩展

系统架构改到图4的程度,至少到WEB站点层为止高性能、高可用都得到了保证,但此时数据库很可能成为瓶颈了。数据层同样需要进行改进,数据层库架构优化的目的同样是实现高性能、高可用。

常见的是对数据库实施主从分离、读写分离。从库从主库进行复制用于读取,主库用于写操作。通过设立多个从库可保证读的高可用,但没有解决写的高可用(以及高性能),另外主库写入数据、从库读取数据的时间差会造成两者数据不一致。主、从库越多数据一致性的问题就越多,这些都要额外的算法控制。

数据库 “master--shadow master”双主架构可以解决主从库数据不一致的问题。主库master提供读写服务,另一个是影子主库shadow-master平时只与master进行数据同步并作为后备,master挂了后shadow-master迅速顶上变为master。这个模式同时解决读写的高可用,并且消除了数据的不一致性问题。但双主模式,没有解决高性能,如何提高性能呢?

首先增加缓存,见图5。读数据时首先从缓存读取,缓存没有再到主库读(然后数据也复制到cache一份)。但是主库也是写的目标库,因此主库与缓存之间也会出现数据不一致问题。解决办法是写之前淘汰缓存数据。图5中还增加了服务层,这是因为缓存引入、数据一致性处理等使得对数据库的操作更加复杂,为了屏蔽这些细节,让上层专注于业务,因此系统架构中应增设服务层负责具体的数据库访问,并对上层(WEB站点层)提供透明数据服务。

其次是对数据库进行水平扩展,也就是进行水平切分。水平切分就是把原来一个库中的数据切分一部分到其他的库中去,但各库之间结构是相同的。选课系统中这种方式尤其适用,如学生表,完全可以把已毕业的学生数据分到另一个库中,也可以根据入学年份进行切分,从而提高数据库访问性能。图5进行数据库切分后,变为2个库,见图6;还可以切分为更多的库。这样数据层的水平扩展得以实现,根本上解决了数据层的性能瓶颈。

1.6 服务层的扩展

数据层变得复杂后,需要引入服务层,如图6所示。但是在大规模并发访问下,服务层节点也可能成为一个性能瓶颈。服务层的水平扩展是通过WEB站点层中“服务连接池”来进行的,增加一个服务层节点只需要再WEB站点的“服务连接池”中增加一个连接。理论上服务节点也是可以无限扩展的。服务层的增加与扩展需要开发商的支持。

到此,系统在负载均衡层、WEB站点层、服务层、数据层都实现了弹性扩展,都能提供高性能、高可用的服务,大规模并发选课问题得到了根本性的解决。

2 系统架构优化的实施

2.1 架构优化的前期准备

系统架构的优化与扩展,有些是需要开发商支持的,如数据库架构的改造、缓存的设计与使用、服務层的引入等,有的可能甚至需要开发商进行比较大的改动;有些是高校方面比较容易实施的,如负载均衡层、WEB站点层的水平扩展等。各校应该根据开发商的支持力度、系统改造的预算情况、自身的技术能力、现有的设备设施以及网上选课工作的具体任务情况研究架构优化的具体实施方案。

2.2 系统架构优化的步骤

系统的性能优化需要理清思路,按步骤实施。

(1)根据实际条件确定优化的目标架构。比如开发商目前不会也没有时间对系统层次、数据库架构进行改动,那么图4可以作为一个系统架构优化的基本模型;如果选课人数也不是很多,那么可以选图3或图2;如果对Ngnix也不熟悉或来不及部署,那么也姑且可以用图1来应对。

(2)按选定的目标架构基本模型的未扩展状态调整原有系统。对调整后系统在未扩展状态下进行压力测试,确定其系统性能,能支持多少并发连接以及多快的响应能力。

(3)对相关层次进行一个节点的扩展,进行压力测试,记录其性能的增量。压力测试工具可以用Loadrunner、Jmeter、Tsung等。

(4)根据选课任务参与选课的学生数量估算峰值的并发连接、请求数量,估算相关层次节点的水平扩展数量并实施扩展。

(5)对扩展后的系统按峰值压力进行压力测试,如果没问题则投入实际使用,否则要找出问题进行调整,通过测试后再投入使用。

3 结语

本文从选课系统的初始架构开始,在并发访问规模不断加大、投入改造的预算逐步增加的假设下推出了选课系统架构优化的路径,并给出了系统架构优化的实施步骤。具体的方案需要各校结合实际情况来采用,同时需要注意各方案的局限点,比如“基于DNS对WEB站点层的扩展”需要保证各站点自身不出问题,如“基于Nginx(单机)对WEB站点层扩展”需要Nginx服务可靠同时注意其本身的性能上限。当然系统架构的优化还有其它很多方法,本文所给的方案仅供参考。

参考文献

[1] 高宗振.基于负载均衡的在线选课系统的研究与实现[D].青岛:中国海洋大学,2012.

[2] 史强,管红杰.基于云动态资源扩展的选课系统优化实践[J].软件导刊,2016.15(6):77-79.

[3] 孔祥真,张丁,李忠远.Linux负载均衡集群技术在网络服务器中的应用[J].软件导刊,2016.15(12):144-147.

[4] 谢佳运. ASP.NET网站的系统架构和性能优化[J].电脑知识与技术,2008.3(6):1166-1167.

[5] 邓小善,龙艳军.高访问量网站性能监测与优化的设计与实现[J].现代计算机,2009(301):149-151.

[6] 文捷,吴庆杰,陈翼,等.复旦大学选课系统的性能优化策略研究和实践[J].中山大学学报(自然科学版),2009.48:95-99.

[7] 潘旭武,陈启华,张建勇.高校选课系统性能优化研究[J].中国教育信息化,2013(5):76-78.

[8] 郝阳.高校教务管理网上选课系统优化研究[D].青岛:山东科技大学,2011.

猜你喜欢

负载均衡
LBS检索容灾架构研究
Linux负载均衡集群技术在网络服务器中的应用
Oracle MAA在汽车行业电子政务平台中的应用
社区教育平台运营策略研究
异构环境下改进的LATE调度算法
基于负载均衡的云资源调度策略研究
基于新型VPN 技术的高校校园网改造
基于云计算的虚拟实验系统的设计及应用
基于离散PSO算法的医疗云存储部署策略
多站点同步更新系统的设计