系统架构图_基于,LAMP,架构的,ACMICPC在线评测系统设计

系统架构图_基于,LAMP,架构的,ACMICPC在线评测系统设计,第1张

  摘 要 本课题在牡丹江师范学院已有的在线评测系统上进行全面重构,将 OJ 系统各个组成部分进行解耦,使得 OJ 系统各个模块之间独立性增强,容易修改现有功能及扩充新功能,以应对举办比赛时的访问压力。包括本课题的系统架构设计,对其下各个模块核心内容的阐述,包括基于 Linux 系统的沙箱模型、基于 Java 的多线程服务器、基于AMP 架构和 MVC 设计模式的 Web 前端系统的设计与实现,以及影响系统安全的各种因素和对应的解决方案。

关键词 在线评测系统 ACM/ICPC LAMP 架构

中图分类号:TP31152             文献标识码:A

0 绪论

ACM/ICPC 目的旨在使大学生运用计算机来充分展示自己分析问题和解决问题的能力。在线评测系统(Online Judge System,以下简称 OJ)起到了非常重要的作用。集训队员可以在线评测系统上挑选各种题目挑战自我,提高自我,学习各种数据结构和算法;在统一组织的集中训练中可以通过指定题目的形式来强化训练效果;而在线评测系统对比赛功能的支持,进一步提高了集训队员的学习热情,同时还可以模拟比赛的环境,培养那些计划参与 ACM/ICPC 赛事的队伍的团结合作能力。

但是其中大部分OJ 系统是闭源、封闭的,无法获取其源代码进行修改扩充以满足现有需求,牡丹江师范学院 ACM/ICPC 集训队才于 2010 年推出自己的OJ。但是该系统存在几个问题:一,效率不足,无法承受每年牡丹江师范学院程序设计大赛预选赛的压力;二,由于该系统没有应用沙箱技术运行用户代码,存在安全隐患,可能直接导致服务器被劫持。此后,Google Code 上陆续出现了几个开源 OJ 系统,但是在架构设计上仍不够完善,且无法与原系统的数据格式兼容,因此,有必要重新开发一个经过合理设计的新 OJ 系统,从根本上解决上述的问题,为集训队提供一个稳定可用的学习环境。

1 系统架构设计

为了方便用户的使用,本系统采用 B/S 架构,只要用户使用的是有网络接入的计算机,就可以通过浏览器进行访问。根据该系统的具体情况,在设计上将其分为以下四个组成部分:(1)网站系统(Web 端);(2)评测核心(Judge);(3)评测核心封装层(Judge Wrapper);监听守护进程(Daemon)。

在设计上,该项目将系统的几个主要组成模块充分解耦,一方面,多个模块之间可以并行开发;另一方面,各个模块解耦后使得系统的修改和扩充更加容易,每个模块的可重用性也相应增强。例如,当其他学校需要实现一个功能界面完全不同的 OJ 系统或是作业平台时,可以直接采用本项目的评测核心,避免重复开发。

2 评测核心的设计与实现

作为在线评测系统中最核心的部分,尤其是需要监控用户运行,需要涉及到很多相关技术,特别是与系统底层关系密切的技术。在 Linux 下,系统调用的实现通常是用户程序通过触发80号软中断或者执行 SYSCALL/SYSENTER 等平台相关的 CPU 指令陷入到内核中,内核通过寄存器获 取用户程序的输入,在通过严格的检查后执行相应操作。

在本系统中涉及的主要系统调用包括 fork、setitimer、execve、wait、ptrace、setrlimit、chroot、setuid 等。

(1)fork 系统调用通过复制调用进程的上下文来创建一个新进程。(2)setitimer 系统调用用于设置定时器。(3)execve 系统调用用于载入一个新的可执行程序,替换当前进程的地址空间。(4)wait 系统调用允许父进程阻塞,直到子进程发生一些事件。(5)ptrace 系统调用是一个可以使父进程在用户层拦截和修改系统调用的函数,可以监控和控制其他进程,该函数还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪。(6)setrlimit 系统调用可以改变进程的资源限制。(7)chroot 系统调用使得调用进程的将某一目录当作其根目录,以此限制该进程及子进程对该目录外文件的访问。(8)setuid 系统调用允许进程改变其有效用户 ID。在本系统中,用户提交的代码可能存在恶意,对其编译后的程序需要运行在服务器上,因此必须对其进行严密的监控,防止恶意代码带来的危害。在本系统支持的四种语言中,C、C++、Pascal 三者经过编译后产生本地代码,可以通过Linux 系统调用(主要是 fork、execve、chroot、setuid 和 ptrace)来创建一个沙箱,限制恶意代码访问文件、控制系统的权限,尤其是通过 ptrace 来限制可使用的系统调用,在很大程度上保证了系统的安全。

运行时检测是最重要、最复杂的运行时监控机制。本系统中通过 ptrace 系统调用来监控用户进程。每当用户进程出发一个系统调用,或者是收到某些信号的时候,用户进程会将控制权暂时移交给监控核心。监控核心将严格监控用户进程的各项参数,以保证其不执行危害系统安全的操作:(1)检查程序是否正常退出。(2)检查程序是否收到了非正常的信号。(3)通过进程的缺页中断次数计算进程使用的内存资源是否超出限制。(4)检查进程系统调用是否合法。

在以上四项检测都不存在问题的情况下,用户进程才能继续执行。

由于题目根据其合法结果数量可以分成普通类型和 Special Judge 类型,因此针对不同的类型,需要分别对其进行判断。(1)普通类型的题目,其合法结果唯一,因此只需要简单判断用户程序与标准答案的一致性即可。(2)Special Judge 类型的题目,在本系统中,约定了 SPJ 程序的名称以及数据的传递方式,包括标准输出、用户输出,以及 SPJ 程序的数据,由评测核心调用 SPJ 程序来完成最后的评判过程。

3 评测核心层的设计与实现

每当用户提交一份新的代码,Wrapper 即会被调用,从数据库中获取代码的详细信息。在此阶段需要关注的信息主要包括:(1)用户提交的代码本身及其关键属性(如语言类型)。(2)此代码的提交用户类型,是普通用户还是管理员。(3)此代码所属的题目是否处于正在进行的比赛。(4)此代码是否已经被评测过。

问题一:“系统架构”是什么意思?都有哪些架构? JDE属于分布式架构,人和系统恕我孤陋寡闻,没听过阿

问题二:软件架构和系统架构到底是什?生活中有哪些东西可以比喻? 软件架构是指软件整体的组织结构,是在较高层次上的分析设计,体现了软件系统总体的规化、决策、控制等。

系统架构包括软件、硬件、网络等多方面的组织结构。架构是分析设计的高层阶段,不会涉及到技术实现的细节,是蓝图,是规化,是决策。

现实生活中可比喻为高楼大厦的设计图纸。

问题三:什么是架构 架构一般指软件架构

(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口(计算机科学)来实现。 软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。

软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出精确的定义很困难。特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。

在“软件构架简介”中,David Garlan 和 Mary Shaw 认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。结构问题包括总体组织结构和全局控制结构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。”GS93

但构架不仅是结构;IEEE Working Group on Architecture 把其定义为“系统在其环境中的最高层概念”IEEE98。构架还包括“符合”系统完整性、经济约束条件、审美需求和样式。它并不仅注重对内部的考虑,而且还在系统的用户环境和开发环境中对系统进行整体考虑,即同时注重对外部的考虑。

在 Rational Unified Process 中,软件系统的构架(在某一给定点)是指系统重要构件的组织或结构,这些重要构件通过接口与不断减小的构件与接口所组成的构件进行交互。

从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。一个软件架构师需要有广泛的软件理论知识和相应的经验来实施和管理软件产品的高级设计。软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑和流程。

一般而言,软件系统的架构(Architecture)有两个要素:

・它是一个软件系统从整体到部分的最高层次的划分。

一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。

详细地说,就是要包括架构元件(Architecture ponent)、联结器(Connector)、任务流(Task-flow)。所谓架构元素,也就是组成系统的核心砖瓦,而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和联结器完成某一项需求。

・建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。

在建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行详细设计甚至建造,这些决定就很难更改甚至无法更改。显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。

详情参考

>>

问题四:什么是系统工程师、系统架构工程师? 系统工程师资格就是具备较高专业技术水平,能够分析商业需求,并使用各种系统平台和服务器软件来设计并实现商务解决方案的基础架构。

系统架构师是大型项目的技术领导者,总体负责系统的体系结构设计和指导。

问题五:什么是分布式系统架构 baikebaidu/view/9914海9

问题六:架构,系统架构,技术架构,应用架构都是什么关系 架构

是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

系统架构

是对已确定的需求的技术实现构架、作好规划,运用成套、完整的工具,在规划的步骤下去完成任务。

技术架构

通过合理的完善的评估途径对组织、网络、程序的组成框架、模型进行评价和分析,并对其进行完善。

应用架构

以架构图的方式描述系统的组成和框架,一般从系统功能和系统技术层次两个架构视角进行设计。

问题七:请问系统架构设计师的职责是什么 系统架构师的职责主要有如下4条:

1、确认需求

在项目开发过程中,架构师是在需求规格说明书完成后介入的,需求规格说明书必须得到架构师的认可。架构师需要和分析人员反复交流,以保证自己完整并准确地理解用户需求。

2、系统分解

依据用户需求,架构师将系统整体分解为更小的子系统和组件,从而形成不同的逻辑层或服务。随后,架构师会确定各层的接口,层与层相互之间的关系。架构师不仅要对整个系统分层,进行“纵向”分解,还要对同一逻辑层分块,进行“横向”分解。

软件架构师的功力基本体现于此,这是一项相对复杂的工作。

3、技术选型

架构师通过对系统的一系列的分解,最终形成了软件的整体架构。技术选择主要取决于软件架构。

Web Server运行在Windows上还是Linux上?数据库采用MSSql、Oracle还是Mysql?需要不需要采用MVC或者Spring等轻量级的框架?前端采用富客户端还是瘦客户端方式?类似的工作,都需要在这个阶段提出,并进行评估。

架构师对产品和技术的选型仅仅限于评估,没有决定权,最终的决定权归项目经理。架构师提出的技术方案为项目经理提供了重要的参考信息,项目经理会从项目预算、人力资源、时间进度等实际情况进行权衡,最终进行确认。

4、制定技术规格说明

架构师在项目开发过程中,是技术权威。他需要协调所有的开发人员,与开发人员一直保持沟通,始终保证开发者依照它的架构意图去实现各项功能。

架构师不仅要保持与开发者的沟通,也需要与项目经理、需求分析员,甚至与最终用户保持沟通。所以,对于架构师来讲,不仅有技术方面的要求,还有人际交流方面的要求。

问题八:系统架构师是干什么的啊? 属于项目的高级分析、规划、管理人员

系统架构师(System Architecture)系统架构师是负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单等等。

全文见百科

baikebaidu/view/905154fr=ala0_1_1

问题九:系统架构师的角 别 系统构架师与产品经理的关系及区别产品经理通常是指负责产品设计的“专人”。一个优秀的理想的产品经理,应同时具备较高的商业素质和较强的技术背景。产品经理要有深厚的领域经验,也就是说,对该软件系统要应用到的业务领域非常之熟悉。比如,开发房地产销售软件的产品经理,应该对房地产公司的标准销售流程了如指掌,甚至比大多数销售人员还要清楚。如果开发的是通用产品,他/她还具备对市场、潜在客户需求的深刻洞察力。那么,系统架构师与产品经理有什么不同呢? 我们不应该把二者混为一谈,这是不少论述和实践常犯的错误。我看来,如果把开发软件比作摄制**,产品经理之于系统架构师,就正像编剧之于导演。产品经理虽然要有一定技术背景,但仍应属于“商业人士(business people)”,而系统架构师则肯定是一个技术专家。二者看待问题的立场、角度和出发点完全不同。系统构架师与项目经理的关系及区别 软件项目经理是指对项目控制/管理,关注项目本身的进度、质量,分配、调动、协调、管理好人、财、物等资源的负责人。对于软件项目经理来讲,包括项目计划、进度跟踪/监控、质量保证、配置/发布/版本/变更管理、人员绩效评估等方面。优秀的项目经理需要的素质,并不仅在于会使用几种软件或是了解若干抽象的方法论原则,更重要的在于从大量项目实践中获得的宝贵经验,以及交流、协调、激励的能力,甚至还应具备某种个性魅力或领袖气质(Chari a)。 由此可见,项目经理和系统架构师在职责上有很大差异。混同这两个角色,往往也会导致低效、无序的开发。特别是,从性格因素上讲,单纯的技术人员倾向于忽视“人”的因素,而这正是管理活动的一个主要方面。另外,就像战争中的空军掩护(Air Cover)一样,专职的项目经理能够应付开发过程中大量的偶发事件和杂务,对于一个规模稍大的项目,这些杂务本身就能占用一个全职工作者的几乎全部时间。在一个项目中,推动项目发展的是系统构架师,而不是项目经理。项目经理的职责只是配合系统构架师,提供各个方面的支持。主要职责是与内外部沟通和管理资源(包括人)。系统构架师提出系统的总体构架,给出开发指导。一个项目中,项目经理的角色什么?如果他即使管理人员又是设计人员,则必须比别人强,能够有让别人服的东西。如果他只是项目管理人员,系统构架师有专门人员,就可以不用精通或者说了解 it 各个方面的知识,如果了解更好。另外,如果在一个项目没有人在技术构架上和开发指导上负全部责任,而是每个人都负责一快的架构、分析、设计、代码和实施等,最后肯定会失去管理。系统构架师与系统分析员的关系及区别系统分析员(System yst)是指对系统开发中进行分析、设计和领导实施的人。一般意思上讲,系统分析员的水平将影响系统开发的质量,甚至成败。但在一个完善的系统开发队伍中,还需要有业务专家,技术专家和其他辅助人员。所以,系统分析员只是其中的角色之一。但我国许多的 IT 公司,一般只有系统分析员而没有技术专家。系统分析员固然是对特定系统进行分析、设计。所以他的任务、目标是明确的。他只是去执行任务,完成系统的最终设计。系统架构师应该和系统分析员分开,但架构师必须具备系统分析员的所有能力,同时还应该具备设计员所没有的很多能力。 系统架构师是指导、检督系统分析员的工作,要求系统分析员按什么标准,什么工具,什么模式,什么技术去设计系统的。同时,系统架构师应该对系统分析员所提出的问题,碰到的难题及时地提出解决的方法。并检查、评审系统分析员的工作。

1、简单说client直接访问DBserver为两层结构。

client通过中间件等应用服务器访问DBserver为三层结构。

三层结构比两层结构安全。

2、可以这样理解:客户端程序访问服务器的结构叫两层结构。中间加一个事务逻辑处理封装的中间件作为沟通就是三层结构,这样可以均衡数据负载!

3、拷贝一些基础知识你看一下。(没有)

附:相关知识

现代社会的软件开发体系结构简单概括就是N层体系结构,这里的N大于等于1。换而言之就是:单机体系(N=1)、Client/Server结构体系(N=2)、多层体系结构(N>2)。下面我们就对这几种体系结构进行简单的介绍和比较。

单机体系:这种软件适用于单机状态,一般情况下是针对某一种单一的应用,如字典软件、翻译软件等等。这种开发方式不适用于综合管理系统的开发。

C/S结构:c/s结构是在局域网上发展起来的,它具有数据集中管理的能力,在出现之初确实解决了很多计算机发展的难题,同时随着4GL语言的发展,用户的界面也比较丰富,在CLIENT端的事物处理能力也使整个系统的性能得到全面的提高,并使管理信息系统(MIS:Management Information System)得到快速的发展。其大概的图例见图1。

我们根据两层结构体系的概念来分解C/S结构的话,可以将他分为表现层(也叫表达层)和数据层。数据层提供数据存放的载体,而表现层则通过一定技术将数据层中数据取出,进行一定的分析并以某一种格式向用户进行显示。在两层体系结构中,表现层对数据库进行直接操作,且大部分的商业处理逻辑(Business Logic,数据之间的关系规则)也在表现层中实现.

图1:Client/Server 体系结构示例

三层体系结构:三层体系结构是N层体系结构的典型,所谓的三层体系结构就是将原来在两层体系结构中的商业逻辑部分从数据层和表现层中提炼出来,形成中间件服务器,所以三层就是:表现层、商业逻辑层(Business Logic)、数据层。在此之外,还有一种系统结构就是分布式系统,其结构系统图见图2。

图2:分布式系统的结构示意图

在分布式系统中,其介于客户端和数据端之间的仅仅是一个应用服务器,它管理客户端的软件,但不做性能调整,比如每一个客户端调用时均产生一个新的数据库连接,而不能够将连接保持形成一个连接缓冲池。虽然在分布式应用中已经结合了一些商业处理逻辑,但是并没有真正改变原来的C/S体系结构。

在三层体系结构中,表现层将主要提供与客户的交互功能,数据层提供系统中的所有的数据保存载体,而商业逻辑层将整个系统中的商业处理逻辑整和在一起,形成中间件,在三层中。中间件起了承前启后的作用,表现层将客户端的请求通过IDL调用中间件,中间件在将其转化成数据处理原则,并从数据库中获得相应的数据,返回给客户端的软件,转换成客户要求的方式显示。关于三层体系结构的示意图见图3。

图3:三层体系结构示意图

我们已经简单的介绍了C/S结构和三层体系结构,有关的优点已经昭然若揭,为了更好的让您了解两者的区别,我们将两者进行一些比较。

C/S结构的缺点:

缺乏有效的集权控制:在众多的C/S软件中我们不难看出,所有的构件不能够在一个地点(如一台机器)进行统一的管理,而不得不将他们分化在各个CLIENT的应用中,使得维护和安全保密均很困难。

缺乏安全性:在分散的计算机系统中,控制信息的访问安全是非常困难的,由于客户端经常需要对一些敏感的数据进行分析导致安全漏洞很容易发生。

客户端工作量重:当将一个应用中的所有的商业逻辑全部在各个客户端来实现的时候,仅仅是使用桌面电脑的客户端资源将发生不堪负载的情况。

软件的重用性差:由于C/S结构下的应用软件一般均是根据操作系统进行定制,且开发工具也是有一定的限定,一旦需要改变某一个要素的话,很可能只能重做,例如原来用C语言来开发,现在需要转向PB进行开发,那么,原来的所有工作都需要重新来过。

随着应用的不断复杂,桌面电脑将需要不断的升级以适应系统的性能需求,甚至有时侯会完全超出桌面系统能够承受的限度。例如:诸如多线程和对称多重处理技术等先进操作系统的特性可能不能在标准桌面电脑系统中提供,不通过访问具有这些技术的服务器,客户端的桌面系统将可能永远不能获得这些新的技术的性能。

针对这些问题,三层体系结构给予了很好的解决方案。

在三层体系结构中,提供在客户端和服务器端进行应用功能的分割,系统通过应用将用户定义的界面系统从商业处理逻辑中分割出去。通过将商业处理逻辑集中在中间件服务器中,将能够减小客户端的工作量并使敏感数据访问控制变得简单。

在三层结构中,客户端将与服务器端的数据变化隔离,简单的说,商业处理逻辑不受客户端的用户界面的改变而影响。三层体系中有一个非常重要的特性就是系统具有良好的组件重用性,例如在PB中开发的组件,可以在VC中进行使用。

系统架构组成部分有六个,如下:

业务架构;

应用架构;

集成架构;

数据架构;

技术架构;

1业务架构

业务架构,是IT架构的基础,要从业务、产品视角,描述整个平台、或某个产品的实现。

业务架构是整个系统设计中最重要的架构,因为所有的系统设计都需要满足业务的需求,如果业务架构出现错误,将导致整个系统设计的失败。

业务架构是对于业务的框架性描述,一般分层展开,如运营支撑、作业执行、业务管控(监控、预警、风控)、决策分析。

业务架构中的数据,包括内部数据、外部系统数据、用户使用行为数据,共同组成一个数据流的闭环。

2应用架构

从业务机构中来,分系统进行功能模块描述。

编写应用架构图时,往往需要站在整个平台视角,描述整个平台架构。应用架构可分为两种,一种是企业级应用架构,一种是单系统的应用架构。

3集成架构

系统与外围交互系统之间的数据交换。

4数据架构

数据架构主要解决三个问题:名列前茅,系统需要什么样的数据;第二,如何存储这些数据(数据的存储方式);第三,如何进行数据架构设计(数据的展示方式)。

一套对存储数据的架构逻辑,它会根据各个系统应用场景、不同时间段的应用场景,对数据进行诸如数据异构、读写分离、缓存使用、分布式数据策略等划分。

5技术架构

包括网络安全、防火墙、负载均衡、网关、服务治理、开发服务、安全服务,以及业务模块用到的技术栈。

6部署架构

包括分区部署,如互联网DMZ区、专线DMZ区、应用区、数据区等;核心组成部分的部署,包括web服务器、应用服务器、数据库等;网络安全策略部署,包括IP和端口、数据流向等。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 系统架构图_基于,LAMP,架构的,ACMICPC在线评测系统设计

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情