和 榮, 肖海力, 王小寧, 盧莎莎, 遲學斌
1(中國科學院 計算機網絡信息中心, 北京 100083)
2(中國科學院大學, 北京 100049)
高性能計算能力是國家綜合實力和創新能力的重要體現, 是支撐我國科技持續發展的關鍵技術之一. 高性能計算服務環境[1], 又稱中國國家網格(China national grid, CNGrid), 在國家科技發展中具有重要推動作用.高性能計算服務環境一直受到國家的高度重視與國家重點研發計劃的持續支持. 歷經10多年的發展, 高性能計算服務環境已經接入包括中國科學院計算機網絡信息中心結點、國家超級計算天津中心結點、國家超級計算廣州中心結點、國家超級計算深圳中心結點、國家超級計算無錫中心結點等在內的22個結點; 提供涉及量子化學、分子模擬、高能物理、生物科學等領域的開源軟件、商業軟件和自主研發軟件. 高性能計算服務環境屏蔽了作業管理系統、接入方式以及管理制度等方面的異構性, 為科研人員提供具有統一訪問入口、統一使用方法和用戶技術支持的高水平高性能計算應用服務.
高性能計算服務環境作為一個服務環境, 其主要目標為吸引更多的用戶和科研團隊來使用. 目前, 高性能計算服務環境主要提供3類用戶接口: 第1類命令行, 主要是面向傳統的高性能計算用戶, 支持程序編譯等多種靈活的交互命令操作; 第2類高性能計算環境通用計算平臺[2], 主要面向領域用戶, 通過計算門戶即可提交作業并管理各類計算任務; 第3類應用編程接口, 主要面向應用社區和業務平臺的建設提供支撐. 隨著環境的發展, 接入的超算中心以及應用社區和業務平臺越來越多, 希望超算中心以及社區和業務平臺用戶能夠以原有賬號登錄高性能計算環境使用資源. 現有的高性能計算環境僅支持通過lightweight directory access protocol (LDAP)[3]認證的網格賬號登錄, 應用社區和業務平臺都有自己的用戶且認證方式各不相同,同時集群用戶也想直接訪問環境中資源.
為了更好地支持社區與業務平臺, 我們開發設計了新版高性能計算服務環境應用編程接口. 該接口支持環境認證與授權服務系統, 允許社區或業務平臺用戶通過認證授權后可直接調用接口訪問國家高性能計算環境. 新版接口增加了網關模塊來實現接口的訪問控制、流量監測等, 增強了接口的易用和安全性.
本文圍繞國家高性能計算服務環境應用編程接口展開敘述, 重點介紹接口的整體結構、關鍵技術、功能實現以及部署測試, 最后進行總結和展望.
圖1為接口的整體結構圖, 外部應用社區和業務平臺通過訪問高性能計算服務環境應用編程接口網關與系統核心服務交互獲取并使用高性能計算環境資源.

圖1 接口整體結構圖
應用社區和業務平臺是高性能計算專項或高性能計算領域內的社區和業務平臺, 包括生物醫藥社區、教育實踐平臺等. 他們發送HTTP請求到接口網關, 網關響應后返回數據給社區或業務平臺.
接口網關的基本功能之一是轉發客戶端的請求至后臺軟件核心服務. 為了保證轉發過程的安全性, 網關需要完成以下操作:
1) 身份認證檢測, 確保用戶身份信息的有效性.
2) 接口訪問權限管理與鑒別, 判斷用戶是否具有訪問該接口的權限.
3) 參數合法性檢測和接口安全防護, 主要用于保護后端系統和數據不被惡意侵犯和篡改. 合法性主要是檢測用戶請求路徑或參數是否有錯誤; 對接口調用進行完整性、有效性、唯一性鑒定, 包括對請求參數加密、參數攜帶的時間戳是否正確.
4) 對訪問的請求進行流量控制與管理, 對最大連接數、HTTP連接以及每秒請求數的限制. 設置一定的流量控制策略實現請求的最大化滿足, 以盡快的速度對用戶請求做出響應.
系統軟件核心服務包括系統核心軟件SCE[4,5]、SCEAPI開發庫[6]和SCE轉發服務.
SCE實現了資源的統一管理和調度, 采用包括應用層、由中央服務(center service, CS)和前端服務(front service, FS)構成的服務層和由分布在全國各地的高性能計算機(high performance computer, HPC)構成的資源層在內的單中心3層架構部署. FS是SCE的前端服務, 主要用于資源的接入與監控. 通過定義HPC的各種驅動, 有效的屏蔽底層系統的差異; 系統服務層CS是SCE最核心的模塊, 提供了用戶使用超級計算環境所必需的最基本的功能以及若干擴展功能; 面向用戶提供命令行、Web Portal、GUI等多種使用方式.
SCEAPI開發庫是一套利用Java代碼開發的代碼庫, 通過與SCE交互提供作業管理服務、文件傳輸服務、應用管理服務以及用戶管理服務.
SCE轉發服務提供訪問SCE的API, 提供多線程、多用戶的服務功能, 從而支持大量用戶的訪問.SCE轉發服務通過調用SCEAPI開發庫完成具體的功能、組裝JSON返回結果等信息.
高性能計算服務環境應用編程接口主要面向應用社區和業務平臺提供方便可用的接口訪問高性能計算環境. 設計實現過程中主要涉及身份認證檢測、接口訪問控制、安全加固、流量控制4個方面的關鍵技術.
用戶身份認證檢測是接口網關檢測請求消息的第一道關卡, 負責檢測用戶通過認證的有效性. 客戶端需接入高性能計算環境認證與授權服務[7], 通過認證之后使用訪問令牌(后面簡稱access_token)訪問接口網關服務. 接口網關對用戶身份的認證檢測實際上就是判斷access_token 的有效性. 圖2表示接口網關進行身份認證檢測的流程.

圖2 接口網關身份認證檢測流程圖
1) 判斷消息頭是否具有access_token
網關接收到消息請求后判斷消息頭中是否含有access_token, 沒有則提示用戶需要登錄.
2) 檢測數據庫
根據獲取到的access_token與數據庫已經存儲的信息進行比對, 若該access_token已有對應的用戶信息且處于有效狀態進行下一步權限判斷; 否則與認證授權服務交互.
3) 與認證與授權服務交互
發送https請求給認證與授權服務, 通過返回的數據判斷access_token是否有效并記錄用戶信息.
環境認證與授權服務系統主要用來實現標記不同用戶的身份信息并根據用戶需求授予權限. 認證授權系統基于OAuth2、 OpenID Connect (OIDC)[8,9]協議設計實現, 包括用戶登錄認證和授權兩個功能模塊. 具體結構圖如圖3所示. 目前已實現環境網格賬號認證、集群賬號中的“元”以及人工智能系統賬號的認證,授權主要是允許第三方客戶端獲取用戶信息.

圖3 認證與授權系統結構圖
第三方客戶端通過認證與授權系統獲取訪問令牌具體流程圖如圖4所示.

圖4 認證授權流程圖
1) 初始化一個OAuth2流程
客戶端按照接入認證與授權服務的文檔要求構建登錄請求, 攜帶相關參數.
2) 認證
OAuth2認證服務自動判斷用戶是否已經登錄并跳轉到相應的頁面. 若未登錄根據用戶的選擇進入登錄頁面, 用戶在登錄頁面輸入相應賬號和密碼進行驗證.
3) 授權
用戶登錄成功后, 跳轉至授權頁面. 用戶點擊授予的權限發送給授權服務, 授權服務獲取授權后客戶端可獲取授權碼.
4) 獲取訪問令牌
客戶端利用返回的授權碼從認證與授權服務獲取訪問令牌.
用戶身份認證檢測之后是接口訪問授權檢測. 高性能計算環境中, 不同的客戶端不同的用戶身份被授權訪問不同的API組. 網關系統獲取用戶的認證身份信息之后, 可以根據預設置的分組信息檢測對目標接口服務訪問的權限. 目前環境對接口的訪問控制主要是基于角色的授權訪問和第三方應用授權策略相結合來實現.
1) 基于角色的授權訪問
環境普通網格用戶: 根據賬號申請初期用戶的需求給出所需權限. 利用機器學習算法分析用戶的使用習慣并適應性更改權限;
環境技術支持者: 除具備普通用戶權限外, 可查看所有用戶的作業、修改作業狀態、查看下載作業文件;
環境管理員: 可訪問所有接口, 包括修改用戶信息等;
第三方應用用戶: 根據用戶初次通過認證與授權服務登錄系統時所選擇的權限為用戶分配權限, 初期用戶可能只具有查看和個別集群使用權限, 后續會根據用戶的使用習慣動態調配.
2) 第三方應用授權策略
初步申請接入環境時給所有應用開通查看資源的權限, 根據應用針對的用戶常用的軟件或資源開通某一集群的使用權限, 保證用戶可以訪問環境并提交任務. 后續根據應用用戶自身的需求可增加權限.
用戶發送訪問請求, 根據用戶類型決定通過哪些訪問策略為用戶請求做出響應. 環境賬號發送的請求,根據是否滿足角色的訪問控制做出拒絕或者滿足的響應. 第三方應用賬號首先判斷是否滿足第三應用的授權, 然后判斷用戶角色策略做出拒絕或者滿足的響應.
為了保證API請求的安全, 客戶端需要對發送的API進行加密, 將加密后的簽名串作為請求頭的一部分傳到接口網關. 為防止請求的重放性, 請求參數還加入了時間戳等.
接口網關安全檢查流程如圖5所示. 網關首先對接收到的API請求進行跨域檢查, 避免跨域訪問引起的安全問題. 其次, 檢測請求所攜帶的應用標識appid是否是有效的. 再次, 對請求參數做加密簽名, 并判斷與請求參數攜帶的簽名串是否相同, 如果簽名串相同,則通過API完整性檢查; 否則提示用戶簽名錯誤. 最后進行權限檢查, 結合應用標識appid和用戶自己的權限做出判斷.

圖5 接口網關安全檢查流程圖
網關安全檢查可有效避免用戶的惡意攻擊, 使得用戶的請求在網關層就被阻斷, 有效提高了SCE轉發服務的健壯性.
流量監控與管理是網關系統的常用功能, 可根據運維需求對通過的請求流量做分流或熔斷等處理. 流量監控包括對最大連接數、HTTP連接以及每秒請求數的限制.
根據以往接口運行經驗, 設置一定的流量控制策略實現請求的最大化滿足, 以盡快的速度對用戶請求做出響應.
1) 用戶流量限制
對用戶單位時間內的調用次數設定最大訪問值.避免用戶頻繁調用接口, 設置用戶每小時訪問接口的最大值, 每訪問一次接口, 訪問次數累計, 達到最大之后直接拒絕用戶的請求.
2) 接口流量限制
對于作業提交接口, 為避免用戶批量提交作業, 同一時間限制用戶提交作業數目; 對于需要與核心服務SCE交互才能獲取數據的接口, 受SSH最大連接數的限制, 對接口設定最大訪問次數.
3) 應用流量限制
對調用接口的應用(應用社區、業務平臺)設置一個總的最大訪問次數, 避免應用被攻擊后持續訪問接口, 造成接口服務無法正常服務.
4) 其他措施
對于統計類的接口, 借助緩存等服務來存儲數據,避免接口一直與后臺服務交互; SCE轉發服務采用微服務的方式部署, 避免相互之間的影響, 對訪問可做到分流限制.
1) 接口設計原則
為了盡量保持與現有的高性能計算環境應用接口設計一致, 訪問參數跟原有接口一樣, 每個接口都攜帶應用標識字段; 請求消息頭增加兩個字段: 環境認證與授權系統簽發的access_token, 用戶來源字段: usersource. 通過這兩個字段可有效判斷用戶的登錄信息并獲取用戶身份信息.
2) 合法性以及權限檢測
通過過濾器實現合法性以及權限檢測等功能, 任何發送到網關的請求都要經過過濾器中定義的各種檢測規則方可轉發至SCE轉發服務. 如時間戳檢查未通過時提示用戶“時間戳錯誤”; 簽名驗證未通過時提示“簽名錯誤”; 權限檢測未通過時提示“API授權錯誤”;跨域訪問判斷未通過時提示“訪問被拒絕”. 設置清晰的錯誤提示方便用戶快速定位錯誤源頭, 盡快修復問題.
3) 接口轉發模塊
為方便網關層快速增加修改接口, 所有后臺接口通過配置文件來管理. 后臺接口地址需要存儲在配置文件中, 網關收到請求信息并經過安全診斷后按照配置中的路徑進行轉發.
當接口服務新增一個接口時, 只需在配置文件中國增加一條轉發配置, 網關會自動感知配置文件的變化, 方便接口的快速發布.
SCE轉發服務真正服務于用戶請求提供返回數據. 在實現上為了與核心軟件SCE交互, 需要每一個API接口都包括用戶名和應用標識兩個字段. 下面就訪問高性能計算環境資源相關的作業管理服務、文件傳輸服務和資源管理服務展開論述.
3.2.1 作業管理服務
作業管理服務主要提供用戶查詢、修改作業狀態、提交作業. 表1是作業管理服務包含的接口, 用戶可提交作業并根據自己的需求查詢以及修改作業狀態.

表1 作業管理服務接口
3.2.2 文件傳輸服務
文件傳輸服務主要用于上傳、下載作業的文件信息, 也包括查看作業文件目錄信息、作業文件內容. 接口同時提供了可直接調用無需落地傳輸的數據中轉傳輸服務mcp[10]進行文件的上傳和下載.
表2是文件傳輸服務所包含的接口, 目前用戶比較常用的就是通過mcp服務實現的文件查看和上傳.調用此接口時可不必指定查看文件的位置, 服務器會首先查看集群服務器是否存在文件, 沒有的話再去網格服務器查看文件. 用戶通過調用一次接口即可獲取到自己的作業文件內容, 增強了用戶的體驗度.

表2 文件傳輸服務接口
3.2.3 資源管理服務
資源管理服務主要用于查詢環境中所有的集群和應用信息. 表3是資源管理服務的所有接口, 用戶在提交作業之前需要先查看可提交此應用的集群信息, 然后選擇可用的集群提交作業.

表3 資源管理服務接口
高性能計算環境通用計算平臺作為調用接口的第三方應用程序, 同時由我們自己研發實現. 下面以高性能計算環境通用計算平臺(簡稱Portal服務)為例來說明新版接口的工作流程.
圖6是接口的具體部署圖, 其中, 環境認證與授權服務、Portal服務、接口網關服務和SCE轉發服務都是以Docker容器的方式部署, 方便后期維護時服務之間不會相互影響. 接口網關收到請求后通過相關預處理轉發至SCE轉發服務中內部訪問接口.

圖6 接口部署圖
表4介紹了接口部署時涉及到的各個服務以及對應的數據庫的功能.

表4 服務系統功能及對應數據庫
1) 環境認證與授權服務
通過設置環境認證與授權服務對應的數據庫可為接入到認證與授權服務端的應用和接口網關提供用戶信息, 驗證訪問令牌access_token的有效性.
2) Portal服務
通過Portal服務數據庫存儲用戶的操作記錄顯示用戶首頁的常用列表、存儲用戶的登錄信息可方便用戶在登錄有效期內直接利用接口獲取數據.
3) 接口網關服務
接口網關服務通過數據存儲的數據可用于判斷用戶的權限、訪問接口時攜帶的access_token信息有效性等, 避免一直與認證與授權服務交互換取用戶登錄信息.
4) SCE轉發服務
SCE轉發服務數據庫主要存儲用戶的作業信息、用戶信息、環境中的資源信息. 通過此數據庫才能實現獲取用戶在環境中的作業數據.
通過用例Portal服務介紹接入環境認證與授權服務以及調用接口的流程.
4.2.1 接入環境認證與授權服務
按照認證與授權服務頒發文檔中的流程接入環境認證與授權服務系統, 主要進行如下操作:
1) 申請接入賬號
主要包括申請應用唯一標識、授權類型、授權范圍、回調地址.
2) 網站接入開發
構造登錄認證請求、用戶完成認證授權后瀏覽器跳轉到回調地址, 后臺獲取code碼然后換取訪問令牌和身份令牌. 具體實現流程如前面圖3所示, 這里不再重復介紹.
3) 部署上線
Portal服務接入環境認證與授權服務后, 點擊登錄可跳轉到認證與授權服務提供的登錄頁面, 如圖7所示, 用戶輸入登錄信息, 驗證通過后Portal后端通過獲取到的code換取訪問令牌和身份令牌, 之后Portal端通過調用接口即可獲取相應的數據. 發送給網關的訪問請求需要攜帶訪問令牌和用戶來源以便網關服務可以判斷用戶的有效性.

圖7 環境認證與授權服務登錄頁面
4.2.2 接口工作流程
用戶從發送請求到獲取到接口返回的數據需要經過以下5個步驟, 圖8為作業接口示例.

圖8 作業接口示例
1) Portal發送請求
Portal按照對外公布的接口使用方法, 拼接請求所需參數, 對參數進行加密處理, 加上當前時間戳信息,消息頭添加認證與授權服務頒發的access_token, 給網關發送HTTP請求.
2) 網關進行身份認證檢測
網關按照第2.1節身份認證檢測流程檢測此次請求用戶的身份, 若未通過檢測提示用戶請先登錄然后訪問.
3) 網關合法性及權限檢測
網關對此請求的參數以及權限進行檢測, 保證接口的安全性.
4) 網關轉發接口
網關把用戶的請求信息轉發至SCE轉發服務.
5) 接口返回數據
接口返回數據給網關, 網關對數據處理后轉發給用戶.
接口部署完成后, 我們對接口的正確性、響應時間等進行了測試.
1) 正確性測試
先后調用新版接口與原有接口返回數據對比, 檢測結果是否正確; 不用用戶同時登錄下調用接口檢測是否出現數據混亂等錯誤現象.
2) 響應時間
圖9為Portal調用查詢應用、查詢作業、提交作業、上傳文件、查看文件、下載文件等常用接口的平均響應時間, 橫坐標為不同的接口、縱坐標為響應時間 (s). 由圖9可以看出接口基本上在0.2 s內可返回結果, 提交作業模塊受作業參數、加載作業文件的影響響應時間略長, 大約在0.5 s左右.

圖9 常用接口響應時間
本文介紹了高性能計算服務環境應用編程接口的總體結構圖、關鍵技術以及如何設計實現和部署, 并通過用例高性能計算環境通用計算平臺Portal說明了如何調用接口訪問國家高性能計算環境. 重點突出了接口網關在用戶身份認證檢測、對接口的訪問控制、安全性方面的加固以及流量控制方面的重要性.
應用社區和業務平臺無須再新申請網格賬號, 只需接入環境認證與授權服務即可通過新版接口訪問高性能計算環境資源, 大大提高了用戶的使用便捷性. 其他應用也可以通過接入環境認證與認證服務系統訪問國家高性能計算環境, 環境網格賬號與應用社區、業務平臺賬號真正實現了互聯互通并相互訪問資源.
目前接口部署在測試環境中, 后續會進一步對接口進行測試優化, 并盡快部署到正式環境中推廣給各大社區和業務平臺使用.