基于大量用户的Web应用程序开发中的特殊问题
摘要 - irisz web应用程序的规范表明,该软件将受到来自用户的大量负载的影响。虽然使用统计测量是必要的,但这对数据和Web服务提供商产生了几种需求。本文论述了该系统的特点、定时数据处理的恒压以及在主动使用过程中提供的维护能力。
1.导言
目前,Web应用程序的开发已成为信息学中的一项日常工作。尽管有一些发展,但也提出了一些科学问题。这些问题涉及编程技术[1][2]的适用性,以及技术、安全性[3]和性能[4][5][6]。参考文献中很少有大量的例子,它们涉及水质、工业应用[7][8]。与计算机科学背景[5][9][10]有关的其他重要问题也在增加。具有大量用户请求并对其有答案的客户端服务器系统可以生成计算密集型任务。 我们的“Irisz”项目也提出了这类问题。本软件的主要目的是帮助建立和管理大学生与公司之间的劳动联系[11]。其系统计划已经公布[11]。该软件必须处理几千名学生的用户数据和几乎相等数量的项目数据,并且不会丢失其关注的安全问题。它的查询意味着10的6次方数据量的数据检查。以及连接的消息发送、接收进程。此要求意味着本地服务器应用程序有意义的负载。本文的重点是Irisz项目的一些软件技术问题和经验性问题,以及方法和技术选择方面的问题。
2.开发特点
在软件规格说明过程中,这样一个复杂的系统应该遵循MVC编程模式,具有特殊的定制功能。开发人员经常使用现成的mvc框架:毫无疑问,这些框架的优点是它们有许多内置的功能和选项,可以用于快速解决特定的子问题。它们的层很好地分开,并且已经包含了很多安全特性,所以开发人员不需要真正关心这些产品。
这些框架的缺点是,它们可能包含大量根本不需要的功能,而这是以减少响应时间或存储空间为代价的。如果我们选择使用这样一个外部系统,我们必须熟悉函数的命名、它们的行为和效果。
因此,我们最终开始创建一个定制的MVC结构,它只包含所需的功能,并且也是由我们自己准备的。这意味着这些类是我们根据JIT原则开发的,因此每个类描述只在需要时加载。
A.定制MVC框架
该结构的基础是由众所周知的模型,视图和控制层,其中一些额外的模块可以在必要时连接(见图1)。
这些模块,就像邮件或内部消息传递模块一样,只有在代码引用它们时才会加载并保留内存,因此自动加载会从专用目录中自动加载。
1)主体结构
发送到Web服务器的所有请求-独立于URL[1]-都重定向到index.php文件,如果引用的URL不存在,则引用不存在的内容。
图一.应用程序的文件结构
在捕获请求并检查原始请求之后,索引文件将决定必须向用户显示哪个页面。
这些请求可以自由设计,它们可以指向虚拟目录,因为这些请求实际上是由公共控制层控制。
2)控制层
“控制”层是一个静态类,只包含静态方法。每个方法都可以调用数据库处理模型层的函数,后者在响应中发送带有键值对的多维关联数组。可以通过处理此响应和一些可能的表单数据来生成视图。
与数据库的通信是完全唯一的,由一个专用的类(模型)负责。还有其他类型的请求,它们要么生成其他类型的输出,要么根本不生成它们。在某些表单请求之后执行重定向,然后是 为了中止对脚本的解释而发送的。
Ajax-请求由客户端JavaScript程序生成并异步处理。尽管它的名称不一定是XML结构,但是可以使用更小的JSON来代替[4]。
控制层以不同的静态函数处理Ajax请求,并将结果数组提供给浏览器。更详细的描述可以在AJAX II/F中找到。
3)视图层
在数据库和业务逻辑层(后端)-会话处理和处理来自表单的数据-没有输出生成到浏览器。而不是将数据放入数组,将在“视图”层中迭代,并且所需数据将写入模板文件。
与前面的模板文件一样,这个模板文件是一个php脚本,遵循MVC模式的原则,这文件不包含任何外部调用,只处理接收数组的元素,并生成一个HTML框架使用简单的输出命令进行帧处理。为了缩短代码,HTML的头部和尾部部分被放置在不同的地方,经常被称为模板:所以文件大小更小,更容易修改。只有内部内容包含在“视图”文件中,对开发人员来说变得更加透明。它重要是因为,在大型项目中,后端和前端开发人员不是同一个人:其他技术的知识和不同的心理是必不可少的。后端开发人员是程序员,数据库专家,前端开发人员是设计师,有图形和用户体验专家,而不是程序员。因为视图文件与主软件是分开的,解决问题的方法很容易在几个人之间分配,因此适合合作开发的整体应用。
4)模型层
通过“模型”实现对数据库的访问。这一层是模型的基础。每个数据库完成动作、读取、写入、修改和删除都要通过模型层。
在实现“模型”层时,我们努力收集不同的查询,所以即使是这些不应在控制层中写入,只应引用它们有别名。查询按组放入关联数组,其中每个别名都用作键。但是,这些大型数组并不是在每次调用时都创建的,因为如果未使用,它不必要地加载PHP的运行时内存,。创建是使用单例创建运行时的。“模型”层的基础是php数据库对象(后来的pdo)php类。通过跨面向对象的调用,可以借助PDO访问指定的数据库.很少创建协同函数来简化查询。因此,只需要从Control调用适当的函数,将数组中的查询别名和条件值作为参数传递给它。条件的位置在存储的查询中标记,PDO在执行过程中插入这些查询。这些查询称为准备查询。
如果查询基于select语句,则返回值是包含关联数组的数组。在其他查询中,布尔结果告诉我们插入、更新或删除成功。
B.EduID登录
由于集中认证,应用程序的使用不需要学生和教师的注册。他们可以使用学校的EduID系统登录[11]。通过这种方式,他们的认证是由一个中央ID提供者完成的,它向Web应用程序发送一个包含用户数据的数据包。
Irisz系统将用户按Neptun ID分组。显然,这些信息必须被存储,但是没有密码可以通过IDP进入系统。
组信息也包含在关于经过身份验证的用户的包中,这有助于识别用户是学生、教师还是其他与大学相关的人。该系统目前只涉及学生和教师。
EduID系统基于SAML 2认证协议,在软件中嵌入了SimpleSAMLphp模块。按照适当的链接,访问者将被重定向到IDP的登录页面,在那里他/她可以登录。成功登录后,将重定向到我们系统的登录页面,在这里传递身份验证包,在这里处理该数据包,并将用户登录。用户信息存储在PHP会话中,因此在实践中,用户数据-Neptun ID和级别-在工作会话期间存储在变量中。
C.用户处理
用户处理是通过连接模块进行的:实际上,创建了一个用户类对象。为了从任何地方到达该对象并确保只有一个用户处于活动状态,我们应用了单例模式。
当调用它的构造函数时,现有的用户从它的会话中获取信息,并存储在一个静态的、自己类型的变量中,从该变量中可以知道各种值,用户是否登录、用户是学生、教师还是公司。
公司登录与这些不同,因为认证不是用EduID完成的,集中式身份验证无法做到这一点。
公司必须单独注册,联系人电子邮件地址和加密、散列版本的密码等数据存储在数据库中。密码不是简单的散列,而是在连接之前在配置中设置的随机字符串之后,由系统散列:此方法称为“盐析”。
在公司登录过程中,如果登录成功,则将数据库查询生成的数据传递给用户实例的构造器。
D.缓存
对比分层模型的优点,在Web上访问数据库是一个非常缓慢的过程。因此,最重要的任务之一就是提高响应时间。
如果频繁需要的信息也存储在数据库之外的可快速访问的临时存储区中,则访问数据库的响应时间可以大大缩短。将这个“Cache”模块集成到“Model”的GET方法中,如果临时存储中没有包含,则只能从数据库访问结果。
缓存是作为静态类实现的,只有很少的公共方法和私有方法。
为了保持代码的完整性,缓存主要是从一个文件中完成的,并转换成一个文件:因为访问文件的速度仍然比数据查询快得多。实际上,我们用JSON编码的数组创建了文件,因为它们体积小,处理方便。这些序列化的数据可以很容易地重新转换为PHP识别的数据结构。
如果查询是一个复杂的多表查询,则通常可以提高缓存的有效性。在这种情况下,DB应答是缓慢的,用于缓存的文件仍然只是一个文件操作。根据我们的测试,响应时间方面的有效性可能超过90%。
在处理PHP和缓存时,流行的范例是使用记忆缓存。在这种方法中,存储不是基于文件的,而是PHP本身使用的物理响应更快的操作内存。在我们的模块化解决方案中,如果满足软件需求,并提供物理资源,则可以通过对Cache静态类稍加修改,将记忆缓存集成到系统中。
E.日志
重要的要求是对系统的使用情况进行详细的统计。其目的是测量访问者的数量、部分结果和占用情况,并映射哪个用户组使用哪个功能最多,使用哪个功能最少。
显然,这些结构化数据可以存储到数据库中,但与任何数据库一样,操作存储是一个缓慢的过程。因为PHP是一种基于阻塞执行的解释语言,所以它等待模型端调用返回,直到给出响应为止。因此,如果我们必须直接插入数据库,页面加载将在进程未成功完成时等待。如果一个给定的进程生成多个日志条目,那么我们可以讨论数秒,总之,这将减缓用户的页面加载速度。
因此,日志创建需要两步解决方案,就像查询一样。与缓存方法一样,数组序列化存储在JSON文件中,但这些数据不是从数据库接收的,而是在那里等待被插入。
PHP按照JSON编码格式将记录的数据附加到文件中,稍后这些数据在定时调用时被移到数据库中。当使用定时调用时,该过程根本不影响用户。在一般负载下,Linux的Cron大约在30分钟内调用该函数就足够了,响应时间只有几秒,这是合格的。为了确保以后不会出现问题,设置了5分钟的间隔,这样即使在庞大的用户基础上,软件也能保持稳定。
F.Ajax请求
AJAX技术对于提供良好用户体验的Web应用程序是必不可少的。另一方面,增强经验是无法实现的。
异步请求处理(也就是Ajax)的基础是,在浏览器中运行的JavaScript解释器将请求发送到Web服务器,响应将生成到页面中,而不需要重新加载。
Ajax包在页面大小上只是页面的一小部分,因此对Ajax调用的响应会很快到达,并且只包含有关更改的信息。
Ajax包通常来自XML结构化数据,但是发送JSON编码的字符串可能对我们的经验和文献[4]有用。当然,JSON更难被人检查,类似于网络的结构,以及从内部到外部的数据理解都是缺失的,但是在大小上的差异使JSON更好。
应用程序在生成异步请求响应时创建JSON编码数组。这些文件被发送回浏览器,在浏览器中将它们转换为JavaScript数组,进行从PHP到JavaScript的动态转换。
1)JQuery方法
在客户端使用某种框架来实现JavaScript代码的平台无关是值得的。尽管JavaScript是ECMAScript的一个标准,不同的浏览器为它提供了不同级别的支持,而且在某些解释中通常会出现差异。
jQuery框架被认为是足够传统的,高级Ajax支持被认为是它的最高特性。为开发人员提供了多种功能和可能性,以创建更简单、简单易懂的无平台代码。这些特性足以使客户端编码建立在这个框架上。
2)配置文件编辑
用户在编辑自己的配置文件时可以注意到,没有“保存”按钮,修改后数据库中的每个字段都会更新。
这需要一个PHP侧处理器,它捕获jQuery发送的数据,验证用户、修改后的数据,并在成功更新后发送通知,或者在出现错误时发送错误消息。
JavaScript本身是基于事件的,因此客户端代码应该基于此。如果修改了表单中某个字段的内容,则调用一个处理函数,该函数发送必要的Ajax请求,并使用异步回调函数处理响应。
回调函数是JS语法的一个特殊特性:如果只完成调用函数,则执行回调函数。
3)图像上传
图像上传是配置文件页面上的一个特殊过程。修改图像是一种文件上传,AJAX不支持它,但在实践中,通过序列化,可以解决在后台处理这么多数据的问题,并且不需要重新加载页面就可以生成结果。
在这个过程中,在修改和上传配置文件图片时,使用了一个名为EXTENSION的JQueryFileUpload。
通过“控制”层处理配置文件图片是不寻常的,因为没有直接链接给浏览器。生成带有MVC识别的用户标识符的页面的链接,这将与图像MIME类型数据一起返回。
此链接在图像处理过程中不会更改,只会替换背景数据。
4)表单验证
如果一个表单很大,并且它的验证取决于多个条件,那么如果在提交之后验证失败,并且字段值丢失了,则是不允许的。
修改PH
全文共11525字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[1689]
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。