和 榮, 肖海力, 王小寧, 盧莎莎, 遲學斌
1(中國科學院 計算機網(wǎng)絡信息中心, 北京 100083)
2(中國科學院大學, 北京 100049)
高性能計算能力是國家綜合實力和創(chuàng)新能力的重要體現(xiàn), 是支撐我國科技持續(xù)發(fā)展的關鍵技術之一. 高性能計算服務環(huán)境[1], 又稱中國國家網(wǎng)格(China national grid, CNGrid), 在國家科技發(fā)展中具有重要推動作用.高性能計算服務環(huán)境一直受到國家的高度重視與國家重點研發(fā)計劃的持續(xù)支持. 歷經(jīng)10多年的發(fā)展, 高性能計算服務環(huán)境已經(jīng)接入包括中國科學院計算機網(wǎng)絡信息中心結點、國家超級計算天津中心結點、國家超級計算廣州中心結點、國家超級計算深圳中心結點、國家超級計算無錫中心結點等在內(nèi)的22個結點; 提供涉及量子化學、分子模擬、高能物理、生物科學等領域的開源軟件、商業(yè)軟件和自主研發(fā)軟件. 高性能計算服務環(huán)境屏蔽了作業(yè)管理系統(tǒng)、接入方式以及管理制度等方面的異構性, 為科研人員提供具有統(tǒng)一訪問入口、統(tǒng)一使用方法和用戶技術支持的高水平高性能計算應用服務.
高性能計算服務環(huán)境作為一個服務環(huán)境, 其主要目標為吸引更多的用戶和科研團隊來使用. 目前, 高性能計算服務環(huán)境主要提供3類用戶接口: 第1類命令行, 主要是面向傳統(tǒng)的高性能計算用戶, 支持程序編譯等多種靈活的交互命令操作; 第2類高性能計算環(huán)境通用計算平臺[2], 主要面向領域用戶, 通過計算門戶即可提交作業(yè)并管理各類計算任務; 第3類應用編程接口, 主要面向應用社區(qū)和業(yè)務平臺的建設提供支撐. 隨著環(huán)境的發(fā)展, 接入的超算中心以及應用社區(qū)和業(yè)務平臺越來越多, 希望超算中心以及社區(qū)和業(yè)務平臺用戶能夠以原有賬號登錄高性能計算環(huán)境使用資源. 現(xiàn)有的高性能計算環(huán)境僅支持通過lightweight directory access protocol (LDAP)[3]認證的網(wǎng)格賬號登錄, 應用社區(qū)和業(yè)務平臺都有自己的用戶且認證方式各不相同,同時集群用戶也想直接訪問環(huán)境中資源.
為了更好地支持社區(qū)與業(yè)務平臺, 我們開發(fā)設計了新版高性能計算服務環(huán)境應用編程接口. 該接口支持環(huán)境認證與授權服務系統(tǒng), 允許社區(qū)或業(yè)務平臺用戶通過認證授權后可直接調(diào)用接口訪問國家高性能計算環(huán)境. 新版接口增加了網(wǎng)關模塊來實現(xiàn)接口的訪問控制、流量監(jiān)測等, 增強了接口的易用和安全性.
本文圍繞國家高性能計算服務環(huán)境應用編程接口展開敘述, 重點介紹接口的整體結構、關鍵技術、功能實現(xiàn)以及部署測試, 最后進行總結和展望.
圖1為接口的整體結構圖, 外部應用社區(qū)和業(yè)務平臺通過訪問高性能計算服務環(huán)境應用編程接口網(wǎng)關與系統(tǒng)核心服務交互獲取并使用高性能計算環(huán)境資源.
圖1 接口整體結構圖
應用社區(qū)和業(yè)務平臺是高性能計算專項或高性能計算領域內(nèi)的社區(qū)和業(yè)務平臺, 包括生物醫(yī)藥社區(qū)、教育實踐平臺等. 他們發(fā)送HTTP請求到接口網(wǎng)關, 網(wǎng)關響應后返回數(shù)據(jù)給社區(qū)或業(yè)務平臺.
接口網(wǎng)關的基本功能之一是轉(zhuǎn)發(fā)客戶端的請求至后臺軟件核心服務. 為了保證轉(zhuǎn)發(fā)過程的安全性, 網(wǎng)關需要完成以下操作:
1) 身份認證檢測, 確保用戶身份信息的有效性.
2) 接口訪問權限管理與鑒別, 判斷用戶是否具有訪問該接口的權限.
3) 參數(shù)合法性檢測和接口安全防護, 主要用于保護后端系統(tǒng)和數(shù)據(jù)不被惡意侵犯和篡改. 合法性主要是檢測用戶請求路徑或參數(shù)是否有錯誤; 對接口調(diào)用進行完整性、有效性、唯一性鑒定, 包括對請求參數(shù)加密、參數(shù)攜帶的時間戳是否正確.
4) 對訪問的請求進行流量控制與管理, 對最大連接數(shù)、HTTP連接以及每秒請求數(shù)的限制. 設置一定的流量控制策略實現(xiàn)請求的最大化滿足, 以盡快的速度對用戶請求做出響應.
系統(tǒng)軟件核心服務包括系統(tǒng)核心軟件SCE[4,5]、SCEAPI開發(fā)庫[6]和SCE轉(zhuǎn)發(fā)服務.
SCE實現(xiàn)了資源的統(tǒng)一管理和調(diào)度, 采用包括應用層、由中央服務(center service, CS)和前端服務(front service, FS)構成的服務層和由分布在全國各地的高性能計算機(high performance computer, HPC)構成的資源層在內(nèi)的單中心3層架構部署. FS是SCE的前端服務, 主要用于資源的接入與監(jiān)控. 通過定義HPC的各種驅(qū)動, 有效的屏蔽底層系統(tǒng)的差異; 系統(tǒng)服務層CS是SCE最核心的模塊, 提供了用戶使用超級計算環(huán)境所必需的最基本的功能以及若干擴展功能; 面向用戶提供命令行、Web Portal、GUI等多種使用方式.
SCEAPI開發(fā)庫是一套利用Java代碼開發(fā)的代碼庫, 通過與SCE交互提供作業(yè)管理服務、文件傳輸服務、應用管理服務以及用戶管理服務.
SCE轉(zhuǎn)發(fā)服務提供訪問SCE的API, 提供多線程、多用戶的服務功能, 從而支持大量用戶的訪問.SCE轉(zhuǎn)發(fā)服務通過調(diào)用SCEAPI開發(fā)庫完成具體的功能、組裝JSON返回結果等信息.
高性能計算服務環(huán)境應用編程接口主要面向應用社區(qū)和業(yè)務平臺提供方便可用的接口訪問高性能計算環(huán)境. 設計實現(xiàn)過程中主要涉及身份認證檢測、接口訪問控制、安全加固、流量控制4個方面的關鍵技術.
用戶身份認證檢測是接口網(wǎng)關檢測請求消息的第一道關卡, 負責檢測用戶通過認證的有效性. 客戶端需接入高性能計算環(huán)境認證與授權服務[7], 通過認證之后使用訪問令牌(后面簡稱access_token)訪問接口網(wǎng)關服務. 接口網(wǎng)關對用戶身份的認證檢測實際上就是判斷access_token 的有效性. 圖2表示接口網(wǎng)關進行身份認證檢測的流程.
圖2 接口網(wǎng)關身份認證檢測流程圖
1) 判斷消息頭是否具有access_token
網(wǎng)關接收到消息請求后判斷消息頭中是否含有access_token, 沒有則提示用戶需要登錄.
2) 檢測數(shù)據(jù)庫
根據(jù)獲取到的access_token與數(shù)據(jù)庫已經(jīng)存儲的信息進行比對, 若該access_token已有對應的用戶信息且處于有效狀態(tài)進行下一步權限判斷; 否則與認證授權服務交互.
3) 與認證與授權服務交互
發(fā)送https請求給認證與授權服務, 通過返回的數(shù)據(jù)判斷access_token是否有效并記錄用戶信息.
環(huán)境認證與授權服務系統(tǒng)主要用來實現(xiàn)標記不同用戶的身份信息并根據(jù)用戶需求授予權限. 認證授權系統(tǒng)基于OAuth2、 OpenID Connect (OIDC)[8,9]協(xié)議設計實現(xiàn), 包括用戶登錄認證和授權兩個功能模塊. 具體結構圖如圖3所示. 目前已實現(xiàn)環(huán)境網(wǎng)格賬號認證、集群賬號中的“元”以及人工智能系統(tǒng)賬號的認證,授權主要是允許第三方客戶端獲取用戶信息.
圖3 認證與授權系統(tǒng)結構圖
第三方客戶端通過認證與授權系統(tǒng)獲取訪問令牌具體流程圖如圖4所示.
圖4 認證授權流程圖
1) 初始化一個OAuth2流程
客戶端按照接入認證與授權服務的文檔要求構建登錄請求, 攜帶相關參數(shù).
2) 認證
OAuth2認證服務自動判斷用戶是否已經(jīng)登錄并跳轉(zhuǎn)到相應的頁面. 若未登錄根據(jù)用戶的選擇進入登錄頁面, 用戶在登錄頁面輸入相應賬號和密碼進行驗證.
3) 授權
用戶登錄成功后, 跳轉(zhuǎn)至授權頁面. 用戶點擊授予的權限發(fā)送給授權服務, 授權服務獲取授權后客戶端可獲取授權碼.
4) 獲取訪問令牌
客戶端利用返回的授權碼從認證與授權服務獲取訪問令牌.
用戶身份認證檢測之后是接口訪問授權檢測. 高性能計算環(huán)境中, 不同的客戶端不同的用戶身份被授權訪問不同的API組. 網(wǎng)關系統(tǒng)獲取用戶的認證身份信息之后, 可以根據(jù)預設置的分組信息檢測對目標接口服務訪問的權限. 目前環(huán)境對接口的訪問控制主要是基于角色的授權訪問和第三方應用授權策略相結合來實現(xiàn).
1) 基于角色的授權訪問
環(huán)境普通網(wǎng)格用戶: 根據(jù)賬號申請初期用戶的需求給出所需權限. 利用機器學習算法分析用戶的使用習慣并適應性更改權限;
環(huán)境技術支持者: 除具備普通用戶權限外, 可查看所有用戶的作業(yè)、修改作業(yè)狀態(tài)、查看下載作業(yè)文件;
環(huán)境管理員: 可訪問所有接口, 包括修改用戶信息等;
第三方應用用戶: 根據(jù)用戶初次通過認證與授權服務登錄系統(tǒng)時所選擇的權限為用戶分配權限, 初期用戶可能只具有查看和個別集群使用權限, 后續(xù)會根據(jù)用戶的使用習慣動態(tài)調(diào)配.
2) 第三方應用授權策略
初步申請接入環(huán)境時給所有應用開通查看資源的權限, 根據(jù)應用針對的用戶常用的軟件或資源開通某一集群的使用權限, 保證用戶可以訪問環(huán)境并提交任務. 后續(xù)根據(jù)應用用戶自身的需求可增加權限.
用戶發(fā)送訪問請求, 根據(jù)用戶類型決定通過哪些訪問策略為用戶請求做出響應. 環(huán)境賬號發(fā)送的請求,根據(jù)是否滿足角色的訪問控制做出拒絕或者滿足的響應. 第三方應用賬號首先判斷是否滿足第三應用的授權, 然后判斷用戶角色策略做出拒絕或者滿足的響應.
為了保證API請求的安全, 客戶端需要對發(fā)送的API進行加密, 將加密后的簽名串作為請求頭的一部分傳到接口網(wǎng)關. 為防止請求的重放性, 請求參數(shù)還加入了時間戳等.
接口網(wǎng)關安全檢查流程如圖5所示. 網(wǎng)關首先對接收到的API請求進行跨域檢查, 避免跨域訪問引起的安全問題. 其次, 檢測請求所攜帶的應用標識appid是否是有效的. 再次, 對請求參數(shù)做加密簽名, 并判斷與請求參數(shù)攜帶的簽名串是否相同, 如果簽名串相同,則通過API完整性檢查; 否則提示用戶簽名錯誤. 最后進行權限檢查, 結合應用標識appid和用戶自己的權限做出判斷.
圖5 接口網(wǎng)關安全檢查流程圖
網(wǎng)關安全檢查可有效避免用戶的惡意攻擊, 使得用戶的請求在網(wǎng)關層就被阻斷, 有效提高了SCE轉(zhuǎn)發(fā)服務的健壯性.
流量監(jiān)控與管理是網(wǎng)關系統(tǒng)的常用功能, 可根據(jù)運維需求對通過的請求流量做分流或熔斷等處理. 流量監(jiān)控包括對最大連接數(shù)、HTTP連接以及每秒請求數(shù)的限制.
根據(jù)以往接口運行經(jīng)驗, 設置一定的流量控制策略實現(xiàn)請求的最大化滿足, 以盡快的速度對用戶請求做出響應.
1) 用戶流量限制
對用戶單位時間內(nèi)的調(diào)用次數(shù)設定最大訪問值.避免用戶頻繁調(diào)用接口, 設置用戶每小時訪問接口的最大值, 每訪問一次接口, 訪問次數(shù)累計, 達到最大之后直接拒絕用戶的請求.
2) 接口流量限制
對于作業(yè)提交接口, 為避免用戶批量提交作業(yè), 同一時間限制用戶提交作業(yè)數(shù)目; 對于需要與核心服務SCE交互才能獲取數(shù)據(jù)的接口, 受SSH最大連接數(shù)的限制, 對接口設定最大訪問次數(shù).
3) 應用流量限制
對調(diào)用接口的應用(應用社區(qū)、業(yè)務平臺)設置一個總的最大訪問次數(shù), 避免應用被攻擊后持續(xù)訪問接口, 造成接口服務無法正常服務.
4) 其他措施
對于統(tǒng)計類的接口, 借助緩存等服務來存儲數(shù)據(jù),避免接口一直與后臺服務交互; SCE轉(zhuǎn)發(fā)服務采用微服務的方式部署, 避免相互之間的影響, 對訪問可做到分流限制.
1) 接口設計原則
為了盡量保持與現(xiàn)有的高性能計算環(huán)境應用接口設計一致, 訪問參數(shù)跟原有接口一樣, 每個接口都攜帶應用標識字段; 請求消息頭增加兩個字段: 環(huán)境認證與授權系統(tǒng)簽發(fā)的access_token, 用戶來源字段: usersource. 通過這兩個字段可有效判斷用戶的登錄信息并獲取用戶身份信息.
2) 合法性以及權限檢測
通過過濾器實現(xiàn)合法性以及權限檢測等功能, 任何發(fā)送到網(wǎng)關的請求都要經(jīng)過過濾器中定義的各種檢測規(guī)則方可轉(zhuǎn)發(fā)至SCE轉(zhuǎn)發(fā)服務. 如時間戳檢查未通過時提示用戶“時間戳錯誤”; 簽名驗證未通過時提示“簽名錯誤”; 權限檢測未通過時提示“API授權錯誤”;跨域訪問判斷未通過時提示“訪問被拒絕”. 設置清晰的錯誤提示方便用戶快速定位錯誤源頭, 盡快修復問題.
3) 接口轉(zhuǎn)發(fā)模塊
為方便網(wǎng)關層快速增加修改接口, 所有后臺接口通過配置文件來管理. 后臺接口地址需要存儲在配置文件中, 網(wǎng)關收到請求信息并經(jīng)過安全診斷后按照配置中的路徑進行轉(zhuǎn)發(fā).
當接口服務新增一個接口時, 只需在配置文件中國增加一條轉(zhuǎn)發(fā)配置, 網(wǎng)關會自動感知配置文件的變化, 方便接口的快速發(fā)布.
SCE轉(zhuǎn)發(fā)服務真正服務于用戶請求提供返回數(shù)據(jù). 在實現(xiàn)上為了與核心軟件SCE交互, 需要每一個API接口都包括用戶名和應用標識兩個字段. 下面就訪問高性能計算環(huán)境資源相關的作業(yè)管理服務、文件傳輸服務和資源管理服務展開論述.
3.2.1 作業(yè)管理服務
作業(yè)管理服務主要提供用戶查詢、修改作業(yè)狀態(tài)、提交作業(yè). 表1是作業(yè)管理服務包含的接口, 用戶可提交作業(yè)并根據(jù)自己的需求查詢以及修改作業(yè)狀態(tài).
表1 作業(yè)管理服務接口
3.2.2 文件傳輸服務
文件傳輸服務主要用于上傳、下載作業(yè)的文件信息, 也包括查看作業(yè)文件目錄信息、作業(yè)文件內(nèi)容. 接口同時提供了可直接調(diào)用無需落地傳輸?shù)臄?shù)據(jù)中轉(zhuǎn)傳輸服務mcp[10]進行文件的上傳和下載.
表2是文件傳輸服務所包含的接口, 目前用戶比較常用的就是通過mcp服務實現(xiàn)的文件查看和上傳.調(diào)用此接口時可不必指定查看文件的位置, 服務器會首先查看集群服務器是否存在文件, 沒有的話再去網(wǎng)格服務器查看文件. 用戶通過調(diào)用一次接口即可獲取到自己的作業(yè)文件內(nèi)容, 增強了用戶的體驗度.
表2 文件傳輸服務接口
3.2.3 資源管理服務
資源管理服務主要用于查詢環(huán)境中所有的集群和應用信息. 表3是資源管理服務的所有接口, 用戶在提交作業(yè)之前需要先查看可提交此應用的集群信息, 然后選擇可用的集群提交作業(yè).
表3 資源管理服務接口
高性能計算環(huán)境通用計算平臺作為調(diào)用接口的第三方應用程序, 同時由我們自己研發(fā)實現(xiàn). 下面以高性能計算環(huán)境通用計算平臺(簡稱Portal服務)為例來說明新版接口的工作流程.
圖6是接口的具體部署圖, 其中, 環(huán)境認證與授權服務、Portal服務、接口網(wǎng)關服務和SCE轉(zhuǎn)發(fā)服務都是以Docker容器的方式部署, 方便后期維護時服務之間不會相互影響. 接口網(wǎng)關收到請求后通過相關預處理轉(zhuǎn)發(fā)至SCE轉(zhuǎn)發(fā)服務中內(nèi)部訪問接口.
圖6 接口部署圖
表4介紹了接口部署時涉及到的各個服務以及對應的數(shù)據(jù)庫的功能.
表4 服務系統(tǒng)功能及對應數(shù)據(jù)庫
1) 環(huán)境認證與授權服務
通過設置環(huán)境認證與授權服務對應的數(shù)據(jù)庫可為接入到認證與授權服務端的應用和接口網(wǎng)關提供用戶信息, 驗證訪問令牌access_token的有效性.
2) Portal服務
通過Portal服務數(shù)據(jù)庫存儲用戶的操作記錄顯示用戶首頁的常用列表、存儲用戶的登錄信息可方便用戶在登錄有效期內(nèi)直接利用接口獲取數(shù)據(jù).
3) 接口網(wǎng)關服務
接口網(wǎng)關服務通過數(shù)據(jù)存儲的數(shù)據(jù)可用于判斷用戶的權限、訪問接口時攜帶的access_token信息有效性等, 避免一直與認證與授權服務交互換取用戶登錄信息.
4) SCE轉(zhuǎn)發(fā)服務
SCE轉(zhuǎn)發(fā)服務數(shù)據(jù)庫主要存儲用戶的作業(yè)信息、用戶信息、環(huán)境中的資源信息. 通過此數(shù)據(jù)庫才能實現(xiàn)獲取用戶在環(huán)境中的作業(yè)數(shù)據(jù).
通過用例Portal服務介紹接入環(huán)境認證與授權服務以及調(diào)用接口的流程.
4.2.1 接入環(huán)境認證與授權服務
按照認證與授權服務頒發(fā)文檔中的流程接入環(huán)境認證與授權服務系統(tǒng), 主要進行如下操作:
1) 申請接入賬號
主要包括申請應用唯一標識、授權類型、授權范圍、回調(diào)地址.
2) 網(wǎng)站接入開發(fā)
構造登錄認證請求、用戶完成認證授權后瀏覽器跳轉(zhuǎn)到回調(diào)地址, 后臺獲取code碼然后換取訪問令牌和身份令牌. 具體實現(xiàn)流程如前面圖3所示, 這里不再重復介紹.
3) 部署上線
Portal服務接入環(huán)境認證與授權服務后, 點擊登錄可跳轉(zhuǎn)到認證與授權服務提供的登錄頁面, 如圖7所示, 用戶輸入登錄信息, 驗證通過后Portal后端通過獲取到的code換取訪問令牌和身份令牌, 之后Portal端通過調(diào)用接口即可獲取相應的數(shù)據(jù). 發(fā)送給網(wǎng)關的訪問請求需要攜帶訪問令牌和用戶來源以便網(wǎng)關服務可以判斷用戶的有效性.
圖7 環(huán)境認證與授權服務登錄頁面
4.2.2 接口工作流程
用戶從發(fā)送請求到獲取到接口返回的數(shù)據(jù)需要經(jīng)過以下5個步驟, 圖8為作業(yè)接口示例.
圖8 作業(yè)接口示例
1) Portal發(fā)送請求
Portal按照對外公布的接口使用方法, 拼接請求所需參數(shù), 對參數(shù)進行加密處理, 加上當前時間戳信息,消息頭添加認證與授權服務頒發(fā)的access_token, 給網(wǎng)關發(fā)送HTTP請求.
2) 網(wǎng)關進行身份認證檢測
網(wǎng)關按照第2.1節(jié)身份認證檢測流程檢測此次請求用戶的身份, 若未通過檢測提示用戶請先登錄然后訪問.
3) 網(wǎng)關合法性及權限檢測
網(wǎng)關對此請求的參數(shù)以及權限進行檢測, 保證接口的安全性.
4) 網(wǎng)關轉(zhuǎn)發(fā)接口
網(wǎng)關把用戶的請求信息轉(zhuǎn)發(fā)至SCE轉(zhuǎn)發(fā)服務.
5) 接口返回數(shù)據(jù)
接口返回數(shù)據(jù)給網(wǎng)關, 網(wǎng)關對數(shù)據(jù)處理后轉(zhuǎn)發(fā)給用戶.
接口部署完成后, 我們對接口的正確性、響應時間等進行了測試.
1) 正確性測試
先后調(diào)用新版接口與原有接口返回數(shù)據(jù)對比, 檢測結果是否正確; 不用用戶同時登錄下調(diào)用接口檢測是否出現(xiàn)數(shù)據(jù)混亂等錯誤現(xiàn)象.
2) 響應時間
圖9為Portal調(diào)用查詢應用、查詢作業(yè)、提交作業(yè)、上傳文件、查看文件、下載文件等常用接口的平均響應時間, 橫坐標為不同的接口、縱坐標為響應時間 (s). 由圖9可以看出接口基本上在0.2 s內(nèi)可返回結果, 提交作業(yè)模塊受作業(yè)參數(shù)、加載作業(yè)文件的影響響應時間略長, 大約在0.5 s左右.
圖9 常用接口響應時間
本文介紹了高性能計算服務環(huán)境應用編程接口的總體結構圖、關鍵技術以及如何設計實現(xiàn)和部署, 并通過用例高性能計算環(huán)境通用計算平臺Portal說明了如何調(diào)用接口訪問國家高性能計算環(huán)境. 重點突出了接口網(wǎng)關在用戶身份認證檢測、對接口的訪問控制、安全性方面的加固以及流量控制方面的重要性.
應用社區(qū)和業(yè)務平臺無須再新申請網(wǎng)格賬號, 只需接入環(huán)境認證與授權服務即可通過新版接口訪問高性能計算環(huán)境資源, 大大提高了用戶的使用便捷性. 其他應用也可以通過接入環(huán)境認證與認證服務系統(tǒng)訪問國家高性能計算環(huán)境, 環(huán)境網(wǎng)格賬號與應用社區(qū)、業(yè)務平臺賬號真正實現(xiàn)了互聯(lián)互通并相互訪問資源.
目前接口部署在測試環(huán)境中, 后續(xù)會進一步對接口進行測試優(yōu)化, 并盡快部署到正式環(huán)境中推廣給各大社區(qū)和業(yè)務平臺使用.