基于LAMP的高性能计算用户组织架构管理系统设计与实现*
2021-03-01吴君楠
吴君楠,欧 洋,李 琰
(国防科技大学计算机学院,湖南 长沙 410073)
1 引言
高性能计算HPC(High Performance Computing)水平代表一个国家的计算战略能力,成为社会发展、科学进步和国民经济的一种生产力,也是衡量一个国家核心竞争力的重要指标[1]。通常在高性能计算机上需要部署多种应用,每种应用针对不同的用户,形成了多对多的情形。随着HPC系统规模的不断扩大,高性能计算机上的应用也随之增多,使得高性能计算机面临着用户群体复杂、海量数据的存储和维护等问题[2]。日志功能在故障检测中发挥着越来越重要的作用[3]。为了给高性能计算机提供安全可靠的信息保障,需要在高性能计算机中形成一套统一的用户组织架构管理系统,来解决用户管理分散、应用信息孤岛、海量数据存储和维护等问题。
用户组织架构管理系统(User Organization Management System)针对不同用户角色提供不同的访问权限和访问页面,同时给角色分配任务、职责和权限等,使得用户管理更加便捷高效[4]。传统的用户组织架构管理系统采用基于浏览器/服务器B/S(Browser/Server)的架构模式,虽然简化了客户端的工作,但是加重了服务端的工作,使得服务端负载大,给用户带来的体验差;传统的用户组织架构管理系统日志数据访问采用简单对象访问协议SOAP(Simple Object Access Protocol)[5]和安全断言标记语言SAML(Security Assertion Markup Language)[6]等重量型Web服务技术,使得利用日志信息对应用进行诊断的难度大且效率低[7],同时海量的日志信息查询占据着客户端大量的内存,网络开销大;传统的用户组织架构管理系统采用线性表来进行数据存取,线性表虽然逻辑结构简单,同时便于实现和操作,但是这种简单的逻辑结构也带来了修改效率低和可扩展性差等问题。
目前,已有一些主流的用户组织架构管理系统。自由联盟计划Liberty Alliance Project[8]采用的是基于SAML标准的一个开放协议,该协议中每个Web应用维护的列表需手动设定,用户体验差,且SAML需通过安全套接字协议SSL(Security Sockets Layer)加密,离开SSL环境易受网络攻击,安全性不高;耶鲁大学的CAS(Central Authentication Server)系统[9]使用SpringMVC和Webflow等重量级网络架构,在用户访问并发量很大的情况下系统效率低,网络开销大;Microsoft.NET Passport[10]采用类似 Kerberos[11]集中认证分布授权的方式,仅适用于.Net应用服务器,扩展性差,同时用户信息共享控制只向全部加盟网站共享,缺乏灵活性。总而言之,当前的用户组织架构管理系统存在用户体验差、网络开销大和扩展性差等问题。
本文针对当前用户组织架构管理系统存在的问题,提出了一种基于Linux操作系统、Apache服务器、MySQL数据库和PHP后台脚本编程语言组合的软件开发平台LAMP[12]的高性能计算用户组织架构管理系统的实现方法,该方法采用B/S架构,Twig与HTML相结合的方式减轻了服务端的负担,改善了用户体验;采用表述性状态转移REST(Representational State Transfer)框架[13]与Cache机制[14]对海量临时数据进行缓存,降低了开发难度和网络开销;采用树形结构对分层数据进行存取,提高了数据存取效率,且可扩展性好。
2 关键技术
2.1 B/S架构,Twig与HTML相结合的Web前端
高性能计算用户组织架构管理系统Web前端的实现采用B/S架构,简化了客户端的工作,同时采用Twig与HTML相结合。Twig是一种PHP语言编程模板引擎,它在坚持PHP语言编程原则的同时,添加了很多有用的功能,使其具有开发友好性。Twig将模板编译为简单的、最优化的PHP代码,极大地降低了PHP代码的开销;Twig具有灵活的词法分析器和解析器驱动,开发者可以自定义标签和过滤器,并创建自己的领域特定语言DSL(Domain-Specific Language);Twig还拥有沙盒模式,用于评估未受信任的模板代码。高性能计算用户组织架构管理系统Web前后端均部署在Web服务器中,前端使用Twig模板,采用HTML、JavaScript和CSS(Cascading Style Sheets)语言进行开发,用于生成图形页面,后端采用PHP语言进行开发,根据前端的请求做出响应。一个简单的Twig模板如下所示:
〈!DOCTYPE html〉
〈html〉
〈head〉
〈title〉NUDT〈/title〉
〈/head〉
〈/body〉
〈ul id="navigation"〉
{% for item in navigation%}
〈li〉〈a href="{{item.href}}"〉{{ktem.caption}}〈/a〉〈/li〉
〈%endfor%〉
〈/ul〉
〈hl〉NUDT〈/hl〉
{{hello}}
〈/body〉
〈/html〉
其中,{%…%} 和 {{…}}为2种不同形式的分隔符,前者用于执行for循环语句,后者用于将表达式的变量输出到模板中。由于Twig具有快速、灵活和安全的特点,为服务端减轻了负担,极大改善了用户体验。
2.2 REST框架与Cache机制相结合的日志管理
高性能计算用户组织架构管理系统的日志管理模块采用REST框架与Cache机制相结合的方式。REST是一种轻量级的软件架构风格,它提供一些软件设计的原则和约束条件,使用CRUD原则,即创建(Create)、获取(Read)、更新(Update)和删除(Delete),这4种简单的操作可以组合成其他无数操作,REST使得软件设计简洁,降低了开发难度。海量临时数据通过Cache机制进行缓存,日志事件通过后端的事件函数将日志事件类型、创建时间和事件描述等进行相应的记录,并存入后端数据库中。如图1所示,查询用户日志时,用户通过前端发送AJAX(Asynchronous Javascript And XML)请求调用后端PHP函数,生成对应的SQL语句到数据库中进行查询,通过遍历用户日志表后将所有日志事件提取出来,放在后端Cache中进行临时存储。然后根据前端的分页情况直接到Cache中查找并动态加载缓存数据,以便在使用时快速调用,而不需要多次重新去系统中查询,这样减少了系统调用次数,减小了服务器负载,降低了网络开销。日志管理为日后系统管理员对系统行为操作的查看和维护提供了便利,同时利用日志信息能有效地排除系统错误,提高系统管理效率。
Figure 1 Query user log process
2.3 树形结构存取分层数据的组织架构
系统组织架构通常是分层的数据结构,如何存取分层结构成为组织架构的关键问题。传统的数据存取方式采用线性表这一数据结构,因其逻辑结构简单,便于实现和操作。对于每一个查询结果,理想期望是只需一次查询,而使用线性表因其嵌套递归,需要反复进行多次查询,平均需要移动一半的元素来保持其原有排序,且当数据结构很大时,其查询效率低,可扩展性差。另一种对分层数据进行存取的方式是采用二叉树,这种方式从树的根部开始遍历,将待查询关键字与每个节点的关键字进行比较后,再决定继续查询左子树还是右子树,这样平均减少了一半的查询量,降低了存取复杂度,提高了查询效率,且由于其递归的特性,易于扩展。高性能计算用户组织架构管理系统的组织架构模块采用树形结构来存取分类分层数据,不仅计算量小、查询速度快,而且可扩展性好,易于存储和维护。
在分层结构中一共有父节点、兄弟节点和子节点3种节点。图2所示为二叉树遍历算法示例,数字1~8表示二叉树遍历的先后顺序,在遍历二叉树时,先从根节点出发,再按照从左至右的顺序依次对二叉树进行遍历。
Figure 2 Example of binary tree traversal algorithm
二叉树遍历算法的伪代码如下所示:
SEARCH(X,K)
1 IFX==NULL ORX=X.KEY
2 RETURNX;
3 IFK 4 RETURN SEARCH(X.LEFT,K); 5 ELSE RETURN SEARCH(X.RIGHT,K); 其中,X为指向根节点的一个指针,K为关键字,遍历时从根节点开始,如果该节点不存在,则返回NULL值,否则返回一个指向关键字K的指针。遍历节点X时,将X.KEY与关键字K进行比较,如果二者相等,则终止查找;如果K 用户组织架构管理系统基于LAMP平台进行软件开发。LAMP是指采用Linux操作系统、Apache服务器、MySQL数据库和PHP后台脚本编程语言进行组合的一个软件开发平台[14]。相比J2EE[15]和ASP.NET[16]等商业软件开发平台,LAMP平台使用开源的方式,不仅成本低、兼容度高,而且操作简单,安全可靠,成为当今主流的开发模式。基于LAMP的架构设计如图3所示。其中FireFox前端浏览器、Apache服务器、PHP开发语言和MySQL数据库分别对应系统的用户层、服务层、管理层和数据层。用户层是面向用户的,主要提供用户可以浏览操作的浏览器页面;服务层为用户层提供Web服务,同时为管理层提供操作系统硬件支撑;管理层主要是对页面浏览模块、后台管理模块和系统管理模块3大模块进行管理,其中页面浏览模块主要是对前端页面的管理,后台管理模块是对后端数据的管理,系统管理模块主要是对系统用户、应用和日志等信息的管理;数据层包含数据库,主要提供数据查询和数据存储等功能。 Figure 3 LAMP architecture 用户组织架构管理系统采用B/S架构实现,包含用户管理、应用管理、日志管理、组织架构和访问控制等多种功能,为用户提供了一套高效可靠的用户组织架构管理方案。基于LAMP架构设计的软件架构如图4所示。其中,用户层主要进行人机交互,向用户提供可视化的浏览页面;服务层主要是对用户进行访问控制,为不同的用户提供不同的访问页面和访问权限;管理层主要是对用户管理、应用管理、日志管理和组织架构等功能模块进行管理;数据层提供数据库中底层数据的操作服务,如增删改查等操作服务。 Figure 4 Software architecture 根据系统架构的需求,用户组织架构管理系统主要包含5大模块:访问控制、用户管理、应用管理、日志管理和组织架构,如图5所示。其中访问控制模块是对用户使用系统的控制,主要对用户访问权限进行控制,即针对不同的用户需求,实现用户与不同应用之间的绑定授权;用户管理模块主要是用户管理员对用户账号进行增加、删除、修改和查询等操作的管理;应用管理主要是对应用进行增加、删除、修改和查询等操作的管理;日志管理模块主要是记录系统中用户操作和系统报错等日志信息,方便后期维护;组织架构模块是提供多层用户组织构架,方便系统管理员对用户进行分类分层的管理。 Figure 5 System block 由于大量的数据需要查询和保存,本文采用数据库对数据进行统一管理和存储,根据系统需求,主要分为以下5个数据表:user、app、con、log、org。 (1)user是用户信息表,主要记录用户ID、用户名、用户全称、电子邮箱、用户标题、用户组、用户登录时间和用户注册时间等信息。其中用户ID为用户注册时自动生成的唯一编号,用户名为用户设置的用户登录名称,用户全称为用户的真实名,用户标题为用户组织架构的名称,用户组分为2种:系统用户admin和普通用户组。 (2)app是应用信息表,主要用来记录应用ID、应用名称、应用版本、应用注册时间、应用更新时间和应用URL地址等信息。应用ID为每个应用注册时自动生成的唯一编号,系统管理员对用户应用授权时,主要通过应用名称和应用版本对其授权。 (3)con是访问授权表,主要记录用户ID、应用ID、用户应用授权绑定ID等信息。每一个用户应用授权绑定ID对应一对用户ID和应用ID,通过查询用户应用授权绑定ID可以快速查找该ID下对应的用户ID和应用ID,再通过用户ID和应用ID分别在user表和app表中查找相关条目,便可以获取对应的用户信息和应用信息。 (4)log是日志表,主要记录系统日志信息,包括日志ID、用户ID、日志创建时间、日志事件类型和日志事件描述等信息。日志ID为每一条日志记录信息的编号,只要得到日志ID便可以获取相应的日志信息。日志事件类型包括用户注册事件、用户登录事件、应用注册事件和应用版本更新事件等所有系统内操作的事件。日志事件描述主要是对日志事件的用户、时间、操作等详细信息的记录。 (5)org是组织架构表,主要记录用户的组织架构关系,包括组织架构条码ID、节点ID、父节点ID、子节点ID、兄弟节点ID、节点名称、节点创建时间和节点更新时间。其中节点ID为当前节点所在的ID,父节点ID为当前节点的上一层节点的ID,兄弟ID为当前节点的同一层节点的ID,子节点ID为当前节点的下一层节点的ID。 (1)用户管理页面。 用户管理页面为系统管理员创建用户并对用户进行增删改查等操作的页面,如图6所示,系统管理员可以对用户名、用户全称、电子邮箱和用户标题等进行设置和管理,同时也可以创建新的用户,此页面对用户不可视,只有系统管理员才可登录此页面进行操作。 Figure 6 User management page (2)日志管理页面。 日志管理页面用于呈现系统日志信息,包括用户操作、应用操作和系统的报错信息等,便于系统管理员对系统的维护和查询,每条日志消息将以时间轴的形式呈现,如图7所示,图中下方的第1、2条记录分别记录了用户注册成功和用户登录成功的日志历史消息。管理员也可以通过页面左上角的搜索按钮对日志进行搜索查询,过滤掉不需要的日志信息。 Figure 7 Log management page (3)组织架构页面。 组织架构页面为用户组织架构页面,用于系统管理员查看和编辑组织架构,其中编辑栏目可以添加和删除父节点、子节点和兄弟节点,必须选择节点后,才能对该节点进行添加和删除等操作。页面右上角的Export为输出按钮,点击此按钮便可将当前的组织架构以图像的形式输出保存,组织架构查询和编辑页面分别如图8和图9所示。 Figure 8 Organization query page Figure 9 Organization edit page 本节通过运行程序和模拟访问等方法,对用户组织架构管理系统的用户管理、应用管理、日志管理和组织架构等4个模块的功能进行测试,确认该系统各个模块的功能是否能正常运行。测试结果如表1所示,所有界面均能正常访问,所有功能均达到预期效果,且测试过程中没有出现任何功能错误的问题。 Table 1 Functional test results of user organization structure management system 本节利用测试工具LoadRunner 11.0[17]对并发用户登录用户组织架构管理系统界面以及用户行为操作进行模拟测试,通过测试不同并发用户数量的访问,确认用户组织架构管理系统处理用户请求的能力。通过LoadRunner自动负载测试工具,模拟不同的并发用户数量,对整个系统进行模拟测试,生成的测试脚本如图10所示。在性能测试过程中,将系统并发用户数量分别设定为100人和200人2种情况,每秒增加的用户数量均为2人,测试时间均为5 min。测试过程中均未发生系统卡顿和崩溃的现象,且随着访问用户数量的增加和并发用户数量的增加,系统性能均保持良好。 Figure 10 Test script diagram 2种并发用户数量的性能测试对比结果如表2所示。 Table 2 Performance comparison with different concurrent users 通过测试结果可知,随着并发用户数量的增多,系统的响应时间稍有增加,但响应时间很短,均不影响用户体验。同时随着并发用户数量的增多,在系统并发用户持续访问5 min内,系统性能保持良好,没有出现任何异常。由此可见,系统效率高,网络开销小,且能稳定运行,达到了设计目的。 本节将本文提出的方法(以下简称“方法1”)与基于Kerberos技术的方法(以下简称“方法2”)[18]进行性能结果对比。主要对系统每秒点击数和系统平均吞吐量2个指标分别进行了比较。系统每秒点击数指用户每秒向服务器提交HTTP请求的次数,通过该指标可以评估用户在系统运行过程中产生的负载量,从而判断系统的稳定性;系统平均吞吐量指服务器每秒处理的数据量,通过该指标可以评估服务器处理数据的能力,从而判断系统的健壮性。对比结果如表3所示,相比方法2,方法1系统每秒点击数和系统平均吞吐量2项指标均有所提高,且分别提高了8.7%和7.3%以上[19]。由此可见,相比于Kerberos繁琐复杂的管理机制,本文提出的方法,不仅系统稳定,而且减轻了服务端的负担,降低了网络开销,提高了数据存取效率。 Table 3 Performance comparison of two methods 本文针对高性能计算用户组织架构管理系统面临的几个关键问题,提出了一种基于LAMP的高性能计算用户组织架构管理系统的实现方法,同时对该系统进行了设计实现和系统测试。测试结果表明,系统各项功能均能正常访问,且系统性能稳定良好,为用户提供了一套高效可靠的用户组织架构管理方案,改善了用户体验,降低了网络开销,提高了数据存取效率。未来的E级计算将为高性能计算带来新的机遇和挑战,如何对用户组织架构管理系统实现智能化的管理,以及利用区块链去中心化的思想加强数据传输的安全问题等将作为下一步的研究方向,以期为用户带来更好的使用体验,提供更安全的数据访问。3 系统设计与实现
3.1 LAMP架构
3.2 软件架构
3.3 模块设计
3.4 数据库配置
3.5 页面实现
4 系统测试
4.1 功能测试
4.2 性能测试
4.3 结果对比
5 结束语