国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

數(shù)據(jù)模式感知的低成本云日志存儲系統(tǒng)

2023-11-24 05:24魏鈞宇張廣艷陳軍超
計(jì)算機(jī)研究與發(fā)展 2023年11期
關(guān)鍵詞:存儲單元細(xì)粒度壓縮率

魏鈞宇 張廣艷 陳軍超

(清華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系 北京 100084)

(wei-jy19@mails.tsinghua.edu.cn)

隨著信息技術(shù)的發(fā)展,計(jì)算系統(tǒng)日趨復(fù)雜,大型系統(tǒng)的維護(hù)和檢查越來越離不開系統(tǒng)產(chǎn)生的監(jiān)控日志.這些日志數(shù)據(jù)廣泛存在于各類系統(tǒng)平臺上,并為故障診斷[1-4]、異常檢測[5-9]、用戶畫像[10-11]、系統(tǒng)建模[12-13]和安全檢查[14-15]等多種服務(wù)提供支撐.同時(shí)為了確保歸檔審計(jì)信息的完整與可溯源性,最新出臺的《網(wǎng)絡(luò)安全法》也明確規(guī)定“采取監(jiān)測、記錄網(wǎng)絡(luò)運(yùn)行狀態(tài)、網(wǎng)絡(luò)安全事件的技術(shù)措施,并按照規(guī)定留存相關(guān)的網(wǎng)絡(luò)日志不少于六個(gè)月”[16],這又對日志數(shù)據(jù)提出了長期歸檔存儲的要求.

在現(xiàn)代數(shù)據(jù)中心中,系統(tǒng)日志有成千上萬個(gè)數(shù)據(jù)產(chǎn)生源,數(shù)據(jù)規(guī)模單日可達(dá)上百億條(PB 量級)[17],該類數(shù)據(jù)已經(jīng)儼然成為一類新興大數(shù)據(jù).為降低數(shù)據(jù)存儲成本,有必要對于該類數(shù)據(jù)進(jìn)行快速、高密壓縮.另一方面,在使用這類日志時(shí),過長的檢索延遲將會降低查錯(cuò)和系統(tǒng)運(yùn)維的效率,進(jìn)而造成不必要的損失[18],因此在高密壓縮的同時(shí)還需保證能夠快速檢索以獲得需要的信息.日志存儲的總成本包括數(shù)據(jù)存儲的空間成本、數(shù)據(jù)壓縮的時(shí)間成本和數(shù)據(jù)檢索的時(shí)間成本,而低成本日志存儲系統(tǒng)的設(shè)計(jì)目標(biāo)就是要盡可能降低這3 部分成本.

本文結(jié)合公共云中日志數(shù)據(jù)的真實(shí)存儲需求,給出了一種云日志數(shù)據(jù)的低成本存儲范式——數(shù)據(jù)模式感知的低成本云日志存儲.首先,總結(jié)了云日志中的典型數(shù)據(jù)模式,即靜態(tài)數(shù)據(jù)模式和動態(tài)數(shù)據(jù)模式;然后,給出了基于數(shù)據(jù)模式感知構(gòu)建低成本云日志存儲系統(tǒng)的方法;最后,針對國內(nèi)外若干低成本云日志存儲方法在壓縮率、壓縮速度和檢索延遲等方面進(jìn)行了對比測試.

此外,結(jié)合我們在低成本云日志存儲系統(tǒng)領(lǐng)域的研究提出了幾點(diǎn)經(jīng)驗(yàn)與思考,希望為未來大規(guī)模數(shù)據(jù)存儲的相關(guān)研究提供參考和幫助.

我們研制的數(shù)據(jù)模式感知的低成本云日志存儲系統(tǒng)已經(jīng)應(yīng)用到某國際著名云廠商的實(shí)際生產(chǎn)系統(tǒng)中,降低了2/3 的云日志存儲成本,提升了云服務(wù)的服務(wù)質(zhì)量.

1 云日志的數(shù)據(jù)特點(diǎn)和存儲需求

系統(tǒng)日志原本是程序員在編寫程序時(shí)出于調(diào)試需要而設(shè)計(jì)的一種輸出信息.對于小規(guī)模軟件來說,通常在調(diào)試版本(debug version)中存在小部分的輸出日志,在正式的發(fā)行版本(release version)中基本不存在額外輸出的調(diào)試信息.但隨著軟件規(guī)模的擴(kuò)大,特別是隨著云計(jì)算技術(shù)的發(fā)展,很多在云場景下運(yùn)行的大型軟件也會以一定格式持續(xù)不斷地輸出日志信息[19-20].這些信息實(shí)時(shí)記錄了當(dāng)前系統(tǒng)的運(yùn)行情況以及處理工作的細(xì)節(jié),未來可供調(diào)試、歸檔、審計(jì)、系統(tǒng)建模等多種應(yīng)用使用.

在大型商業(yè)云中,通常有隸屬于基礎(chǔ)事務(wù)部的專業(yè)日志存儲團(tuán)隊(duì),他們將為各類企業(yè)運(yùn)維團(tuán)隊(duì)提供包括日志采集、查詢、分析、歸檔存儲等云原生SLS(system log service)服務(wù).SLS 系統(tǒng)將持續(xù)收集來自整個(gè)系統(tǒng)中不同應(yīng)用的日志信息,將這些信息按照時(shí)間順序?qū)懭氲酵痪彌_區(qū)內(nèi),并對于緩沖區(qū)內(nèi)的日志進(jìn)行分類、壓縮等進(jìn)一步處理.在保證將這些日志歸檔存儲一定時(shí)間的同時(shí),對外提供對于海量云日志的檢索和分析服務(wù).

本節(jié)將結(jié)合云日志分類介紹這類新興大數(shù)據(jù)的具體信息,進(jìn)一步歸納云日志的數(shù)據(jù)特點(diǎn)以及相應(yīng)的存儲需求.

1.1 云日志的分類

對云日志數(shù)據(jù)可以從多個(gè)維度進(jìn)行分類.從日志的級別出發(fā),可以將云日志分成提示(INFO)、警告(WARNING)和錯(cuò)誤(ERROR)等不同嚴(yán)重等級,對于按照時(shí)間順序?qū)懭氲酵黄彌_區(qū)中的日志,在進(jìn)行錯(cuò)誤溯源時(shí),通常可以首先根據(jù)嚴(yán)重等級進(jìn)行日志過濾.

從日志的產(chǎn)生機(jī)理出發(fā),可以將云日志分成系統(tǒng)日志(system log)、訪問日志(access log)、環(huán)境指標(biāo)(environment metric)三類.系統(tǒng)日志通常由系統(tǒng)軟件產(chǎn)生,主要用于提示、告警和報(bào)錯(cuò).例如,分布式文件系統(tǒng)HDFS 會記錄緩沖區(qū)溢出、網(wǎng)絡(luò)異常、塊讀寫錯(cuò)誤等信息.訪問日志主要記錄用戶對系統(tǒng)的訪問,這部分日志主要在用戶做出某些行為時(shí)生成,用于未來出現(xiàn)安全問題時(shí)對可疑操作進(jìn)行溯源或?qū)σ欢螘r(shí)間內(nèi)的用戶行為進(jìn)行建模.例如,在云系統(tǒng)的網(wǎng)絡(luò)代理服務(wù)器中通常會記錄外部服務(wù)器對于某些特定IP地址的訪問.環(huán)境指標(biāo)則由各個(gè)服務(wù)器定期產(chǎn)生,通常會隨集群心跳信息一起發(fā)送到中心協(xié)調(diào)服務(wù)器中.這些信息通常包括了各服務(wù)器的當(dāng)前環(huán)境狀態(tài),例如溫度、CPU 利用率、內(nèi)存占用率等指標(biāo).

從對于日志的訪問頻率出發(fā),可以將日志分成在線日志(online log)、近線日志(nearline log)和離線日志(offline log)三類.具體來說,在線日志是指在產(chǎn)生之后需要進(jìn)行頻繁訪問的日志,例如用于系統(tǒng)建模的日志通常會被輸入到特定的建模軟件中,由建模軟件對其進(jìn)行頻繁且種類繁多的檢索訪問.和在線日志相對的是離線日志,這類日志在產(chǎn)生之后基本不會進(jìn)行訪問,例如用戶訪問日志、環(huán)境監(jiān)控日志等,這些日志產(chǎn)生的初衷即是在出現(xiàn)嚴(yán)重的錯(cuò)誤,或者運(yùn)營商卷入到相關(guān)的案件時(shí)才會被調(diào)用協(xié)助案情偵查.近線日志的訪問頻率介于在線日志和離線日志之間,這類日志主要以系統(tǒng)的各種警告、報(bào)錯(cuò)日志為主,廣泛應(yīng)用于云系統(tǒng)的異常診斷和故障溯源中.很多錯(cuò)誤通常不會立刻影響前端應(yīng)用,卻會被系統(tǒng)以警告或者報(bào)錯(cuò)的形式體現(xiàn)在日志之中,因此在進(jìn)行系統(tǒng)故障診斷時(shí)通常需要訪問這類日志.

根據(jù)某國際著名云廠商單月內(nèi)對于PB 量級云日志數(shù)據(jù)檢索次數(shù)的統(tǒng)計(jì),44%的日志在產(chǎn)生之后單月內(nèi)的訪問次數(shù)為零,屬于離線日志;2%的日志單月內(nèi)的訪問次數(shù)超過100,可以歸類為在線日志;剩下的54%的日志則介于二者之間,對它們存在一定數(shù)量的訪問,但是訪問頻率較低,屬于近線日志.日志數(shù)據(jù)寫入時(shí)通常會根據(jù)未來一段時(shí)間內(nèi)是否進(jìn)行密集訪問分成在線日志和近線日志:對于在線日志,通常保留原始的日志數(shù)據(jù),并通過在數(shù)據(jù)上建立索引的方法加速數(shù)據(jù)訪問性能;對于近線日志和離線日志則進(jìn)行壓縮以降低存儲開銷,未來查錯(cuò)時(shí)可能需要對這些數(shù)據(jù)進(jìn)行低延遲檢索.經(jīng)過一段時(shí)間之后,訪問次數(shù)為零的日志將被視為離線日志,并進(jìn)行高密壓縮以滿足歸檔需求.

1.2 云日志的數(shù)據(jù)特點(diǎn)

通過對某國際著名云廠商的實(shí)際生產(chǎn)日志的觀察,我們歸納得到云日志的若干數(shù)據(jù)特點(diǎn).

特點(diǎn)1:數(shù)據(jù)規(guī)模巨大、留存時(shí)間長.由于云日志通常用于大型軟件或者整個(gè)系統(tǒng)級別的查錯(cuò),因此需要由統(tǒng)一的日志管理部門來協(xié)調(diào)整個(gè)平臺中產(chǎn)生的各類日志,而所有這些日志的規(guī)模單日可以達(dá)到PB 量級.另一方面,《網(wǎng)絡(luò)安全法》規(guī)定這些日志需要留存至少180 天,因此如果直接存儲這些日志數(shù)據(jù)將帶來巨大的存儲開銷.

特點(diǎn)2:有用信息密度低.盡管云日志的規(guī)模龐大,但其中的有用信息密度較低.這一方面是由于日志數(shù)據(jù)存在較多冗余,例如在執(zhí)行類似操作時(shí)輸出的提示信息完全相同、執(zhí)行多次訪問時(shí)留下的記錄也大同小異等.另一方面是由于在審計(jì)和故障溯源的過程中,真正需要的日志條目在所有日志條目中所占的比例極低.例如,在一次云系統(tǒng)的故障溯源過程中,日志庫中可能相關(guān)的日志條目總量超過了70億條,而其中真正對錯(cuò)誤定位有幫助的日志條目僅有391 條.

特點(diǎn)3:訪問延遲敏感.盡管大部分日志數(shù)據(jù)的訪問頻率較低,但單次訪問通常是一個(gè)查錯(cuò)溯源過程中的必要環(huán)節(jié).通過和日志維護(hù)團(tuán)隊(duì)的工程師進(jìn)行交流,工程師通常能接受的單次檢索延遲應(yīng)當(dāng)在秒量級,最多不超過分鐘量級,一旦單次檢索超過半小時(shí),將嚴(yán)重影響工程師的查錯(cuò)效率[18].此外,如果日志檢索顯著拖慢了整個(gè)溯源過程,就有可能因此耽誤對于致命問題的排查,進(jìn)而造成更為嚴(yán)重的影響.

1.3 云日志的存儲需求

由于日志中有用信息密度低、規(guī)模龐大且留存時(shí)間較長,對于近線日志和離線日志,通常需要進(jìn)行壓縮存儲以降低存儲成本.另一方面,對于近線日志和在線日志,由于在檢索時(shí)對于延遲較為敏感,還需要在數(shù)據(jù)調(diào)用時(shí)保證穩(wěn)定的低延遲.

上述2 個(gè)存儲需求造成了日志存儲面臨高壓縮率和低解壓開銷難以兼得的問題.現(xiàn)有的壓縮工具(包括常見的通用壓縮工具[21-24]和一系列日志專用壓縮工具[25-29])通常是在兩者之間折中,例如LZMA和PPMd 選擇犧牲解壓延遲以實(shí)現(xiàn)高壓縮率,gzip 選擇犧牲高壓縮率以實(shí)現(xiàn)低解壓延遲,zstd 則給用戶提供了不同的壓縮等級,允許用戶自行在高壓縮率和低解壓開銷之間折中.日志專用的壓縮方法例如LogArchieve 將日志分桶大小作為一個(gè)可調(diào)的超參數(shù),分桶越大日志壓縮率越高,但解壓開銷越大;反之分桶越小解壓開銷越小,但日志壓縮率也會相應(yīng)下降.

那么,是否有同時(shí)實(shí)現(xiàn)高壓縮率和低檢索延遲的低成本存儲方法呢?事實(shí)上,云日志中所隱含的數(shù)據(jù)模式為我們提供了一種全新的數(shù)據(jù)存儲思路.

2 云日志中的數(shù)據(jù)模式

模式,通常是指一個(gè)變化的數(shù)據(jù)集中相對固定的部分.云日志作為一種半結(jié)構(gòu)化數(shù)據(jù),其中存在大量的冗余信息,這些冗余信息和有用信息混合在一起便構(gòu)成了云日志中的若干數(shù)據(jù)模式.

首先,由于日志數(shù)據(jù)的產(chǎn)生源頭是用戶定義的結(jié)構(gòu)化輸出語句,因此由同一條結(jié)構(gòu)化輸出語句輸出的日志通常會共享結(jié)構(gòu)化語句體.如圖1 所示,由結(jié)構(gòu)化輸出語句“Time taken %ds”輸出的日志都共享“Time taken <*>s”的冗余字段.

Fig.1 The generation process of the static pattern in log data圖1 日志數(shù)據(jù)靜態(tài)模式的產(chǎn)生過程

其次,在程序執(zhí)行過程中,同一條結(jié)構(gòu)化輸出語句通常會連續(xù)輸出多條日志,這些日志除了具有完全相同的結(jié)構(gòu)化語句體之外,它們的變量值之間也因?yàn)槌绦驁?zhí)行的局部性而共享一些相對固定的部分.例如,在“Time taken <*>s”的例子中,連續(xù)的時(shí)間戳之間的數(shù)值差異不大;在HDFS 中塊的編號通常以“blk_”開頭;在記錄IP 地址的日志中,屬于同一個(gè)子網(wǎng)的IP 地址之間通常共享一些相同的字段等等.

本節(jié)將首先介紹云日志的兩類代表性數(shù)據(jù)模式,接下來討論提取云日志數(shù)據(jù)模式的一些有效方法,為進(jìn)一步討論數(shù)據(jù)模式感知的云日志存儲做好準(zhǔn)備.

2.1 云日志中的代表性數(shù)據(jù)模式

已經(jīng)發(fā)現(xiàn)云日志有兩類代表性數(shù)據(jù)模式:靜態(tài)模式和動態(tài)模式.

1)靜態(tài)模式.我們將日志數(shù)據(jù)中因共享程序員定義的結(jié)構(gòu)化輸出語句而形成的模式稱為靜態(tài)模式.這類模式通常可以通過靜態(tài)代碼分析或根據(jù)同一公司內(nèi)的編程規(guī)范加以確定.

我們可以將由同一個(gè)結(jié)構(gòu)化輸出語句所輸出的日志條目視為一個(gè)日志條目組,將同一日志條目組內(nèi)出現(xiàn)在相同位置的變量視為一個(gè)變量組.如果結(jié)構(gòu)化輸出語句中具有x個(gè)變量,就會對應(yīng)x個(gè)變量組.例如在圖1 所示的例子中“Time taken %ds”對應(yīng)的日志條目組中包含4 條日志,變量“%d”對應(yīng)的變量組中包含4 個(gè)變量數(shù)值.

2)動態(tài)模式.除靜態(tài)模式之外,我們將在實(shí)際運(yùn)行中同一個(gè)變量組的變量數(shù)值由于局部性而共享的相對固定的部分稱為動態(tài)模式.對于這類模式,程序員不可能在程序執(zhí)行前就預(yù)先獲知變量的內(nèi)容,同時(shí)這類模式還會隨著程序運(yùn)行的局部性變化而不斷改變,因此這類模式無法僅僅通過靜態(tài)分析程序語句的方法獲得,還必須通過對運(yùn)行過程中動態(tài)產(chǎn)生的日志執(zhí)行進(jìn)一步的模式識別才能得到.

動態(tài)模式能夠有效地將變量分割成更細(xì)粒度的存儲單元.如圖2 所示,左側(cè)的4 條日志屬于2 個(gè)日志條目組,每一個(gè)日志條目組中包含2 個(gè)變量組;在右側(cè),我們通過對這4 個(gè)變量組的進(jìn)一步分析得到每一個(gè)變量組的動態(tài)模式,并可將原有變量組分解成更細(xì)粒度的存儲單元.

Fig.2 Examples for static pattern and runtime pattern in log data圖2 日志數(shù)據(jù)中的靜態(tài)模式和動態(tài)模式舉例

2.2 日志數(shù)據(jù)模式的提取

針對云日志的兩類代表性數(shù)據(jù)模式,人們已經(jīng)找到了行之有效的提取方法.

1)靜態(tài)模式提取方法.靜態(tài)模式提取是指從原始云日志數(shù)據(jù)中獲得對應(yīng)的結(jié)構(gòu)化輸出語句的過程,它是日志分析領(lǐng)域的一個(gè)研究熱點(diǎn).已有提取方法主要包括基于頻繁序列的方法[7,30-33]、基于聚類的方法[34-35]以及其他基于啟發(fā)式的方法,例如基于樹結(jié)構(gòu)[36]、基于日志長度[37]等.相關(guān)研究表明[38],基于解析樹的方法效果最佳,故在這里著重介紹.

基于解析樹的提取方法首先使用一系列預(yù)先規(guī)定的字符(例如逗號、空格等)將日志條目分割成一系列token 組成的串,然后根據(jù)如圖3 所示的解析樹實(shí)現(xiàn)靜態(tài)模式的提取.該解析樹共有2 層,在第1 層中使用日志條目中包含的token 數(shù)量對日志條目進(jìn)行歸類,具有相同token 數(shù)目的日志條目將進(jìn)一步聚類為同一組.同一組中相似度超過閾值的日志條目將被認(rèn)為具有同樣的靜態(tài)模式,這些條目中出現(xiàn)在同一位置的變量將被存入到特定的變量組中.

Fig.3 Parser tree for static pattern圖3 靜態(tài)模式解析樹

在實(shí)際執(zhí)行時(shí),日志解析器將首先采樣一部分日志條目作為訓(xùn)練集,訓(xùn)練生成如圖3 所示的解析樹.在實(shí)際壓縮階段,嘗試將日志條目匹配到某一訓(xùn)練階段時(shí)生成的靜態(tài)模式之中,否則認(rèn)為該條目出現(xiàn)了失配,所有失配的日志條目將單獨(dú)進(jìn)行壓縮.

基于解析樹的靜態(tài)模式匹配策略可以實(shí)現(xiàn)對靜態(tài)模式的黑盒提取,即在無法獲得日志數(shù)據(jù)生成代碼的條件下即可完成對于日志數(shù)據(jù)靜態(tài)模式的有效提取.但黑盒提取方法的效果高度依賴于提取過程中所規(guī)定的token 分隔符和所設(shè)定的相似度閾值,在實(shí)際使用時(shí),也可以通過在模式提取階段引入一些靜態(tài)模式的白盒獲取方法[39-42],以提升日志壓縮的效果.

2)動態(tài)模式提取方法.動態(tài)模式提取是指結(jié)合系統(tǒng)運(yùn)行時(shí)輸出日志的特點(diǎn),提取日志變量中共性部分的過程,主要方法包括2 種:基于樹擴(kuò)展的自頂向下策略和基于模式合并的自底向上策略.

基于樹擴(kuò)展的自頂向下策略通常用于變量組中僅包含一種動態(tài)模式的情況.如圖4 所示,該策略首先從變量組中隨機(jī)挑選一個(gè)變量,利用其中包含的非字母、非數(shù)字的特殊字符(圖4 中為“_”)將原始變量組劃分成更小的變量組,在這一過程中如果某一個(gè)變量不包含當(dāng)前進(jìn)行劃分的字符,則被存入到一個(gè)獨(dú)立存儲單元中進(jìn)行壓縮.針對劃分完成的更小變量組,該策略將進(jìn)一步識別變量值之間的公共子串(圖4 中為“F8”)并基于此對變量組做進(jìn)一步的劃分,如果某一個(gè)子變量組中的所有子變量都相同,則將其記為常量并歸入到動態(tài)模式之中(圖4 中為“block”).接下來對于所有的子變量組重復(fù)上述流程,直到所有子變量組都無法繼續(xù)擴(kuò)展為止.

Fig.4 Tree-expanding-based top-down runtime pattern extraction strategy圖4 基于樹擴(kuò)展的自頂向下動態(tài)模式提取策略

基于模式合并的自底向上策略通常用于處理重復(fù)變量值較多的變量組.如圖5 所示,該策略將首先進(jìn)行去冗處理,將所有不重復(fù)的數(shù)值存儲為字典.此時(shí)由于原始變量組內(nèi)的重復(fù)變量值較多,字典通常要比原始變量組的規(guī)模小很多,因此可以在字典上執(zhí)行復(fù)雜度較高的基于模式合并的動態(tài)模式提取策略.該策略首先根據(jù)變量中的非字母、非數(shù)字的特殊字符提取得到粗模式,之后再將具有相同粗模式的變量合并得到細(xì)模式,此時(shí)如果粗模式的某一子變量在各個(gè)變量值中都保持一致(例如“ERR”),則將其記為常量.最終,根據(jù)提取得到的細(xì)模式將原始字典進(jìn)行重排序,將具有相同細(xì)模式的變量值進(jìn)行連續(xù)存儲,以方便后續(xù)檢索.

Fig.5 Pattern-merging-based bottom-up runtime pattern extraction strategy圖5 基于模式合并的自底向上動態(tài)模式提取策略

在實(shí)際使用時(shí)可以根據(jù)變量組內(nèi)重復(fù)變量值的多少將變量組分成兩類:真實(shí)變量組(real variable vector)和名義變量組(nominal variable vector).前者所包含的變量值中重復(fù)的相對較少,例如時(shí)間戳、具體的延遲數(shù)值等;后者所包含的變量值中則重復(fù)的相對較多,例如用戶名稱、告警級別等.

真實(shí)變量組通常只包含一種動態(tài)模式,而名義變量組則包含多種動態(tài)模式.因此,針對真實(shí)變量組可以采用基于樹擴(kuò)展的自頂向下策略,針對名義變量組可以采用基于模式合并的自底向上策略.

3 數(shù)據(jù)模式感知的日志存儲

日志數(shù)據(jù)模式已在多種日志應(yīng)用中得到應(yīng)用.例如,借助解析得到的日志靜態(tài)模式來確定不同結(jié)構(gòu)化輸出語句的輸出順序,進(jìn)而分析程序行為[40];通過日志動態(tài)模式中變量的數(shù)值特征檢測異常事件[1].本節(jié)重點(diǎn)討論如何利用日志中的數(shù)據(jù)模式實(shí)現(xiàn)日志數(shù)據(jù)存儲,以同時(shí)實(shí)現(xiàn)高壓縮率和低檢索延遲,進(jìn)而構(gòu)建低成本的云日志存儲系統(tǒng).

針對離線云日志“寫一次,很少讀”的特點(diǎn),可以利用日志模式對數(shù)據(jù)進(jìn)行更高密度的壓縮.我們發(fā)現(xiàn)通過靜態(tài)模式提取將日志存儲為若干變量組,一方面,可以從全局上去除日志中因?yàn)楣蚕硐嗤慕Y(jié)構(gòu)化輸出語句而具有的冗余,而又不依賴于通用壓縮方法所使用的去冗手段的窗口大小;另一方面,每一個(gè)變量組內(nèi)的變量數(shù)值具有一定的共性特征(動態(tài)模式),可以對不同的變量組設(shè)計(jì)定制化的壓縮編碼方法以提升數(shù)據(jù)壓縮率.

針對近線云日志“寫一次,多次讀”的特點(diǎn),我們借助數(shù)據(jù)模式,找到了可以同時(shí)實(shí)現(xiàn)高壓縮率和低檢索延遲的日志數(shù)據(jù)壓縮粒度,即基于靜態(tài)模式和動態(tài)模式劃分出細(xì)粒度存儲單元,對每一個(gè)存儲單元可以進(jìn)行獨(dú)立壓縮和獨(dú)立解壓.一方面,在對日志數(shù)據(jù)進(jìn)行檢索時(shí),同一個(gè)存儲單元內(nèi)的數(shù)據(jù)傾向于被同時(shí)訪問,因此將它們壓縮到一起就避免了訪問過程中的無效解壓;另一方面,可以在壓縮時(shí)將各個(gè)存儲單元內(nèi)的數(shù)據(jù)特點(diǎn)描述為標(biāo)簽,利用標(biāo)簽在解壓數(shù)據(jù)之前就可以對存儲單元進(jìn)行有效過濾,從而降低檢索操作需要解壓的數(shù)據(jù)量,進(jìn)而實(shí)現(xiàn)低延遲檢索.

本節(jié)將討論2 個(gè)我們設(shè)計(jì)的數(shù)據(jù)模式感知的日志存儲方法,進(jìn)而說明這2 種思路的實(shí)現(xiàn)過程.我們研制的數(shù)據(jù)模式感知的低成本云日志存儲系統(tǒng)已經(jīng)應(yīng)用到某國際著名云廠商的實(shí)際生產(chǎn)系統(tǒng)中,降低了2/3 的云日志存儲成本,提升了云服務(wù)的服務(wù)質(zhì)量.

3.1 離線云日志的低成本存儲

我們提出了離線云日志的低成本存儲方法LogReducer,它基于靜態(tài)模式對日志數(shù)據(jù)進(jìn)行結(jié)構(gòu)化存儲,再為每一個(gè)變量組定制化設(shè)計(jì)編碼方法,最終實(shí)現(xiàn)了較高的壓縮率.如圖6 所示,LogReducer 的具體壓縮流程可以分成訓(xùn)練階段和壓縮階段.在訓(xùn)練階段,LogReducer 使用靜態(tài)模式提取方法在日志樣本上提取得到靜態(tài)模式.在壓縮階段,通過靜態(tài)模式匹配,將原始日志結(jié)構(gòu)化成若干變量組,再針對每一個(gè)變量組有針對性地進(jìn)行編碼,最后將所有編碼后的變量組壓縮得到最終的壓縮文件.

Fig.6 The architecture of LogReducer圖6 LogReducer 架構(gòu)

依據(jù)變量的數(shù)值特點(diǎn),變量組編碼方法主要包括:

1)時(shí)間戳組成的變量組.時(shí)間戳變量組在壓縮之后得到的文件中占比普遍較高(極端情況下占比可達(dá)70%左右),同時(shí)由于在大型數(shù)據(jù)中心中日志大數(shù)據(jù)的產(chǎn)生速度很快,相鄰的日志條目之間的時(shí)間差值普遍較小.因此,通過引入差分編碼,可顯著提升壓縮率和壓縮速度.

2)存在線性關(guān)聯(lián)關(guān)系的變量組.通過對線性關(guān)聯(lián)關(guān)系的挖掘,可以縮減變量組內(nèi)數(shù)值的大小以提升壓縮效果.例如,一條日志條目同時(shí)包含一次寫操作的塊編號、偏移數(shù)值和寫入長度.由于很多寫入是連續(xù)的,因此針對同一個(gè)寫入塊而言,上一次寫入的偏移數(shù)值加上寫入大小就等于下一次的寫入偏移.通過利用該方法,可以僅記錄這一關(guān)聯(lián)關(guān)系,而將很多原始變量組中的數(shù)值削減為零.

3)數(shù)值偏小的整數(shù)變量組(包括通過差分處理和關(guān)聯(lián)關(guān)系挖掘之后的變量組).可以采用彈性編碼策略將數(shù)值比較小的整數(shù)(很多高位的字節(jié)都是零)采用更少的字節(jié)來存儲.此外,由于差分處理和關(guān)聯(lián)關(guān)系挖掘引入了很多絕對值較小的負(fù)數(shù),該方法也通過移位加比特翻轉(zhuǎn)的途徑,使用更少字節(jié)表示小絕對值的負(fù)數(shù).

3.2 近線云日志的低成本存儲

我們提出了近線云日志的低成本存儲方法LogGrep,它借助靜態(tài)模式和動態(tài)模式將日志分割成細(xì)粒度的存儲單元,在保證高壓縮率的同時(shí),通過細(xì)粒度單元的高效過濾實(shí)現(xiàn)了日志的低延遲檢索.如圖7 所示,LogGrep 在壓縮時(shí)首先通過靜態(tài)模式解析將原始云日志存儲為變量組,接下來又通過動態(tài)模式解析將每一個(gè)變量組存儲成若干細(xì)粒度的存儲單元,并根據(jù)每一個(gè)存儲單元內(nèi)的數(shù)據(jù)特點(diǎn)生成對應(yīng)的標(biāo)簽以支持高效檢索,最后將每一個(gè)存儲單元獨(dú)立壓縮編碼.LogGrep 在檢索時(shí)通過模式匹配和存儲單元過濾得到需要解壓的存儲單元,解壓這些單元并在這些單元上進(jìn)行檢索定位,在定位到被檢索的目標(biāo)日志之后,進(jìn)行日志重構(gòu)并將結(jié)果返回給用戶.

Fig.7 The architecture of LogGrep圖7 LogGrep 架構(gòu)

LogGrep 使用動態(tài)模式對變量組內(nèi)信息進(jìn)行抽象和提煉,因此可以在進(jìn)行真正解壓之前就利用動態(tài)模式提前獲知對應(yīng)的變量組內(nèi)是否存在要檢索的內(nèi)容.同時(shí)較之于原始的變量組,細(xì)粒度的存儲單元內(nèi)的數(shù)據(jù)種類較為單一(通常都是整數(shù)或都是十六進(jìn)制數(shù)),這就為更精確地標(biāo)注創(chuàng)造了條件.我們發(fā)現(xiàn)如果將所有字符分成6 類(0~9,a~f,g~z,A~F,G~Z,其他),一個(gè)靜態(tài)模式結(jié)構(gòu)化后的日志變量組平均包含3.1 種字符,而一個(gè)經(jīng)過動態(tài)模式結(jié)構(gòu)化處理的細(xì)粒度存儲單元?jiǎng)t平均僅包含1.5 種字符.

LogGrep 通過動態(tài)模式的結(jié)構(gòu)化處理,在過濾階段需要解壓的日志量從原始的整個(gè)變量組降低到細(xì)粒度的存儲單元,這相當(dāng)于縮小了變量組的大小,從而降低了檢索延遲.同時(shí),我們發(fā)現(xiàn)通過將原始變量組存儲成細(xì)粒度存儲單元,每一個(gè)細(xì)粒度存儲單元獨(dú)立壓縮后的大小之和與原始變量組整體的壓縮大小基本相同.換言之,引入動態(tài)模式在降低檢索延遲的同時(shí),能夠保持靜態(tài)模式帶來的高壓縮率,相當(dāng)于并沒有因?yàn)樽兞拷M縮小而給壓縮率帶來負(fù)面影響.這主要是因?yàn)橥ㄟ^識別變量組中存在的動態(tài)數(shù)據(jù)模式,變量組內(nèi)的數(shù)據(jù)冗余要么被提取到動態(tài)模式之中,要么就在細(xì)粒度存儲單元之內(nèi),因此不同存儲單元之間基本不存在冗余,進(jìn)而可以保證獨(dú)立壓縮和整體壓縮的壓縮率相差不大.

基于靜態(tài)模式和動態(tài)模式的存儲方式,在處理檢索請求時(shí),可以首先在日志的靜態(tài)模式以及動態(tài)模式中匹配檢索串,確定檢索串中哪些部分屬于靜態(tài)模式或動態(tài)模式,哪些部分可能被包含在細(xì)粒度存儲單元內(nèi),這部分可能包含在細(xì)粒度存儲單元內(nèi)的部分被稱為待檢索關(guān)鍵字.

圖8 展示了一個(gè)在動態(tài)模式上進(jìn)行匹配的例子,對應(yīng)于在圖4 提取得到的動態(tài)模式上匹配“8F8F”串,在整個(gè)匹配過程中臨時(shí)結(jié)果都表示為一個(gè)Bitmap,Bitmap 的總長為變量組中的變量值個(gè)數(shù),由于屬于同一個(gè)靜態(tài)模式的變量組長度相同,因此該Bitmap也可用于記錄該靜態(tài)模式中對應(yīng)的日志條目組中的命中情況,如果某一個(gè)日志條目在當(dāng)前的檢索條件下被命中,則Bitmap 對應(yīng)位置標(biāo)1,否則標(biāo)0.對于例子中的檢索串“8F8F”而言,可能有2 種匹配方案:一個(gè)是“F8”被包含在模式中,而“8”和“F”均包含在子變量中;另一個(gè)是“8”被包含在模式中,而“F8F”被包含在子變量中.對于第1 種情況,對應(yīng)產(chǎn)生2 個(gè)子變量匹配過程A和B,原始結(jié)果需要先在A過程中匹配當(dāng)前已經(jīng)命中的條目,然后再在B過程中匹配已命中條目.對于第2 種情況則只對應(yīng)一個(gè)匹配過程C.最終結(jié)果是上述2 種情況得到的中間結(jié)果的并集.

Fig.8 An example for runtime pattern matching圖8 一個(gè)在動態(tài)模式上進(jìn)行匹配的例子

在使用細(xì)粒度存儲單元標(biāo)簽和檢索關(guān)鍵字進(jìn)行匹配的過程中,LogGrep 過濾掉不可能包含關(guān)鍵字的細(xì)粒度存儲單元,解壓剩余的細(xì)粒度存儲單元并同檢索關(guān)鍵字進(jìn)行匹配.經(jīng)過上述的一系列過濾,最終僅需要解壓并檢索少部分的細(xì)粒度存儲單元就可以完成對日志大數(shù)據(jù)的檢索,解決了日志大數(shù)據(jù)有效信息密度低以及對于檢索延遲要求高的挑戰(zhàn).

在細(xì)粒度存儲單元內(nèi)進(jìn)行檢索時(shí),LogGrep 采用定長檢索策略,即在壓縮時(shí)根據(jù)一個(gè)細(xì)粒度存儲單元內(nèi)的最長項(xiàng)將各項(xiàng)進(jìn)行補(bǔ)齊,由于同一個(gè)細(xì)粒度存儲單元內(nèi)各項(xiàng)的長度接近,采用該補(bǔ)齊方法對于壓縮率的影響較小,但在檢索時(shí)由于細(xì)粒度存儲單元內(nèi)所有項(xiàng)長度相同,顯著提升了檢索性能.

4 典型低成本云日志存儲方法的比較

基于數(shù)據(jù)模式感知的思想,國內(nèi)外多個(gè)團(tuán)隊(duì)進(jìn)行了探索和嘗試,設(shè)計(jì)了多種低成本云日志存儲方法,典型的有多倫多大學(xué)設(shè)計(jì)的CLP[43]與我們設(shè)計(jì)的LogReducer[17]和LogGrep[18].其中CLP 主要利用了靜態(tài)模式,LogReducer 和LogGrep 同時(shí)使用了靜態(tài)模式和動態(tài)模式.

CLP 使用靜態(tài)模式進(jìn)行日志存儲,它主要采用基于白盒的方法來進(jìn)行靜態(tài)模式的提取,并使用提取得到的靜態(tài)模式和相應(yīng)的變量格式構(gòu)建倒排表并用作壓縮日志段的索引.在日志檢索時(shí),系統(tǒng)將首先檢查倒排表索引,確定需要解壓的日志塊并進(jìn)行解壓.CLP 的優(yōu)點(diǎn)是索引構(gòu)建迅速,日志寫入速度較高;缺點(diǎn)是不同靜態(tài)模式的變量連續(xù)存放在一起進(jìn)行壓縮,壓縮率和檢索性能都相對較低.

LogReducer 針對用于審計(jì)的離線日志設(shè)計(jì),這部分日志平時(shí)的訪問數(shù)量幾乎為零,但是一旦被調(diào)用,就需要實(shí)現(xiàn)無損還原,因此它無法有效支持直接針對壓縮日志的檢索操作,需要在檢索前先將日志還原.

LogGrep 針對近線日志設(shè)計(jì),同時(shí)滿足云日志的高壓縮率和低檢索延遲的存儲需求.

我們選用15 種某國際著名云廠商的總大小為1.6 TB 的真實(shí)生產(chǎn)日志對上述3 種典型的日志存儲方法進(jìn)行了測評.評價(jià)指標(biāo)主要包括壓縮率、壓縮速度和檢索延遲.其中由于LogReducer 無法支持對于壓縮格式的直接檢索,因此我們設(shè)置LogReducer 的檢索延遲得分為0.

圖9 以一種較為直觀的方式顯示了3 種日志數(shù)據(jù)存儲方法在3 個(gè)維度上的性能.在每一類日志上,所有方法在3 個(gè)維度的性能都同性能最好的方法做歸一化(壓縮率最高的方法得分為1,檢索延遲最低的方法得分為1),之后將對某一方法某一維度上15種日志的結(jié)果計(jì)算平均值.

Fig.9 The evaluation of three typical methods圖9 三類典型的日志存儲方法測評

在壓縮率方面,LogReducer 的平均得分為1,相對于其他兩種方法,它在15 種日志中的13 種上都實(shí)現(xiàn)了最高的壓縮率.LogGrep 的平均得分為0.78,在LogReducer 未達(dá)到最佳的2 種日志上,LogGrep 的壓縮率最高,在最差情況下LogGrep 的壓縮率大概為LogReducer 的一半,這主要是因?yàn)長ogGrep 在使用靜態(tài)模式提取變量組之后,對于所有的變量組都采用了統(tǒng)一的編碼方法,而并非像LogReducer 那樣針對不同類型的變量組采用不同的編碼方法.相比于其它兩類方法,CLP 的壓縮率具有明顯劣勢,其壓縮率得分僅有0.36,這主要是因?yàn)樗鼉H使用靜態(tài)模式構(gòu)建檢索時(shí)的索引,并未使用該模式實(shí)現(xiàn)日志的高密壓縮.

在壓縮速度方面,CLP 的平均得分為1,相比于其他兩類方法具有明顯的優(yōu)勢,在全部15 種日志上都達(dá)到了最佳性能.LogReducer 和LogGrep 的得分分別為0.22 和0.17.相比于CLP,LogReducer 和LogGrep都涉及到黑盒模式提取步驟,該步驟涉及到相對復(fù)雜的訓(xùn)練過程和日志拷貝過程,因此對應(yīng)的壓縮速度相對較低.

在檢索延遲方面,LogGrep 表現(xiàn)出了明顯的性能優(yōu)勢,它在全部15 種日志上的檢索延遲都要遠(yuǎn)低于CLP,在一些日志上甚至要低2 個(gè)數(shù)量級,平均來看,CLP 的檢索延遲得分僅有0.04.

如表1 所示,針對不同日志類型和日志存儲需求,可以選用不同的日志存儲方法.當(dāng)我們僅需要高壓縮率時(shí)可以優(yōu)先選用LogReducer,當(dāng)我們僅需滿足高壓縮速度時(shí),可以優(yōu)先選用CLP.LogGrep 可以同時(shí)實(shí)現(xiàn)需要高壓縮率(壓得狠)和低檢索延遲(查得快)的雙重目標(biāo),但它依舊未能攻克如何實(shí)現(xiàn)高速模式提取和數(shù)據(jù)編碼的難題,因此其壓縮速度較差.

Table 1 Storage Requirements and Suitable Storage Methods for Different Logs表1 不同日志類型的存儲需求與適用存儲方法

5 云日志存儲系統(tǒng)設(shè)計(jì)的經(jīng)驗(yàn)與思考

公共云日志數(shù)據(jù)以其產(chǎn)生迅速、規(guī)模龐大、留存時(shí)間長、有用信息密度低、訪問延遲敏感等特點(diǎn)對存儲系統(tǒng)提出了新的挑戰(zhàn),本節(jié)將介紹在設(shè)計(jì)相關(guān)低成本存儲系統(tǒng)過程中的經(jīng)驗(yàn)與思考,希望能對未來相關(guān)領(lǐng)域大數(shù)據(jù)低成本存儲系統(tǒng)的設(shè)計(jì)起到借鑒作用.

1)低成本云日志存儲系統(tǒng)設(shè)計(jì)的核心思路在于以全生命周期的視角考慮數(shù)據(jù)壓縮和成本縮減,即壓縮存儲系統(tǒng)的設(shè)計(jì)不僅要考慮高壓縮率和存儲成本,而且還需考慮數(shù)據(jù)寫入時(shí)的壓縮成本和數(shù)據(jù)在被訪問時(shí)的解壓量以及對應(yīng)的檢索成本.這就要求相關(guān)設(shè)計(jì)者不能顧此失彼,只有通盤考慮了數(shù)據(jù)的全生命周期才能真正實(shí)現(xiàn)數(shù)據(jù)存儲的低成本.現(xiàn)有的很多壓縮工具(例如LZMA,zstd)僅僅追求高壓縮率和高壓縮速度,默認(rèn)數(shù)據(jù)在訪問時(shí)必須通過全解壓的方式進(jìn)行訪問,在設(shè)計(jì)壓縮算法時(shí)并未考慮檢索延遲的因素,這就造成相關(guān)方法盡管可以實(shí)現(xiàn)較低的存儲開銷但卻無法保證低檢索開銷,極端情況下甚至?xí)斐上到y(tǒng)工程師誤判錯(cuò)誤根因,進(jìn)而影響整個(gè)錯(cuò)誤溯源的結(jié)果.

2)數(shù)據(jù)模式感知的低成本云日志存儲系統(tǒng)的相關(guān)實(shí)踐表明,領(lǐng)域?qū)S玫牡统杀窘鉀Q方案不僅在壓縮率方面優(yōu)于通用的解決方案,而且?guī)砹巳芷谠O(shè)計(jì)低成本數(shù)據(jù)存儲系統(tǒng)的可能.LZMA 和zstd等壓縮工具在壓縮時(shí)不考慮數(shù)據(jù)實(shí)際訪問模式的根本原因在于它們屬于通用壓縮方法,在壓縮過程中無法結(jié)合實(shí)際數(shù)據(jù)特征調(diào)整相應(yīng)的壓縮策略,進(jìn)而不僅錯(cuò)失通過針對性編碼提升數(shù)據(jù)壓縮率的機(jī)會,而且無法達(dá)到“壓縮與檢索聯(lián)合設(shè)計(jì)”所能夠同時(shí)實(shí)現(xiàn)的高壓縮率、低檢索延遲的雙重目標(biāo).

3)數(shù)據(jù)模式感知的低成本云日志存儲系統(tǒng)最大的成功經(jīng)驗(yàn)在于通過引入數(shù)據(jù)模式實(shí)現(xiàn)了“壓得狠”和“查得快”這一對看似矛盾的目標(biāo)的和解.“壓得狠”和“查得快”的矛盾焦點(diǎn)在于數(shù)據(jù)的壓縮粒度,即將多少數(shù)據(jù)、哪些數(shù)據(jù)壓縮到一個(gè)存儲單元的問題:如果壓縮粒度過大,更多的數(shù)據(jù)被壓縮到一起,去冗機(jī)會增多,但是每一次訪問時(shí)解壓的數(shù)據(jù)量也隨之增加;反之如果壓縮粒度過小,每次訪問時(shí)可以按需要進(jìn)行解壓,但卻降低了數(shù)據(jù)去冗的機(jī)會.通過挖掘數(shù)據(jù)模式,我們找到了數(shù)據(jù)壓縮的最佳粒度,即將數(shù)據(jù)模式中出現(xiàn)在同一個(gè)位置的變量值壓縮到一起,例如靜態(tài)模式中的變量組、動態(tài)模式中的子變量組等.一方面,該方法可以最大限度保證不同組之間的冗余相對較少,進(jìn)而保證針對每一個(gè)組單獨(dú)進(jìn)行編碼和將所有組放在一起進(jìn)行編碼的壓縮率差別不大,但前者的編碼粒度顯然更細(xì).另一方面,該方法還能保證屬于同一組內(nèi)的數(shù)據(jù)具有一定的共性特征,同時(shí)在訪問時(shí)也傾向于被一起訪問,這就為有針對性的數(shù)據(jù)編碼和減少解壓的細(xì)粒度的數(shù)據(jù)過濾提供了可能.

未來的低成本存儲系統(tǒng)設(shè)計(jì)應(yīng)當(dāng)結(jié)合數(shù)據(jù)的全生命周期和領(lǐng)域特征,有針對性地開展數(shù)據(jù)編碼與壓縮.模式感知的思路不僅可以應(yīng)用于半結(jié)構(gòu)化的日志數(shù)據(jù),在海量非結(jié)構(gòu)化的數(shù)據(jù)中,也可以探索更為先進(jìn)的模式識別方法找到對應(yīng)的模式和變量組,并通過變量組編碼來實(shí)現(xiàn)“壓得狠”和“查得快”的雙重目標(biāo).

6 總結(jié)與展望

本文總結(jié)了一類新興的大數(shù)據(jù)——云日志大數(shù)據(jù)的數(shù)據(jù)特點(diǎn)和存儲挑戰(zhàn),介紹了數(shù)據(jù)模式感知的低成本云日志存儲系統(tǒng)的核心設(shè)計(jì)思想.詳細(xì)介紹了目前國內(nèi)外已有的低成本云日志存儲系統(tǒng)所使用的日志數(shù)據(jù)模式及其具體使用方法,并對若干典型方法進(jìn)行了測評與分析.最后介紹了我們在設(shè)計(jì)數(shù)據(jù)模式感知的低成本云日志存儲系統(tǒng)時(shí)的經(jīng)驗(yàn)與思考.

目前還沒有一款云日志存儲系統(tǒng)能夠在壓縮率、壓縮速度和檢索延遲這3 個(gè)維度上同時(shí)達(dá)到最優(yōu),該目標(biāo)的主要挑戰(zhàn)在于如何在低提取成本但效果有限的全局模式提取方法與高提取成本但效果更好的局部模式提取方法之間做權(quán)衡.希望相關(guān)領(lǐng)域的研究可以不斷進(jìn)步、推陳出新.另一方面,日志壓縮也可以考慮從日志產(chǎn)生的源頭上入手,通過改進(jìn)程序中的結(jié)構(gòu)化輸出語句和日志產(chǎn)生的方式盡量降低日志數(shù)據(jù)中的冗余(例如ErrorLog[44],LogAdvisor[45]等),并最終實(shí)現(xiàn)日志程序和日志處理程序的協(xié)同設(shè)計(jì).

同時(shí),我們也希望看到更多其他領(lǐng)域的大數(shù)據(jù)存儲可以結(jié)合本領(lǐng)域特征有針對性地設(shè)計(jì)低成本存儲系統(tǒng),以進(jìn)一步降低數(shù)據(jù)存儲成本和能源資源消耗.

作者貢獻(xiàn)聲明:魏鈞宇和張廣艷提出了寫作思路和實(shí)現(xiàn)方案;魏鈞宇和陳軍超負(fù)責(zé)實(shí)現(xiàn)并撰寫論文;張廣艷提出指導(dǎo)意見并修改論文.

猜你喜歡
存儲單元細(xì)粒度壓縮率
融合判別性與細(xì)粒度特征的抗遮擋紅外目標(biāo)跟蹤算法
一種28 nm工藝下抗單粒子翻轉(zhuǎn)SRAM的12T存儲單元設(shè)計(jì)
細(xì)粒度的流計(jì)算執(zhí)行效率優(yōu)化方法
水密封連接器尾部接電纜的優(yōu)化設(shè)計(jì)
纏繞墊片產(chǎn)品質(zhì)量控制研究
數(shù)據(jù)在計(jì)算機(jī)內(nèi)存中的存儲形式及實(shí)驗(yàn)驗(yàn)證
基于雙線性卷積網(wǎng)絡(luò)的細(xì)粒度圖像定位
一種成本更低的全新靜態(tài)DRAM存儲單元
多載波通信系統(tǒng)中CQI無損壓縮法研究
MiR-125a-5p is Upregulated in Plasma of Residents from An Electronic Waste Recycling Site