<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    高頻增量告警查詢中的輕量級區間LRU緩存方案

    VSole2021-12-30 14:44:38

    一、需求背景:高性能告警查詢

    在告警監控場景中,值守人員經常需要按時間段查詢告警列表或其它相關信息。尤其在需要進行實時分析的自動化告警評估和推薦業務中,由于需要對時間段內全部告警進行評估,如果每次都要從數據庫中加載完整數據,會產生很高的I/O負載,響應速度也不盡如人意。

    安全事件應急響應分秒必爭,系統能否及時處理用戶的高頻查詢請求,不僅影響用戶操作體驗,更是決定應急處置速度的關鍵因素,不容疏失。

    二、現有技術瓶頸

    既然問題出在高頻查詢的I/O性能上,我們可能需要某種數據緩存機制來應對它。

    但經初步調研,現有的常規緩存算法大多針對Key-Value鍵值對型結構,但在安全運營場景中的告警查詢通常是以時間段為條件的,難以直接應用。

    講到這里,可能有的讀者會問,如果只是為了解決時間段查詢需求與鍵值緩存算法不匹配的問題,可以簡單地將告警數據按一定時間周期進行切片并緩存,然后在每次查詢時對查詢目標范圍所涉及的所有切片進行查詢,再去掉兩端可能多余的部分即可。

    但這樣一來,就會面臨一個兩難問題:

    1、如果選擇較大的切片長度,那么當實際查詢片段較小或較為分散時,就會浪費很多資源。例如切片長度為1小時,若要查詢某5分鐘內的告警而未命中緩存,就不得不為此加載1小時的數據(甚至2小時,如果查詢目標時間段剛好跨過分片邊界的話),這極有可能導致添加緩存機制后的整體性能不升反降;

    圖1:長分片鍵值緩存響應區間查詢

    2、如果選擇較小的切片長度,那么當實際查詢片段較長時,就需要多次查詢索引并加載緩存。例如切片長度為1分鐘,若要查詢某一天內的告警而未命中緩存,就需要執行多達1440次索引查詢和加載。尤其對于使用哈希索引的緩存來說,這同樣會導致查詢性能低下。

    圖2:短分片鍵值緩存響應區間查詢

    此外,由于在很多實際場景中,現場未必能夠提前部署高性能設備,導致告警評估系統經常需要安裝在現場人員的筆記本電腦上,這就要求系統需要盡可能降低部署成本,避免依賴過于大型的外部組件。

    綜上,針對鍵值對結構的緩存系統確實不適合安全防守中需要高性能響應區間查詢的場合。

    三、實現思路

    其實從上面的案例可以看到,緩存機制本身并沒有問題,普通的基于鏈表的LRU緩存方案等都是可以的,只是常規緩存的索引結構(哈希表或二叉樹等)不適配區間查詢的場景。

    那么重點就在于如何構建適合區間查詢的索引了。一般想來,最適合這個場景的應該是區間樹了,但初步實驗中又遇到了問題:

    由于告警查詢最常見的場景就是“不斷查詢最新一定時間的告警”,導致區間樹總是沿右子樹方向生長,深度急劇增加。下圖為模擬從1:00起每10分鐘一次查詢最近1小時告警的情況,可見區間樹很快就變成了一個效率低下的形狀:

    圖3:其中橙色節點是包含實際數據的葉節點

    但是,區間樹不同于常規二叉樹,只有葉節點包含數據,實現旋轉操作時需要修改枝節點的區間邊界(而非簡單交換節點父子關系),與常規的平衡二叉樹略有不同:

    圖4:平衡區間樹的旋轉過程

    至此,區間緩存結構最關鍵的部分就已經實現完畢了。關于LRU緩存算法的其余部分,以及數據合并切分的具體實現,由于與現有常規方法沒有什么區別,本文不再贅述。

    四、效果測試

    我們接下來嘗試查詢1個小時的告警,可見此時緩存為空,實際耗時與沒有緩存機制時基本相同,包含評估過程共耗時約36秒,其中數據加載消耗約28秒:

    圖5:初次查詢的時間開銷

    然后再次提交完全相同的查詢,可見總耗時迅速縮短到了約7秒,其中數據加載耗時基本可以忽略:

    圖6:再次查詢的時間開銷

    但普通緩存結構顯然也能做到這一點。接下來我們將查詢時間段向后移動10分鐘,可見實際需要加載的數據只有多出來的10分鐘部分,數據加載僅耗時8秒:

    圖7:增量查詢的時間開銷

    可見緩存結構確實能夠極大提高告警數據區間查詢的時間效率。

    五、后記

    系統性能優化的道路仍然漫長,點滴積累,貴在堅持。

    更多前沿資訊,還請繼續關注綠盟科技研究通訊。

    如果您發現文中描述有不當之處,還請留言指出。在此致以真誠的感謝~

    緩存鍵值
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    在告警監控場景中,值守人員經常需要按時間段查詢告警列表或其它相關信息。尤其在需要進行實時分析的自動化告警評估和推薦業務中,由于需要對時間段內全部告警進行評估,如果每次都要從數據庫中加載完整數據,會產生很高的I/O負載,響應速度也不盡如人意。
    NoSQL,泛指非關系型的數據庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同于傳統的關系型數據庫的數據庫管理系統的統稱。NoSQL用于超大規模數據的存儲。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多余操作就可以橫向擴展。 分類
    今天的漏洞故事來自國外一位名叫Vedant的白帽子
    Redis系列漏洞總結
    2023-06-19 10:29:18
    前言Redis的未授權漏洞一直都是一個很火的漏洞,最近看許多前輩的文章自己復現后,根據自己的實踐再次總結一下,為日后復習方便回顧。Redis簡介redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string、list、set、zset和hash。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。
    由 LSASS 進程加載的 wdigest.dll 模塊有兩個有趣的全局變量
    對于高級攻擊者來說,研究人員觀察到活躍的攻擊者以各種方式獲取 cookie。有時,隨著特定活動的啟動,這些檢測結果會急劇上升。此外,一些使用 cookie 的合法應用程序可能會泄露它們,從而將令牌暴露給攻擊者。其中一個鍵值對指定cookie的過期時間,即cookie在必須更新之前的有效時間。
    可以通過注冊表或直接用戶管理刪除隱藏的用戶。0x2 Shift 后門將 C:\WINDOWS\system32\dllcache\sethc.exe 刪除,這個文件夾中放著緩存,如果不刪除就會自動變回去。按下 5下 shift 即可彈出管理權限的 DOS 窗口。0x3 放大鏡后門創建 magnify.bat@echo off. 下的 magnify.exe登陸時通過組合鍵 Win+U 調用。DLL劫持利用搜索順序來加載惡意DLL以代替合法DLL。如果應用程序使用Windows的DLL搜索來查找DLL,且攻擊者可以將同名DLL的順序置于比合法DLL更高的位置,則應用程序將加載惡意DLL。劫持系統程序具有兼容性,劫持用戶程序則有針對性。
    后滲透之權限維持的13種方法-Windows
    主動模式監控項,顧名思義,就是Zabbix agent會主動上報監控數據給Zabbix server。而被動模式監控項就是指Zabbix server根據監控項的更新間隔向Zabbix agent拉取監控數據。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类