声明:本文为本人在软考系统架构设计师备考期间的练手写作,不保证内容的原创性与正确性,仅供参考,请勿照抄和用于学术论文等正规场合,因不当使用产生后果一律自负。

摘要

  2019年3月,我单位联合某高校研发了《程序在线评测比赛考试系统》。系统以程序代码在线提交自动评测功能为核心,分为题库模块、评测机模块、实验作业模块、考试模块、比赛模块、抄袭判定模块、用户管理模块等,支持对接教务平台。在项目中我担任系统架构师,负责架构设计工作。
  本文以该系统为例,主要论述了面向服务的架构在项目中的具体应用。系统划分为前端Web服务、平台保障服务、业务服务。前端Web服务由Nginx负载均衡与服务器集群结合,解决前台界面的并发问题;平台保障服务以Eureka为中心,分为API网关、服务注册中心、监控平台,用以实现基础服务框架;业务服务基于Spring Cloud开发,分为多个服务,实现具体业务功能,解决协同问题。最终系统顺利上线,获得用户一致好评。

正文

  笔者在一个专为高校建设计算机专业智能教学一体化平台的单位任职,过往成果有《计算机组成原理仿真实验系统》等。2019年3月,我单位联合某大学研发了《程序在线评测比赛考试系统》项目(以下简称为“OJ系统”),以取代原有传统的编程上机考试平台。
  系统以程序代码的在线提交自动评测功能为核心,主要分为题库模块、评测机模块、实验作业模块、考试模块、比赛模块、抄袭判定模块、用户管理模块等。题库模块主要负责试题和测试用例的管理,用户根据试题要求编写程序代码提交到系统,系统将测试用例与程序代码发送给评测机模块,由评测机自动编译、执行、判分,并将结果发送给其他相关模块进行统计;实验作业模块用于在线布置作业,从题库中选取试题,设置截止日期等要求;考试模块用于学生在线考试,按教师预先设置的参数自动从题库随机抽题生成试卷,以及向教务平台上传考试成绩;比赛模块主要用于ACM竞赛的培训;抄袭判定模块用于鉴定代码与他人代码雷同率;用户管理模块负责用户信息的管理。在这个项目中,我担任了系统架构师的职务,主要负责系统的架构设计相关工作。
  我们使用面向服务的架构(SOA)来设计OJ系统。SOA技术参考架构包含6类服务:业务逻辑服务、控制服务、连接服务、业务创新和优化服务、开发服务、IT服务管理。业务逻辑服务用于实现和执行业务逻辑,包括业务应用服务、业务伙伴服务、应用和信息资产;控制服务实现人、流程和信息的集成以及执行集成逻辑;连接服务通过企业服务总线,实现在各服务间的连接件;业务创新和优化服务用于监控业务系统运行时的业务性能,并采取措施适应变化的市场;开发服务贯彻整个软件开发生命周期的开发平台,提供全面的工具支持;IT服务管理支持业务系统运行的各种基础设施管理能力或服务,如安全服务、目录服务、系统管理和资源虚拟化。
  系统以基于Spring Cloud框架的微服务架构作为SOA的实现方式,使用Java语言开发,将平台服务划分为三类,分别为前端Web服务、平台保障服务、业务服务。下面针对这三类服务展开具体说明。

1. 前端Web服务

  前端Web服务主要提供给用户使用的界面,分为前置Nginx负载均衡服务器、前端网站Nginx集群。当用户通过网络访问系统时,首先会访问到前置的Nginx负载均衡服务器,负载均衡服务器会将请求转发到前端网站的Nginx集群,前端网站通过发起Http请求来和后端交互,具体是通过Ajax方式来调用后端REST API接口。用户访问网站通过前置的Nginx负载均衡服务器来转发到前端网站集群,以起到将用户请求进行分流的作用。当前端网站集群中的部分服务发生故障时,系统仍可正常地对外提供服务。前置Nginx负载均衡服务器使用软件反向代理的方式来实现负载均衡,部署为路由模式,系统内部网络与外部网络分属于不同的逻辑网络,以实现系统内部与外部网络的隔离。在负载均衡算法的选择上,使用最小连接法,每当用户的请求来临时,任务分发单元会将任务平滑分配给最小连接数的前端网站节点,这样的架构以廉价且透明的方式扩展了服务器和网络的带宽,可以大大提升系统的并发量,同时保证网站前端整体的稳定性和可靠性。

2. 平台保障服务

  平台保障服务用以实现后端业务服务的基础框架,包括API路由网关、服务注册中心、服务监控组件。API网关收到前端的请求,不会直接调用后端的业务服务,而是首先会从服务注册中心根据当前请求来获取对应的服务配置,随后通过服务配置再调用已注册的服务。当后端服务存在多个实例时,将采取负载均衡的方式调用。服务注册中心是整个后端服务架构体系的核心部分,由Spring Cloud的Eureka组件来实现,专门提供服务的注册和发现功能,涉及三种角色:服务提供者、服务消费者和服务注册中心。API路由网关、所有业务服务,以及服务监控平台组件都注册到服务注册中心。通过服务注册中心两两互相注册、API路由网关向服务注册中心注册多个实例等方式,来实现后端整体服务的高可靠性。服务监控平台通过注册到服务注册中心,获取所有注册到服务注册中心的后端业务服务,从而监控到所有后端业务服务的运行状态信息,最后收集并展示整个后端服务系统的运行状态,更进一步保证整个后端的服务质量。

3. 业务服务

  业务服务按系统业务模块,相应划分为题库服务、评测机服务、实验作业服务、考试服务、比赛服务、抄袭判定服务、MQ队列服务等。服务间协同工作,通过松耦合的服务发现机制,来动态调用对方的REST API接口。其中,对于压力较大的服务,如评测机服务、抄袭判定服务等,将部署为多实例集群。以在线考试功能为例,用户进入考试时,考试服务核验考生信息通过后,根据预先设置的参数,调用题库服务,题库服务返回试题信息,由考试服务组合为试卷,返回前端显示。用户交卷时,提交的程序代码到达考试服务,考试服务拆分后分发给题库服务,题库服务将程序代码和测试用例送入MQ队列排队。然后由负载均衡机制,依次将队列中排队的待评测程序分发给空闲的评测机服务编译、执行、判分,评测机服务完成评测后,将结果返回给题库服务和考试服务,题库服务进行试题通过率统计,考试服务进行成绩统计,以及向前端显示成绩。在这期间服务请求者无需了解其他服务对数据如何具体处理和分析。

总结

  系统自2019年10月正式上线已运行一年有余,在学校的日常教学考试和竞赛培训中投入使用,截至目前已有3000以上的学生用户、评测了70000条以上的程序代码,获得了单位同事领导和学校教师们的一致好评。在开发和试运行过程中,主要遇到了两个问题。一是跨域问题。OJ系统前后端分离,前端通过Ajax访问后端服务。由于浏览器同源策略的限制,导致前端UI无法正常访问不同端口和IP的后端服务。我们利用Spring Boot后端的Cors跨域机制解决了该问题。二是评测机宕机问题。评测机服务需要执行用户提交的代码,但由于部分用户短时间内提交了大量不安全代码,导致所有评测机服务全部宕机。我们引入心跳机制、快照回滚机制,以及基于机器学习技术的预判断机制,使评测服务宕机时能够在10秒内自动重置恢复运行,最终解决了该问题。
  实践证明,OJ系统项目能够顺利上线,并且稳定运行,与系统采用了合适的架构设计密不可分。经过这次面向服务的架构应用的方法和实施的效果后,我也看到了自己身上的不足之处,在未来还会不断地更新知识,完善本系统的架构设计,使整个系统能够更加好用,更有效地服务于高校师生。

论面向服务的架构及其应用相关推荐

  1. 基于面向服务体系架构(SOA)和面向资源体系架构(ROA)的业务组件模型

    引言 在<面向服务体系架构(SOA)和业务组件(BC)的思考>(以下简称< SOA 和 BC >)一文中介绍了基于面向服务体系架构(SOA)的组件模型,本文按照"分离 ...

  2. 亚马逊如何变成 SOA(面向服务的架构)?

    上一篇文章,我摘录了<程序员的呐喊>.这本书有趣的内容太多,今天再摘录一段. 1. 亚马逊公司不仅是世界最大的网络书店,还是世界最大的云服务商.它是怎么实现从电商到云商的转变呢? 一切都是 ...

  3. SOA (面向服务的架构)

    见:https://baike.baidu.com/item/SOA/2140650?fr=aladdin UDDI 解说参见:UDDI是什么 SOAP解说参见: SOAP:简单对象访问协议 面向服务 ...

  4. 面向服务的架构SOA

    一.什么是SOA SOA(Service-Oriented Architecture),即面向服务的架构. SOA是一种粗粒度.松耦合服务架构,服务之间通过简单.精确定义接口进行通讯,不涉及底层编程接 ...

  5. 谈谈SOA面向服务体系架构的安全问题

    谈谈SOA面向服务体系架构的安全问题 本文我们讨论的是面向服务体系架构(SOA)的安全应用.在展开讨论之前,首先让我们来解析面向服务体系架构的实际含义.面向服务体系架构是一种涉及若干以服务为导向的应用 ...

  6. SOA面向服务的架构概念梳理

    原文地址来自:http://baike.baidu.com/link?url=C9VVTLY58Vt1JyJy0oakTA5cPp8kgT375lOujSFWtyo05hQWAQ7XltmN2W1fe ...

  7. 软件架构设计---面向服务的架构

    面向服务的架构  迄今为止,对于面向服务的架构(Service-Oriented Architecture,SOA)还没有一个公认的定义.许多组织从不同的角度和不同的侧面对 SOA 进行了描述,较为典 ...

  8. SOA(面向服务的架构)

    SOA 是面向服务的架构,即企业的 IT 系统是由服务组成的,也即企业的各个应用系统是由许多标准的服务件"组装"起来的,组成应用系统中的各个服务之间是一种非常松耦合的关系. 服务基 ...

  9. SOA面向服务的架构设计

    目录 面向服务的架构 1 SOA 概述 1.1. 服务的基本结构 1.2.SOA 设计原则 1.3. 服务构件与传统构件 2 SOA 的关键技术 2.1. UDDI 2.2.WSDL 2.3.SOAP ...

  10. IFS应用系统-面向服务的架构(SOA)

    IFS面向服务的架构(SOA)有助于客户提高敏捷度与降低总持有成本(TCO) . http://www.ifsworld.com/cn/ IFS 应用系统建立在网络和门户技术基础上,提供了60多个 企 ...

最新文章

  1. ELK集群的搭建和Elasticsearchd api的简单使用
  2. 浅谈问题生成(Question Generation)
  3. MOSS 直接动态安装webPart到页面
  4. 前端学习(1612):oracle简介
  5. Linux工作笔记022---查看Centos 内核版本号
  6. 阿里巴巴宣布正自主研发AI芯片,性价比是同类产品40倍
  7. python编辑程序用print函数输出中国加油武汉加油_python练习1之print函数
  8. vue如何设置视频封面_vue制作朋友圈封面视频_朋友圈封面设置视频
  9. linux vim替换指定字符串
  10. DAMS峰会丨从数仓到数据中台,从数据资源到资产,京东、携程、快手等是怎么建设和演进的?...
  11. Excel如何合并相同项单元格
  12. CSS3 animation 动画用法介绍
  13. 泪目!这篇博士论文致谢走红:感谢博一与我结婚的妻子...
  14. 如何验证Mac的Time Machine备份是否正常工作
  15. Java后端开发需要掌握什么
  16. 二级分销商城系统开发软件
  17. 联发科嵌入式linux笔试
  18. python语句的输出结果_Python 3.x 语句 print(1, 2, 3, sep=':') 的输出结果为 _____
  19. Unity - 手动创建 dithering tex 3d
  20. ll1语法分析器c语言E-E T,一个c++编写的语法分析器(编译愿意LL(1)文法)

热门文章

  1. 最后一场2022卡塔尔世界杯预选赛,巴西队与阿根廷队不踢了
  2. 19小时精通Rasa 3.X 项目实战之教育行业Education Bot智能业务对话机器人
  3. 一种 用于GPT模型 训练的 包含加权 和 数据增强 和 损失方法 的设计
  4. python和土木工程_Python 的开发效率真的比 Java高吗?
  5. mongorepository简单使用
  6. 工作日志2009年、二
  7. linux系统下c语言的文件读写
  8. Python for i in range复杂用法
  9. CVE-2007-1157(jboss CSRF漏洞)
  10. 测试方法-边界值/因果图设计