吳君楠,歐 洋,李 琰
(國防科技大學計算機學院,湖南 長沙 410073)
高性能計算HPC(High Performance Computing)水平代表一個國家的計算戰(zhàn)略能力,成為社會發(fā)展、科學進步和國民經(jīng)濟的一種生產(chǎn)力,也是衡量一個國家核心競爭力的重要指標[1]。通常在高性能計算機上需要部署多種應用,每種應用針對不同的用戶,形成了多對多的情形。隨著HPC系統(tǒng)規(guī)模的不斷擴大,高性能計算機上的應用也隨之增多,使得高性能計算機面臨著用戶群體復雜、海量數(shù)據(jù)的存儲和維護等問題[2]。日志功能在故障檢測中發(fā)揮著越來越重要的作用[3]。為了給高性能計算機提供安全可靠的信息保障,需要在高性能計算機中形成一套統(tǒng)一的用戶組織架構管理系統(tǒng),來解決用戶管理分散、應用信息孤島、海量數(shù)據(jù)存儲和維護等問題。
用戶組織架構管理系統(tǒng)(User Organization Management System)針對不同用戶角色提供不同的訪問權限和訪問頁面,同時給角色分配任務、職責和權限等,使得用戶管理更加便捷高效[4]。傳統(tǒng)的用戶組織架構管理系統(tǒng)采用基于瀏覽器/服務器B/S(Browser/Server)的架構模式,雖然簡化了客戶端的工作,但是加重了服務端的工作,使得服務端負載大,給用戶帶來的體驗差;傳統(tǒng)的用戶組織架構管理系統(tǒng)日志數(shù)據(jù)訪問采用簡單對象訪問協(xié)議SOAP(Simple Object Access Protocol)[5]和安全斷言標記語言SAML(Security Assertion Markup Language)[6]等重量型Web服務技術,使得利用日志信息對應用進行診斷的難度大且效率低[7],同時海量的日志信息查詢占據(jù)著客戶端大量的內(nèi)存,網(wǎng)絡開銷大;傳統(tǒng)的用戶組織架構管理系統(tǒng)采用線性表來進行數(shù)據(jù)存取,線性表雖然邏輯結構簡單,同時便于實現(xiàn)和操作,但是這種簡單的邏輯結構也帶來了修改效率低和可擴展性差等問題。
目前,已有一些主流的用戶組織架構管理系統(tǒng)。自由聯(lián)盟計劃Liberty Alliance Project[8]采用的是基于SAML標準的一個開放協(xié)議,該協(xié)議中每個Web應用維護的列表需手動設定,用戶體驗差,且SAML需通過安全套接字協(xié)議SSL(Security Sockets Layer)加密,離開SSL環(huán)境易受網(wǎng)絡攻擊,安全性不高;耶魯大學的CAS(Central Authentication Server)系統(tǒng)[9]使用SpringMVC和Webflow等重量級網(wǎng)絡架構,在用戶訪問并發(fā)量很大的情況下系統(tǒng)效率低,網(wǎng)絡開銷大;Microsoft.NET Passport[10]采用類似 Kerberos[11]集中認證分布授權的方式,僅適用于.Net應用服務器,擴展性差,同時用戶信息共享控制只向全部加盟網(wǎng)站共享,缺乏靈活性。總而言之,當前的用戶組織架構管理系統(tǒng)存在用戶體驗差、網(wǎng)絡開銷大和擴展性差等問題。
本文針對當前用戶組織架構管理系統(tǒng)存在的問題,提出了一種基于Linux操作系統(tǒng)、Apache服務器、MySQL數(shù)據(jù)庫和PHP后臺腳本編程語言組合的軟件開發(fā)平臺LAMP[12]的高性能計算用戶組織架構管理系統(tǒng)的實現(xiàn)方法,該方法采用B/S架構,Twig與HTML相結合的方式減輕了服務端的負擔,改善了用戶體驗;采用表述性狀態(tài)轉(zhuǎn)移REST(Representational State Transfer)框架[13]與Cache機制[14]對海量臨時數(shù)據(jù)進行緩存,降低了開發(fā)難度和網(wǎng)絡開銷;采用樹形結構對分層數(shù)據(jù)進行存取,提高了數(shù)據(jù)存取效率,且可擴展性好。
高性能計算用戶組織架構管理系統(tǒng)Web前端的實現(xiàn)采用B/S架構,簡化了客戶端的工作,同時采用Twig與HTML相結合。Twig是一種PHP語言編程模板引擎,它在堅持PHP語言編程原則的同時,添加了很多有用的功能,使其具有開發(fā)友好性。Twig將模板編譯為簡單的、最優(yōu)化的PHP代碼,極大地降低了PHP代碼的開銷;Twig具有靈活的詞法分析器和解析器驅(qū)動,開發(fā)者可以自定義標簽和過濾器,并創(chuàng)建自己的領域特定語言DSL(Domain-Specific Language);Twig還擁有沙盒模式,用于評估未受信任的模板代碼。高性能計算用戶組織架構管理系統(tǒng)Web前后端均部署在Web服務器中,前端使用Twig模板,采用HTML、JavaScript和CSS(Cascading Style Sheets)語言進行開發(fā),用于生成圖形頁面,后端采用PHP語言進行開發(fā),根據(jù)前端的請求做出響應。一個簡單的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種不同形式的分隔符,前者用于執(zhí)行for循環(huán)語句,后者用于將表達式的變量輸出到模板中。由于Twig具有快速、靈活和安全的特點,為服務端減輕了負擔,極大改善了用戶體驗。
高性能計算用戶組織架構管理系統(tǒng)的日志管理模塊采用REST框架與Cache機制相結合的方式。REST是一種輕量級的軟件架構風格,它提供一些軟件設計的原則和約束條件,使用CRUD原則,即創(chuàng)建(Create)、獲取(Read)、更新(Update)和刪除(Delete),這4種簡單的操作可以組合成其他無數(shù)操作,REST使得軟件設計簡潔,降低了開發(fā)難度。海量臨時數(shù)據(jù)通過Cache機制進行緩存,日志事件通過后端的事件函數(shù)將日志事件類型、創(chuàng)建時間和事件描述等進行相應的記錄,并存入后端數(shù)據(jù)庫中。如圖1所示,查詢用戶日志時,用戶通過前端發(fā)送AJAX(Asynchronous Javascript And XML)請求調(diào)用后端PHP函數(shù),生成對應的SQL語句到數(shù)據(jù)庫中進行查詢,通過遍歷用戶日志表后將所有日志事件提取出來,放在后端Cache中進行臨時存儲。然后根據(jù)前端的分頁情況直接到Cache中查找并動態(tài)加載緩存數(shù)據(jù),以便在使用時快速調(diào)用,而不需要多次重新去系統(tǒng)中查詢,這樣減少了系統(tǒng)調(diào)用次數(shù),減小了服務器負載,降低了網(wǎng)絡開銷。日志管理為日后系統(tǒng)管理員對系統(tǒng)行為操作的查看和維護提供了便利,同時利用日志信息能有效地排除系統(tǒng)錯誤,提高系統(tǒng)管理效率。
Figure 1 Query user log process
系統(tǒng)組織架構通常是分層的數(shù)據(jù)結構,如何存取分層結構成為組織架構的關鍵問題。傳統(tǒng)的數(shù)據(jù)存取方式采用線性表這一數(shù)據(jù)結構,因其邏輯結構簡單,便于實現(xiàn)和操作。對于每一個查詢結果,理想期望是只需一次查詢,而使用線性表因其嵌套遞歸,需要反復進行多次查詢,平均需要移動一半的元素來保持其原有排序,且當數(shù)據(jù)結構很大時,其查詢效率低,可擴展性差。另一種對分層數(shù)據(jù)進行存取的方式是采用二叉樹,這種方式從樹的根部開始遍歷,將待查詢關鍵字與每個節(jié)點的關鍵字進行比較后,再決定繼續(xù)查詢左子樹還是右子樹,這樣平均減少了一半的查詢量,降低了存取復雜度,提高了查詢效率,且由于其遞歸的特性,易于擴展。高性能計算用戶組織架構管理系統(tǒng)的組織架構模塊采用樹形結構來存取分類分層數(shù)據(jù),不僅計算量小、查詢速度快,而且可擴展性好,易于存儲和維護。
在分層結構中一共有父節(jié)點、兄弟節(jié)點和子節(jié)點3種節(jié)點。圖2所示為二叉樹遍歷算法示例,數(shù)字1~8表示二叉樹遍歷的先后順序,在遍歷二叉樹時,先從根節(jié)點出發(fā),再按照從左至右的順序依次對二叉樹進行遍歷。
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為指向根節(jié)點的一個指針,K為關鍵字,遍歷時從根節(jié)點開始,如果該節(jié)點不存在,則返回NULL值,否則返回一個指向關鍵字K的指針。遍歷節(jié)點X時,將X.KEY與關鍵字K進行比較,如果二者相等,則終止查找;如果K 用戶組織架構管理系統(tǒng)基于LAMP平臺進行軟件開發(fā)。LAMP是指采用Linux操作系統(tǒng)、Apache服務器、MySQL數(shù)據(jù)庫和PHP后臺腳本編程語言進行組合的一個軟件開發(fā)平臺[14]。相比J2EE[15]和ASP.NET[16]等商業(yè)軟件開發(fā)平臺,LAMP平臺使用開源的方式,不僅成本低、兼容度高,而且操作簡單,安全可靠,成為當今主流的開發(fā)模式?;贚AMP的架構設計如圖3所示。其中FireFox前端瀏覽器、Apache服務器、PHP開發(fā)語言和MySQL數(shù)據(jù)庫分別對應系統(tǒng)的用戶層、服務層、管理層和數(shù)據(jù)層。用戶層是面向用戶的,主要提供用戶可以瀏覽操作的瀏覽器頁面;服務層為用戶層提供Web服務,同時為管理層提供操作系統(tǒng)硬件支撐;管理層主要是對頁面瀏覽模塊、后臺管理模塊和系統(tǒng)管理模塊3大模塊進行管理,其中頁面瀏覽模塊主要是對前端頁面的管理,后臺管理模塊是對后端數(shù)據(jù)的管理,系統(tǒng)管理模塊主要是對系統(tǒng)用戶、應用和日志等信息的管理;數(shù)據(jù)層包含數(shù)據(jù)庫,主要提供數(shù)據(jù)查詢和數(shù)據(jù)存儲等功能。 Figure 3 LAMP architecture 用戶組織架構管理系統(tǒng)采用B/S架構實現(xiàn),包含用戶管理、應用管理、日志管理、組織架構和訪問控制等多種功能,為用戶提供了一套高效可靠的用戶組織架構管理方案?;贚AMP架構設計的軟件架構如圖4所示。其中,用戶層主要進行人機交互,向用戶提供可視化的瀏覽頁面;服務層主要是對用戶進行訪問控制,為不同的用戶提供不同的訪問頁面和訪問權限;管理層主要是對用戶管理、應用管理、日志管理和組織架構等功能模塊進行管理;數(shù)據(jù)層提供數(shù)據(jù)庫中底層數(shù)據(jù)的操作服務,如增刪改查等操作服務。 Figure 4 Software architecture 根據(jù)系統(tǒng)架構的需求,用戶組織架構管理系統(tǒng)主要包含5大模塊:訪問控制、用戶管理、應用管理、日志管理和組織架構,如圖5所示。其中訪問控制模塊是對用戶使用系統(tǒng)的控制,主要對用戶訪問權限進行控制,即針對不同的用戶需求,實現(xiàn)用戶與不同應用之間的綁定授權;用戶管理模塊主要是用戶管理員對用戶賬號進行增加、刪除、修改和查詢等操作的管理;應用管理主要是對應用進行增加、刪除、修改和查詢等操作的管理;日志管理模塊主要是記錄系統(tǒng)中用戶操作和系統(tǒng)報錯等日志信息,方便后期維護;組織架構模塊是提供多層用戶組織構架,方便系統(tǒng)管理員對用戶進行分類分層的管理。 Figure 5 System block 由于大量的數(shù)據(jù)需要查詢和保存,本文采用數(shù)據(jù)庫對數(shù)據(jù)進行統(tǒng)一管理和存儲,根據(jù)系統(tǒng)需求,主要分為以下5個數(shù)據(jù)表:user、app、con、log、org。 (1)user是用戶信息表,主要記錄用戶ID、用戶名、用戶全稱、電子郵箱、用戶標題、用戶組、用戶登錄時間和用戶注冊時間等信息。其中用戶ID為用戶注冊時自動生成的唯一編號,用戶名為用戶設置的用戶登錄名稱,用戶全稱為用戶的真實名,用戶標題為用戶組織架構的名稱,用戶組分為2種:系統(tǒng)用戶admin和普通用戶組。 (2)app是應用信息表,主要用來記錄應用ID、應用名稱、應用版本、應用注冊時間、應用更新時間和應用URL地址等信息。應用ID為每個應用注冊時自動生成的唯一編號,系統(tǒng)管理員對用戶應用授權時,主要通過應用名稱和應用版本對其授權。 (3)con是訪問授權表,主要記錄用戶ID、應用ID、用戶應用授權綁定ID等信息。每一個用戶應用授權綁定ID對應一對用戶ID和應用ID,通過查詢用戶應用授權綁定ID可以快速查找該ID下對應的用戶ID和應用ID,再通過用戶ID和應用ID分別在user表和app表中查找相關條目,便可以獲取對應的用戶信息和應用信息。 (4)log是日志表,主要記錄系統(tǒng)日志信息,包括日志ID、用戶ID、日志創(chuàng)建時間、日志事件類型和日志事件描述等信息。日志ID為每一條日志記錄信息的編號,只要得到日志ID便可以獲取相應的日志信息。日志事件類型包括用戶注冊事件、用戶登錄事件、應用注冊事件和應用版本更新事件等所有系統(tǒng)內(nèi)操作的事件。日志事件描述主要是對日志事件的用戶、時間、操作等詳細信息的記錄。 (5)org是組織架構表,主要記錄用戶的組織架構關系,包括組織架構條碼ID、節(jié)點ID、父節(jié)點ID、子節(jié)點ID、兄弟節(jié)點ID、節(jié)點名稱、節(jié)點創(chuàng)建時間和節(jié)點更新時間。其中節(jié)點ID為當前節(jié)點所在的ID,父節(jié)點ID為當前節(jié)點的上一層節(jié)點的ID,兄弟ID為當前節(jié)點的同一層節(jié)點的ID,子節(jié)點ID為當前節(jié)點的下一層節(jié)點的ID。 (1)用戶管理頁面。 用戶管理頁面為系統(tǒng)管理員創(chuàng)建用戶并對用戶進行增刪改查等操作的頁面,如圖6所示,系統(tǒng)管理員可以對用戶名、用戶全稱、電子郵箱和用戶標題等進行設置和管理,同時也可以創(chuàng)建新的用戶,此頁面對用戶不可視,只有系統(tǒng)管理員才可登錄此頁面進行操作。 Figure 6 User management page (2)日志管理頁面。 日志管理頁面用于呈現(xiàn)系統(tǒng)日志信息,包括用戶操作、應用操作和系統(tǒng)的報錯信息等,便于系統(tǒng)管理員對系統(tǒng)的維護和查詢,每條日志消息將以時間軸的形式呈現(xiàn),如圖7所示,圖中下方的第1、2條記錄分別記錄了用戶注冊成功和用戶登錄成功的日志歷史消息。管理員也可以通過頁面左上角的搜索按鈕對日志進行搜索查詢,過濾掉不需要的日志信息。 Figure 7 Log management page (3)組織架構頁面。 組織架構頁面為用戶組織架構頁面,用于系統(tǒng)管理員查看和編輯組織架構,其中編輯欄目可以添加和刪除父節(jié)點、子節(jié)點和兄弟節(jié)點,必須選擇節(jié)點后,才能對該節(jié)點進行添加和刪除等操作。頁面右上角的Export為輸出按鈕,點擊此按鈕便可將當前的組織架構以圖像的形式輸出保存,組織架構查詢和編輯頁面分別如圖8和圖9所示。 Figure 8 Organization query page Figure 9 Organization edit page 本節(jié)通過運行程序和模擬訪問等方法,對用戶組織架構管理系統(tǒng)的用戶管理、應用管理、日志管理和組織架構等4個模塊的功能進行測試,確認該系統(tǒng)各個模塊的功能是否能正常運行。測試結果如表1所示,所有界面均能正常訪問,所有功能均達到預期效果,且測試過程中沒有出現(xiàn)任何功能錯誤的問題。 Table 1 Functional test results of user organization structure management system 本節(jié)利用測試工具LoadRunner 11.0[17]對并發(fā)用戶登錄用戶組織架構管理系統(tǒng)界面以及用戶行為操作進行模擬測試,通過測試不同并發(fā)用戶數(shù)量的訪問,確認用戶組織架構管理系統(tǒng)處理用戶請求的能力。通過LoadRunner自動負載測試工具,模擬不同的并發(fā)用戶數(shù)量,對整個系統(tǒng)進行模擬測試,生成的測試腳本如圖10所示。在性能測試過程中,將系統(tǒng)并發(fā)用戶數(shù)量分別設定為100人和200人2種情況,每秒增加的用戶數(shù)量均為2人,測試時間均為5 min。測試過程中均未發(fā)生系統(tǒng)卡頓和崩潰的現(xiàn)象,且隨著訪問用戶數(shù)量的增加和并發(fā)用戶數(shù)量的增加,系統(tǒng)性能均保持良好。 Figure 10 Test script diagram 2種并發(fā)用戶數(shù)量的性能測試對比結果如表2所示。 Table 2 Performance comparison with different concurrent users 通過測試結果可知,隨著并發(fā)用戶數(shù)量的增多,系統(tǒng)的響應時間稍有增加,但響應時間很短,均不影響用戶體驗。同時隨著并發(fā)用戶數(shù)量的增多,在系統(tǒng)并發(fā)用戶持續(xù)訪問5 min內(nèi),系統(tǒng)性能保持良好,沒有出現(xiàn)任何異常。由此可見,系統(tǒng)效率高,網(wǎng)絡開銷小,且能穩(wěn)定運行,達到了設計目的。 本節(jié)將本文提出的方法(以下簡稱“方法1”)與基于Kerberos技術的方法(以下簡稱“方法2”)[18]進行性能結果對比。主要對系統(tǒng)每秒點擊數(shù)和系統(tǒng)平均吞吐量2個指標分別進行了比較。系統(tǒng)每秒點擊數(shù)指用戶每秒向服務器提交HTTP請求的次數(shù),通過該指標可以評估用戶在系統(tǒng)運行過程中產(chǎn)生的負載量,從而判斷系統(tǒng)的穩(wěn)定性;系統(tǒng)平均吞吐量指服務器每秒處理的數(shù)據(jù)量,通過該指標可以評估服務器處理數(shù)據(jù)的能力,從而判斷系統(tǒng)的健壯性。對比結果如表3所示,相比方法2,方法1系統(tǒng)每秒點擊數(shù)和系統(tǒng)平均吞吐量2項指標均有所提高,且分別提高了8.7%和7.3%以上[19]。由此可見,相比于Kerberos繁瑣復雜的管理機制,本文提出的方法,不僅系統(tǒng)穩(wěn)定,而且減輕了服務端的負擔,降低了網(wǎng)絡開銷,提高了數(shù)據(jù)存取效率。 Table 3 Performance comparison of two methods 本文針對高性能計算用戶組織架構管理系統(tǒng)面臨的幾個關鍵問題,提出了一種基于LAMP的高性能計算用戶組織架構管理系統(tǒng)的實現(xiàn)方法,同時對該系統(tǒng)進行了設計實現(xiàn)和系統(tǒng)測試。測試結果表明,系統(tǒng)各項功能均能正常訪問,且系統(tǒng)性能穩(wěn)定良好,為用戶提供了一套高效可靠的用戶組織架構管理方案,改善了用戶體驗,降低了網(wǎng)絡開銷,提高了數(shù)據(jù)存取效率。未來的E級計算將為高性能計算帶來新的機遇和挑戰(zhàn),如何對用戶組織架構管理系統(tǒng)實現(xiàn)智能化的管理,以及利用區(qū)塊鏈去中心化的思想加強數(shù)據(jù)傳輸?shù)陌踩珕栴}等將作為下一步的研究方向,以期為用戶帶來更好的使用體驗,提供更安全的數(shù)據(jù)訪問。3 系統(tǒng)設計與實現(xiàn)
3.1 LAMP架構
3.2 軟件架構
3.3 模塊設計
3.4 數(shù)據(jù)庫配置
3.5 頁面實現(xiàn)
4 系統(tǒng)測試
4.1 功能測試
4.2 性能測試
4.3 結果對比
5 結束語