一種基於本地緩存的api網關鑑權系統及方法與流程
2024-04-12 10:20:05
1.本發明屬於api網關鑑權技術領域,具體涉及一種基於本地緩存的api網關鑑權系統及方法。
背景技術:
2.目前服務端多採用微服務架構來支持海量的請求,而api網關為微服務架構的入口,需要對請求者的身份進行認證和鑑權以保證服務端的安全。目前的網關設計方案僅能實現簡單的路由負載或者結合redis和權限管理微服務實現對請求的鑑權;所述redis為內存高速緩存數據的存儲系統。現有的網關鑑權系統一次請求往往要經過多次網絡轉發才能實現鑑權,且需要主動維護緩存和資料庫的數據一致性,導致效率低,性能低。
技術實現要素:
3.本發明提供了一種基於本地緩存的api網關鑑權系統及方法,旨在解決現有技術中網關鑑權系統一次請求往往要經過多次網絡轉發才能實現鑑權,導致效率低的問題。
4.為了解決上述技術問題,本發明所採用的技術方案為:
5.第一方面,本發明提供了一種基於本地緩存的api網關鑑權系統,包括:請求端、api網關、服務端和資料庫;所述api網關包括一級緩存和二級緩存;所述服務端包括其它微服務模塊和權限管理模塊;
6.所述請求端用於向所述一級緩存發送請求;所述請求包括業務請求和權限變更請求;
7.所述一級緩存用於接收所述請求端發送的請求並進行鑑權;所述二級緩存用於加載所述資料庫的全量數據、接收所述資料庫變更後的數據和接收所述一級緩存鑑權未通過的請求並進行鑑權且將鑑權通過的結果存入所述一級緩存中;
8.所述其它微服務模塊用於執行所述一級緩存或所述二級緩存鑑權通過的業務請求;所述權限管理模塊用於執行所述一級緩存或所述二級緩存鑑權通過的權限變更請求,並對所述資料庫的鑑權數據進行變更操作;
9.資料庫,儲存鑑權數據,以及在鑑權數據變更後向所述二級緩存中推送變更後的鑑權數據。
10.進一步的方案:所述二級緩存加載的所述資料庫的全量數據設有過期時間;當所述二級緩存加載的所述資料庫的全量數據過期後,所述二級緩存重新加載所述資料庫的全量數據並重新設置過期時間。
11.基於上述方案,所述二級緩存加載的所述資料庫的全量數據設有過期時間,使得所述二級緩存加載的所述資料庫的全量數據過期後需要重新加載資料庫的全量數據,從而使得所述二級緩存定時同步所述資料庫的全量數據,提高了所述二級緩存中緩存數據的準確性。
12.進一步的方案:所述一級緩存採用caffeine緩存框架,並設有淘汰策略,當所述一
級緩存緩存的數據佔用的內存達到最大限度時,所述一級緩存對緩存的數據進行淘汰;所述一級緩存中數據儲存在所述api網關的本地內存中;所述二級緩存採用嵌入式內存資料庫h2;所述二級緩存中數據儲存在所述api網關的本地內存中。
13.基於上述方案,所述一級緩存緩存的數據和所述二級緩存緩存的數據均在所述api網關的本地內存中,使得所述一級緩存和所述二級緩存對請求進行鑑權的過程是在所述api網關的本地內存中完成的,不需要進行網絡轉發,提高了鑑權過程的效率。
14.進一步的方案:所述二級緩存訂閱所述資料庫的binlog消息;所述權限管理模塊對所述資料庫的鑑權數據進行變更操作時,所述資料庫通過所述binlog消息將變更的鑑權數據實時同步到所述二級緩存中。
15.基於上述方案,由於所述二級緩存訂閱了所述資料庫的binlog消息,使得所述二級緩存在同步所述資料庫變更的鑑權數據的過程中只有0.1s以下的延遲,從而使得所述二級緩存中數據實時性較高。
16.進一步的方案:所述二級緩存在同步所述資料庫變更的鑑權數據的過程中採用讀寫鎖進行控制。
17.基於上述方案,所述二級緩存在同步所述資料庫變更的鑑權數據的過程中採用了讀寫鎖進行控制,防止所述二級緩存在同步時讀取到不完整的數據或錯誤的數據。
18.進一步的方案:所述請求端發送的業務請求包括功能權限請求和數據權限請求。
19.進一步的方案:所述api網關根據用戶的角色信息和請求的接口信息通過所述二級緩存進行對所述功能權限請求和所述數據權限請求進行鑑權,並將鑑權結果存入所述一級緩存中。
20.基於上述方案,所述二級緩存將鑑權結果存入所述一級緩存中,使得下次對同一個用戶請求的鑑權直接在所述一級緩存中進行,提高了鑑權過程的效率。
21.第二方面,本發明提供了一種基於本地緩存的api網關鑑權方法,包括以下步驟:
22.api網關接收用戶的請求;所述api網關包括一級緩存和二級緩存;所述用戶的請求包括業務請求和權限變更請求;
23.所述一級緩存對所述用戶的請求進行鑑權;當鑑權通過時,所述一級緩存將所述用戶的請求轉發到服務端;當鑑權未通過時,所述一級緩存將所述用戶的請求轉發到所述二級緩存中;所述服務端包括其它微服務模塊和權限管理模塊;
24.所述二級緩存對所述一級緩存鑑權未通過的用戶的請求進行鑑權;當鑑權通過時,所述二級緩存將所述用戶的請求轉發到服務端,並將鑑權結果存入所述一級緩存中;當鑑權未通過時,所述二級緩存將鑑權失敗信息反饋給用戶;所述二級緩存加載有資料庫的全量數據,並訂閱所述資料庫的binlog消息;
25.當所述一級緩存或所述二級緩存鑑權通過的用戶的請求為業務請求時,所述其它微服務模塊執行業務操作;當所述一級緩存或所述二級緩存鑑權通過的用戶的請求為權限變更請求時,所述權限管理模塊執行對所述資料庫中的鑑權數據進行變更的操作,所述二級緩存對所述資料庫的變更鑑權數據通過所述binlog消息進行同步更新。
26.第三方面,本發明提供了一種電子設備,包括:
27.至少一個存儲器,用於存儲api網關鑑權程序;
28.至少一個處理器,用於執行所述存儲器存儲的所述api網關鑑權程序;
29.其中,當所述存儲器存儲的所述api網關鑑權程序被執行時,所述處理器用於執行上述第二方面所述一種基於本地緩存的api網關鑑權方法。
30.第四方面,本發明提供了一種計算機可讀存儲介質;所述計算機可讀存儲介質存儲有計算機指令,所述計算機指令使所述計算機實現上述第二方面所述一種基於本地緩存的api網關鑑權方法。
31.本發明的有益效果為:
32.在本發明中,所述一級緩存和所述二級緩存兩者緩存的數據均在所述api網關的本地內存中,且所述二級緩存加載有所述資料庫的全量數據並接收所述資料庫變更後的數據,使得二級緩存中緩存的數據在任何時候均與資料庫中的數據保持一致,所述一級緩存或所述二級緩對請求進行鑑權是在api網關的本地內存中進行的,不涉及鑑權數據的網絡轉發,提高了api網關鑑權系統的效率和性能。
33.api網關對用戶的請求鑑權時,先由一級緩存進行鑑權,對於鑑權未通過的請求由二級緩存進行鑑權,並將鑑權通過的鑑權結果存入一級緩存中。由於所述一級緩存中存有所述二級緩存的鑑權結果,使得對同一用戶的多次請求的鑑權在所述一級緩存中就能完成,減少了對同一用戶的多次請求的重複計算,提高了api網關鑑權的效率。
附圖說明
34.為了更清楚地說明本發明實施例的技術方案,下面將對實施例中所需要使用的附圖作簡要介紹,應當理解,以下附圖僅示出了本發明的某些實施例,因此不應被看作是對範圍的限定,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他相關附圖。
35.圖1是本發明一種基於本地緩存的api網關鑑權系統及方法中api網關鑑權系統關係示意圖;
36.圖2是本發明一種基於本地緩存的api網關鑑權系統及方法中api網關鑑權系統結構示意圖;
37.圖3是本發明一種基於本地緩存的api網關鑑權系統及方法中角色、用戶和權限的關係示意圖;
38.圖4是本發明一種基於本地緩存的api網關鑑權系統及方法中api網關鑑權方法流程圖。
具體實施方式
39.下面將結合本發明實施例中附圖,對本發明實施例中的技術方案進行清楚完整的描述。應當理解,此處所描述的具體實施例僅僅用於解釋本發明,並不用於限定本發明。基於本發明的實施例,本領域技術人員在沒有創造性勞動的前提下所獲得的所有其他實施例,都屬於本發明的保護範圍。
40.實施例一:
41.如圖1所示,本實施例提供了一種基於本地緩存的api網關鑑權系統,包括:請求端、api網關、服務端和資料庫;所述api網關包括一級緩存和二級緩存;所述服務端包括其它微服務模塊和權限管理模塊;
42.所述請求端用於向所述一級緩存發送請求;所述請求包括業務請求和權限變更請求;
43.所述一級緩存用於接收所述請求端發送的請求並進行鑑權;所述二級緩存用於加載所述資料庫的全量數據、接收所述資料庫變更後的數據和接收所述一級緩存鑑權未通過的請求並進行鑑權且將鑑權通過的結果存入所述一級緩存中;
44.所述其它微服務模塊用於執行所述一級緩存或所述二級緩存鑑權通過的業務請求;所述權限管理模塊用於執行所述一級緩存或所述二級緩存鑑權通過的權限變更請求,並對所述資料庫的鑑權數據進行變更操作;
45.資料庫,儲存鑑權數據,以及在鑑權數據變更後向所述二級緩存中推送變更後的鑑權數據。
46.具體的,所述api網關(api gateway)為能夠實現高性能http(超文本傳輸協議)的轉發、多租戶管理、api訪問權限控制等目的的微服務網關;所述api網關是微服務架構的入口。
47.如圖2所示,所述api網關分為流量網關和業務網關兩層;
48.所述流量網關採用lvs(linux virtual server,linux虛擬伺服器)實現;所述lvs是一種負載均衡技術,使得osi(開放系統互連)參考模型中傳輸層或應用層的負載均衡;例如:如圖2所示,所述流量網關均衡外部app、web、camera或其他平臺的數據源。
49.所述業務網關內緩存劃分為兩級,分別為一級緩存和二級緩存。
50.其中,作為一種改進型方案具體為:
51.所述二級緩存加載的所述資料庫的全量數據設有過期時間;當所述二級緩存加載的所述資料庫的全量數據過期後,所述二級緩存重新加載所述資料庫的全量數據並重新設置過期時間。
52.所述一級緩存採用caffeine緩存框架,並設有淘汰策略,當所述一級緩存緩存的數據佔用的內存達到最大限度時,所述一級緩存對緩存的數據進行淘汰;
53.具體的,因為所述一級緩存的內存有限,所以所述一級緩存中設有淘汰策略,所述淘汰策略可以通過lru(least recently used,緩存淘汰算法)實現,淘汰長時間未被訪問的數據,保留最近被頻繁訪問的數據。使得所述一級緩存不會出現內存不足的情況。
54.所述一級緩存中數據儲存在所述api網關的本地內存中;所述二級緩存採用嵌入式內存資料庫h2;所述二級緩存中數據儲存在所述api網關的本地內存中。
55.具體的,所述嵌入式內存資料庫h2為採用java語言編寫的嵌入式(內存級別)資料庫,可以直接嵌入到所述二級緩存中。
56.所述二級緩存訂閱所述資料庫的binlog消息;所述權限管理模塊對所述資料庫的鑑權數據進行變更操作時,所述資料庫通過所述binlog消息將變更的鑑權數據實時同步到所述二級緩存中。
57.具體的,所述binlog為二進位格式的文件,用於記錄所述資料庫鑑權數據的變更;所述資料庫在鑑權數據變更時,將變更記錄到binlog中,由於二級緩存訂閱所述資料庫的binlog消息,所以,所述二級緩存會讀取binlog中記錄的變更的鑑權數據,並將變更的鑑權數據緩到內存資料庫h2中。
58.所述二級緩存每次讀取並緩存binlog中記錄的變更的鑑權數據時,所述二級緩存
會將上一次緩存在內存資料庫h2中的變更的鑑權數據刪除,以實現所述二級緩存和所述資料庫二者數據的一致性。
59.所述二級緩存在同步所述資料庫變更的鑑權數據的過程中採用讀寫鎖進行控制。
60.所述請求端發送的業務請求包括功能權限請求和數據權限請求。
61.具體的,所述功能權限為限定用戶可以請求的接口、頁面或按鈕等。所述數據權限為在用戶可以訪問的接口中,不同級別的用戶看到的數據範圍或數據內容不同;例如:針對同一個銷售報表頁面,省級管理員可以看到全省的銷售數據,地市管理員僅能看到本地市的銷售數據。
62.如圖3所示,所述api網關根據用戶的角色信息和請求的接口信息通過所述二級緩存進行對所述功能權限請求和所述數據權限請求進行鑑權,並將鑑權結果存入所述一級緩存中。
63.具體的,針對不同的接口請求和用戶,所述二級緩存的嵌入式內存資料庫h2中緩存有權限鑑權所需的所有數據,可以實時高速的計算出用戶的數據權限。
64.實施例二:
65.如圖4所示,本實施例提供了一種基於本地緩存的api網關鑑權方法,包括以下步驟:
66.s100、api網關接收用戶的請求;
67.其中,所述api網關包括一級緩存和二級緩存;所述用戶的請求包括業務請求和權限變更請求;
68.s200、所述一級緩存對所述用戶的請求進行鑑權;
69.當鑑權通過時,所述一級緩存將所述用戶的請求轉發到服務端;
70.當鑑權未通過時,所述一級緩存將所述用戶的請求轉發到所述二級緩存中;
71.其中,所述服務端包括其它微服務模塊和權限管理模塊;
72.s300、所述二級緩存對所述一級緩存鑑權未通過的用戶的請求進行鑑權;
73.當鑑權通過時,所述二級緩存將所述用戶的請求轉發到服務端,並將鑑權結果存入所述一級緩存中;
74.當鑑權未通過時,所述二級緩存將鑑權失敗信息反饋給用戶;
75.其中,所述二級緩存加載有資料庫的全量數據,並訂閱有所述資料庫的binlog消息;
76.s400、當所述一級緩存或所述二級緩存鑑權通過的用戶的請求為業務請求時,所述其它微服務模塊執行業務操作;
77.當所述一級緩存或所述二級緩存鑑權通過的用戶的請求為權限變更請求時,所述權限管理模塊執行對所述資料庫中的鑑權數據進行變更的操作。
78.其中,所述二級緩存對所述資料庫的變更鑑權數據通過所述binlog消息進行同步更新。
79.實施例三:
80.本實施例提供了一種電子設備,包括:
81.至少一個存儲器,用於存儲api網關鑑權程序;
82.至少一個處理器,用於執行所述存儲器存儲的所述api網關鑑權程序;
83.其中,當所述存儲器存儲的所述api網關鑑權程序被執行時,所述處理器用於執行上述實施例二中所述一種基於本地緩存的api網關鑑權方法。
84.具體的,所述處理器可以為中央處理單元(cen tra lprocessing unit,cpu),還可以是其他通用處理器、數位訊號處理器(digital signalprocessor,dsp)、專用集成電路(application specific integrated circuit,asic)、現場可編程門陣列(field programmable gate array,fpga)或者其他可編程邏輯器件、電晶體邏輯器件、硬體部件或者其任意組合。
85.實施例四:
86.本實施例提供了一種計算機可讀存儲介質;所述計算機可讀存儲介質存儲有計算機指令,所述計算機指令使所述計算機實現上述實施例二中所述一種基於本地緩存的api網關鑑權方法。
87.具體的,在計算機上執行所述計算機指令時,全部或部分地產生按照上述實施例二中所述一種基於本地緩存的api網關鑑權方法步驟。所述計算機可以是通用計算機、專用計算機、計算機網絡、或者其他可編程裝置。所述計算機指令可以存儲在計算機可讀存儲介質中,或者通過所述計算機可讀存儲介質進行傳輸。所述計算機指令可以從一個網站站點、計算機、伺服器或數據中心通過有線(例如:同軸電纜、光纖、數字用戶線)或無線(例如:紅外、無線或微波等)方式向另一個網站站點、計算機、伺服器或數據中心進行傳輸。所述計算機可讀存儲介質可以是計算機能夠存取的任何可用介質或者是包含一個或多個可用介質集成的伺服器、數據中心等數據存儲設備。所述可用介質可以是磁性介質(例如:軟盤、硬碟、磁帶)、光介質(例如:dvd)、或者半導體介質(例如:固態硬碟)等。
88.本發明不局限於上述可選實施方式,任何人在本發明的啟示下都可得出其他各種形式的產品,但不論在其形狀或結構上作任何變化,凡是落入本發明權利要求界定範圍內的技術方案,均落在本發明的保護範圍之內。