美團(tuán)數(shù)據(jù)庫(kù)平臺(tái)研發(fā)組,面臨日益急迫的數(shù)據(jù)庫(kù)異常發(fā)現(xiàn)需求,為了更加快速、智能地發(fā)現(xiàn)、定位和止損,我們開(kāi)發(fā)了基于AI算法的數(shù)據(jù)庫(kù)異常檢測(cè)服務(wù)。本文從特征分析、算法選型、模型訓(xùn)練與實(shí)時(shí)檢測(cè)等維度介紹了我們的一些實(shí)踐和思考,希望為從事相關(guān)工作的同學(xué)帶來(lái)一些啟發(fā)或者幫助。
1. 背景
2. 特征分析
2.1 找出數(shù)據(jù)的變化規(guī)律
3. 算法選型
3.1 分布規(guī)律與算法選擇
3.2 案例樣本建模
4. 模型訓(xùn)練與實(shí)時(shí)檢測(cè)
4.1 數(shù)據(jù)流轉(zhuǎn)過(guò)程
4.2 異常檢測(cè)過(guò)程
5. 產(chǎn)品運(yùn)營(yíng)
6. 未來(lái)展望
7. 附錄
7.1 絕對(duì)中位差
7.2 箱形圖
7.3 極值理論
1. 背景
數(shù)據(jù)庫(kù)被廣泛用于美團(tuán)的核心業(yè)務(wù)場(chǎng)景上,對(duì)穩(wěn)定性要求較高,對(duì)異常容忍度非常低。因此,快速的數(shù)據(jù)庫(kù)異常發(fā)現(xiàn)、定位和止損就變得越來(lái)越重要。針對(duì)異常監(jiān)測(cè)的問(wèn)題,傳統(tǒng)的固定閾值告警方式,需要依賴(lài)專(zhuān)家經(jīng)驗(yàn)進(jìn)行規(guī)則配置,不能根據(jù)不同業(yè)務(wù)場(chǎng)景靈活動(dòng)態(tài)調(diào)整閾值,容易讓小問(wèn)題演變成大故障。 而基于AI的數(shù)據(jù)庫(kù)異常發(fā)現(xiàn)能力,可以基于數(shù)據(jù)庫(kù)歷史表現(xiàn)情況,對(duì)關(guān)鍵指標(biāo)進(jìn)行7*24小時(shí)巡檢,能夠在異常萌芽狀態(tài)就發(fā)現(xiàn)風(fēng)險(xiǎn),更早地將異常暴露,輔助研發(fā)人員在問(wèn)題惡化前進(jìn)行定位和止損?;谝陨线@些因素的考量,美團(tuán)數(shù)據(jù)庫(kù)平臺(tái)研發(fā)組決定開(kāi)發(fā)一套數(shù)據(jù)庫(kù)異常檢測(cè)服務(wù)系統(tǒng)。接下來(lái),本文將會(huì)從特征分析、算法選型、模型訓(xùn)練與實(shí)時(shí)檢測(cè)等幾個(gè)維度闡述我們的一些思考和實(shí)踐。
2. 特征分析
2.1 找出數(shù)據(jù)的變化規(guī)律
在具體進(jìn)行開(kāi)發(fā)編碼前,有一項(xiàng)非常重要的工作,就是從已有的歷史監(jiān)控指標(biāo)中,發(fā)現(xiàn)時(shí)序數(shù)據(jù)的變化規(guī)律,從而根據(jù)數(shù)據(jù)分布的特點(diǎn)選取合適的算法。以下是我們從歷史數(shù)據(jù)中選取的一些具有代表性的指標(biāo)分布圖:
圖1 數(shù)據(jù)庫(kù)指標(biāo)形態(tài) 從上圖我們可以看出,數(shù)據(jù)的規(guī)律主要呈現(xiàn)三種狀態(tài):周期、漂移和平穩(wěn)[1]。因此,我們前期可以針對(duì)這些普遍特征的樣本進(jìn)行建模,即可覆蓋大部分場(chǎng)景。接下來(lái),我們分別從周期性、漂移性和平穩(wěn)性這三個(gè)角度進(jìn)行分析,并討論算法設(shè)計(jì)的過(guò)程。
2.1.1 周期性變化
在很多業(yè)務(wù)場(chǎng)景中,指標(biāo)會(huì)由于早晚高峰或是一些定時(shí)任務(wù)引起規(guī)律性波動(dòng)。我們認(rèn)為這屬于數(shù)據(jù)的內(nèi)在規(guī)律性波動(dòng),模型應(yīng)該具備識(shí)別出周期性成分,檢測(cè)上下文異常的能力。對(duì)于不存在長(zhǎng)期趨勢(shì)成分的時(shí)序指標(biāo)而言,當(dāng)指標(biāo)存在周期性成分的情況下,,其中T代表的是時(shí)序的周期跨度??赏ㄟ^(guò)計(jì)算自相關(guān)圖,即計(jì)算出t取不同值時(shí) 的值,然后通過(guò)分析自相關(guān)峰的間隔來(lái)確定周期性,主要的流程包括以下幾個(gè)步驟:
提取趨勢(shì)成分,分離出殘差序列。使用移動(dòng)平均法提取出長(zhǎng)期趨勢(shì)項(xiàng),跟原序列作差得到殘差序列(此處周期性分析與趨勢(shì)無(wú)關(guān),若不分離趨勢(shì)成分,自相關(guān)將顯著受到影響,難以識(shí)別周期)。
計(jì)算殘差的循環(huán)自相關(guān)(Rolling Correlation)序列。通過(guò)循環(huán)移動(dòng)殘差序列后,與殘差序列進(jìn)行向量點(diǎn)乘運(yùn)算來(lái)計(jì)算自相關(guān)序列(循環(huán)自相關(guān)可以避免延遲衰減)。
根據(jù)自相關(guān)序列的峰值坐標(biāo)來(lái)確定周期T。提取自相關(guān)序列的一系列局部最高峰,取橫坐標(biāo)的間隔為周期(如果該周期點(diǎn)對(duì)應(yīng)的自相關(guān)值小于給定閾值,則認(rèn)為無(wú)顯著周期性)。
具體過(guò)程如下:
圖2 周期提取流程示意
2.1.2 漂移性變化
對(duì)于待建模的序列,通常要求它不存在明顯的長(zhǎng)期趨勢(shì)或是存在全局漂移的現(xiàn)象,否則生成的模型通常無(wú)法很好地適應(yīng)指標(biāo)的最新走勢(shì)[2]。我們將時(shí)間序列隨著時(shí)間的變化出現(xiàn)均值的顯著變化或是存在全局突變點(diǎn)的情況,統(tǒng)稱(chēng)為漂移的場(chǎng)景。為了能夠準(zhǔn)確地捕捉時(shí)間序列的最新走勢(shì),我們需要在建模前期判斷歷史數(shù)據(jù)中是否存在漂移的現(xiàn)象。全局漂移和周期性序列均值漂移,如下示例所示:
圖3 數(shù)據(jù)漂移示意 數(shù)據(jù)庫(kù)指標(biāo)受業(yè)務(wù)活動(dòng)等復(fù)雜因素影響,很多數(shù)據(jù)會(huì)有非周期性的變化,而建模需要容忍這些變化。因此,區(qū)別于經(jīng)典的變點(diǎn)檢測(cè)問(wèn)題,在異常檢測(cè)場(chǎng)景下,我們只需要檢測(cè)出歷史上很平穩(wěn),之后出現(xiàn)數(shù)據(jù)漂移的情況。綜合算法性能和實(shí)際表現(xiàn),我們使用了基于中位數(shù)濾波的漂移檢測(cè)方法,主要的流程包含以下幾個(gè)環(huán)節(jié): 1. 中位數(shù)平滑
a. 根據(jù)給定窗口的大小,提取窗口內(nèi)的中位數(shù)來(lái)獲取時(shí)序的趨勢(shì)成分。
b. 窗口需要足夠大,以避免周期因素影響,并進(jìn)行濾波延遲矯正。
c. 使用中位數(shù)而非均值平滑的原因在于為了規(guī)避異常樣本的影響。
2. 判斷平滑序列是否遞增或是遞減 a. 中位數(shù)平滑后的序列數(shù)據(jù),若每個(gè)點(diǎn)都大于(小于)前一個(gè)點(diǎn),則序列為遞增(遞減)序列。
b. 如果序列存在嚴(yán)格遞增或是嚴(yán)格遞減的性質(zhì),則指標(biāo)明顯存在長(zhǎng)期趨勢(shì),此時(shí)可提前終止。
3.遍歷平滑序列,利用如下兩個(gè)規(guī)則來(lái)判斷是否存在漂移的現(xiàn)象
a. 當(dāng)前樣本點(diǎn)左邊序列的最大值小于當(dāng)前樣本點(diǎn)右邊序列的最小值,則存在突增漂移(上漲趨勢(shì))。
b. 當(dāng)前樣本點(diǎn)左邊序列的最小值大于當(dāng)前樣本點(diǎn)右邊序列的最大值,則存在突降漂移(下跌趨勢(shì))。
2.1.3 平穩(wěn)性變化
對(duì)于一個(gè)時(shí)序指標(biāo),如果其在任意時(shí)刻,它的性質(zhì)不隨觀(guān)測(cè)時(shí)間的變化而變化,我們認(rèn)為這條時(shí)序是具備平穩(wěn)性的。因此,對(duì)于具有長(zhǎng)期趨勢(shì)成分亦或是周期性成分的時(shí)間序列而言,它們都是不平穩(wěn)的。具體示例如下圖所示:
圖4 數(shù)據(jù)平穩(wěn)示意 針對(duì)這種情況,我們可以通過(guò)單位根檢驗(yàn)(Augmented Dickey-Fuller Test)[3]來(lái)判斷給定的時(shí)間序列是否平穩(wěn)。具體地說(shuō),對(duì)于一條給定時(shí)間范圍指標(biāo)的歷史數(shù)據(jù)而言,我們認(rèn)為在同時(shí)滿(mǎn)足如下條件的情況下,時(shí)序是平穩(wěn)的:
最近1天的時(shí)序數(shù)據(jù)通過(guò)adfuller檢驗(yàn)獲得的p值小于0.05。
最近7天的時(shí)序數(shù)據(jù)通過(guò)adfuller檢驗(yàn)獲得的p值小于0.05。
3. 算法選型
3.1 分布規(guī)律與算法選擇
通過(guò)了解業(yè)界的一些知名公司在時(shí)序數(shù)據(jù)異常檢測(cè)上公布的產(chǎn)品介紹,加上我們歷史積累的經(jīng)驗(yàn),以及對(duì)部分線(xiàn)上實(shí)際指標(biāo)的抽樣分析,它們的概率密度函數(shù)符合如下情況的分布:
圖5 分布偏斜示意 針對(duì)上述的分布,我們調(diào)研了一些常見(jiàn)的算法,并確定了箱形圖、絕對(duì)中位差和極值理論作為最終異常檢測(cè)算法。以下是對(duì)常見(jiàn)時(shí)序數(shù)據(jù)檢測(cè)的算法對(duì)比表:
我們沒(méi)有選擇3Sigma的主要原因是它對(duì)異常容忍度較低,而絕對(duì)中位差從理論上而言具有更好的異常容忍度,所以在數(shù)據(jù)呈現(xiàn)高對(duì)稱(chēng)分布時(shí),通過(guò)絕對(duì)中位差(MAD)替代3Sigma進(jìn)行檢測(cè)。我們對(duì)不同數(shù)據(jù)的分布分別采用了不同的檢測(cè)算法(關(guān)于不同算法的原理可以參考文末附錄的部分,這里不做過(guò)多的闡述):
低偏態(tài)高對(duì)稱(chēng)分布:絕對(duì)中位差(MAD)
中等偏態(tài)分布:箱形圖(Boxplot)
高偏態(tài)分布:極值理論(EVT)
有了如上的分析,我們可以得出具體的根據(jù)樣本輸出模型的流程:
圖6 算法建模流程 算法的整體建模流程如上圖所示,主要涵蓋以下幾個(gè)分支環(huán)節(jié):時(shí)序漂移檢測(cè)、時(shí)序平穩(wěn)性分析、時(shí)序周期性分析和偏度計(jì)算。下面分別進(jìn)行介紹:
時(shí)序漂移檢測(cè)。如果檢測(cè)存在漂移的場(chǎng)景,則需要根據(jù)檢測(cè)獲得的漂移點(diǎn)t來(lái)切割輸入時(shí)序,使用漂移點(diǎn)后的時(shí)序樣本作為后續(xù)建模流程的輸入,記為S={Si},其中i>t。
時(shí)序平穩(wěn)性分析。如果輸入時(shí)序S滿(mǎn)足平穩(wěn)性檢驗(yàn),則直接通過(guò)箱形圖(默認(rèn))或是絕對(duì)中位差的方式來(lái)進(jìn)行建模。
時(shí)序周期性分析。存在周期性的情況下,將周期跨度記為T(mén),將輸入時(shí)序S根據(jù)跨度T進(jìn)行切割,針對(duì)各個(gè)時(shí)間索引j∈{0,1,?,T?1}所組成的數(shù)據(jù)桶進(jìn)行建模流程。不存在周期性的情況下,針對(duì)全部輸入時(shí)序S作為數(shù)據(jù)桶進(jìn)行建模流程。
案例:給定一條時(shí)間序列ts={t0,t1,?,tn},假定其存在周期性且周期跨度為T(mén),對(duì)于時(shí)間索引j而言,其中j∈{0,1,?,T?1},對(duì)其建模所需要的樣本點(diǎn)由區(qū)間[tj?kT?m, tj?kT+m]構(gòu)成,其中m為參數(shù),代表窗口大小,k為整數(shù),滿(mǎn)足j?kT?m≥0, j?kT+m≤n。 舉例來(lái)說(shuō),假設(shè)給定時(shí)序自2022/03/01 0000至2022/03/08 0000止,給定窗口大小為5,周期跨度為一天,那么對(duì)于時(shí)間索引30而言,對(duì)其建模所需要的樣本點(diǎn)將來(lái)自于如下時(shí)間段: [03/01 0000, 03/01 0000]
[03/02 0000, 03/02 0000]
...
[03/07 0000, 03/07 0000]
偏度計(jì)算。時(shí)序指標(biāo)轉(zhuǎn)化為概率分布圖,計(jì)算分布的偏度,若偏度的絕對(duì)值超過(guò)閾值,則通過(guò)極值理論進(jìn)行建模輸出閾值。若偏度的絕對(duì)值小于閾值,則通過(guò)箱形圖或是絕對(duì)中位差的方式進(jìn)行建模輸出閾值。
3.2 案例樣本建模
這里選取了一個(gè)案例,展示數(shù)據(jù)分析及建模過(guò)程,便于更清晰的理解上述過(guò)程。其中圖(a)為原始序列,圖(b)為按照天的跨度進(jìn)行折疊的序列,圖(c)為圖(b)中某時(shí)間索引區(qū)間內(nèi)的樣本經(jīng)過(guò)放大后的趨勢(shì)表現(xiàn),圖(d)中黑色曲線(xiàn)為圖(c)中時(shí)間索引所對(duì)應(yīng)的下閾值。如下是針對(duì)某時(shí)序的歷史樣本進(jìn)行建模的案例:
圖7 建模案例 上圖(c)區(qū)域內(nèi)的樣本分布直方圖以及閾值(已剔除其中部分異常樣本),可以看到,在該高偏分布的場(chǎng)景中,EVT算法計(jì)算的閾值更為合理。
圖8 偏斜分布閾值對(duì)比
4. 模型訓(xùn)練與實(shí)時(shí)檢測(cè)
4.1 數(shù)據(jù)流轉(zhuǎn)過(guò)程
為了實(shí)時(shí)檢測(cè)規(guī)模龐大的秒級(jí)數(shù)據(jù),我們以基于Flink進(jìn)行實(shí)時(shí)流處理為出發(fā)點(diǎn),設(shè)計(jì)了如下的技術(shù)方案:
實(shí)時(shí)檢測(cè)部分:基于Flink實(shí)時(shí)流處理,消費(fèi)Mafka(美團(tuán)內(nèi)部的消息隊(duì)列組件)消息進(jìn)行在線(xiàn)檢測(cè),結(jié)果存儲(chǔ)于Elasticsearch(以下簡(jiǎn)稱(chēng)ES)中,并產(chǎn)生異常記錄。
離線(xiàn)訓(xùn)練部分:以Squirrel(美團(tuán)內(nèi)部的KV數(shù)據(jù)庫(kù))作為任務(wù)隊(duì)列,從MOD(美團(tuán)內(nèi)部運(yùn)維數(shù)據(jù)倉(cāng)庫(kù))讀取訓(xùn)練數(shù)據(jù),從配置表讀取參數(shù),訓(xùn)練模型,保存于ES,支持自動(dòng)和手動(dòng)觸發(fā)訓(xùn)練,通過(guò)定時(shí)讀取模型庫(kù)的方式,進(jìn)行模型加載和更新。
以下是具體的離線(xiàn)訓(xùn)練和在線(xiàn)檢測(cè)技術(shù)設(shè)計(jì):
圖9 離線(xiàn)訓(xùn)練和在線(xiàn)檢測(cè)技術(shù)設(shè)計(jì)
4.2 異常檢測(cè)過(guò)程
異常檢測(cè)算法整體采用分治思想,在模型訓(xùn)練階段,根據(jù)歷史數(shù)據(jù)識(shí)別提取特征,選定合適的檢測(cè)算法。這里分為離線(xiàn)訓(xùn)練和在線(xiàn)檢測(cè)兩部分,離線(xiàn)主要根據(jù)歷史情況進(jìn)行數(shù)據(jù)預(yù)處理、時(shí)序分類(lèi)和時(shí)序建模。在線(xiàn)主要加載運(yùn)用離線(xiàn)訓(xùn)練的模型進(jìn)行在線(xiàn)實(shí)時(shí)異常檢測(cè)。具體設(shè)計(jì)如下圖所示:
圖10 異常檢測(cè)過(guò)程
5. 產(chǎn)品運(yùn)營(yíng)
為了提高優(yōu)化迭代算法的效率,持續(xù)運(yùn)營(yíng)以提高精準(zhǔn)率和召回率,我們借助Horae(美團(tuán)內(nèi)部可擴(kuò)展的時(shí)序數(shù)據(jù)異常檢測(cè)系統(tǒng))的案例回溯能力,實(shí)現(xiàn)在線(xiàn)檢測(cè)、案例保存、分析優(yōu)化、結(jié)果評(píng)估、發(fā)布上線(xiàn)的閉環(huán)。
圖11 運(yùn)營(yíng)流程
目前,異常檢測(cè)算法指標(biāo)如下:
精準(zhǔn)率:隨機(jī)選擇一部分檢測(cè)出異常的案例,人工校驗(yàn)其中確實(shí)是異常的比例,為81%。
召回率:根據(jù)故障、告警等來(lái)源,審查對(duì)應(yīng)實(shí)例各指標(biāo)異常情況,對(duì)照監(jiān)測(cè)結(jié)果計(jì)算召回率,為82%。
F1-score:精準(zhǔn)率和召回率的調(diào)和平均數(shù),為81%。
6. 未來(lái)展望
目前,美團(tuán)數(shù)據(jù)庫(kù)異常監(jiān)測(cè)能力已基本構(gòu)建完成,后續(xù)我們將對(duì)產(chǎn)品繼續(xù)進(jìn)行優(yōu)化和拓展,具體方向包括:
具有異常類(lèi)型識(shí)別能力。可以檢測(cè)出異常的類(lèi)型,如均值變化、波動(dòng)變化、尖刺等,支持按異常類(lèi)型進(jìn)行告警訂閱,并作為特征輸入后續(xù)診斷系統(tǒng),完善數(shù)據(jù)庫(kù)自治生態(tài)[4]。
構(gòu)建Human-in-Loop環(huán)境。支持根據(jù)反饋標(biāo)注自動(dòng)學(xué)習(xí),保障模型持續(xù)優(yōu)化[5]。
多種數(shù)據(jù)庫(kù)場(chǎng)景的支持。異常檢測(cè)能力平臺(tái)化以支持更多數(shù)據(jù)庫(kù)場(chǎng)景,如DB端到端報(bào)錯(cuò)、節(jié)點(diǎn)網(wǎng)絡(luò)監(jiān)測(cè)等。
7. 附錄
7.1 絕對(duì)中位差
絕對(duì)中位差,即Median Absolute Deviation(MAD),是對(duì)單變量數(shù)值型數(shù)據(jù)的樣本偏差的一種魯棒性測(cè)量[6],通常由下式計(jì)算而得:
其中在先驗(yàn)為正態(tài)分布的情況下,一般C選擇1.4826,k選擇3。MAD假定樣本中間的50%區(qū)域均為正常樣本,而異常樣本落在兩側(cè)的50%區(qū)域內(nèi)。當(dāng)樣本服從正態(tài)分布的情況下,MAD指標(biāo)相較于標(biāo)準(zhǔn)差更能適應(yīng)數(shù)據(jù)集中的異常值。對(duì)于標(biāo)準(zhǔn)差,使用的是數(shù)據(jù)到均值的距離平方,較大的偏差權(quán)重較大,異常值對(duì)結(jié)果影響不能忽視,而對(duì)MAD而言少量的異常值不會(huì)影響實(shí)驗(yàn)的結(jié)果,MAD算法對(duì)于數(shù)據(jù)的正態(tài)性有較高要求。
7.2 箱形圖
箱形圖主要通過(guò)幾個(gè)統(tǒng)計(jì)量來(lái)描述樣本分布的離散程度以及對(duì)稱(chēng)性,包括:
Q0:最小值(Minimum)
Q1:下四分位數(shù)(Lower Quartile)
Q2:中位數(shù)(Median)
Q3:上四分位數(shù)(Upper Quartile)
Q4:最大值(Maximum)
圖12 箱線(xiàn)圖
將Q1與Q3之間的間距稱(chēng)為IQR,當(dāng)樣本偏離上四分位1.5倍的IQR(或是偏離下四分位數(shù)1.5倍的IQR)的情況下,將樣本視為是一個(gè)離群點(diǎn)。不同于基于正態(tài)假設(shè)的三倍標(biāo)準(zhǔn)差,通常情況下,箱形圖對(duì)于樣本的潛在數(shù)據(jù)分布沒(méi)有任何假定,能夠描述出樣本的離散情況,且對(duì)樣本中包含的潛在異常樣本有較高的容忍度。對(duì)于有偏數(shù)據(jù),Boxplot進(jìn)行校準(zhǔn)后建模更加符合數(shù)據(jù)分布[7]。
7.3 極值理論
真實(shí)世界的數(shù)據(jù)很難用一種已知的分布來(lái)概括,例如對(duì)于某些極端事件(異常),概率模型(例如高斯分布)往往會(huì)給出其概率為0。極值理論[8]是在不基于原始數(shù)據(jù)的任何分布假設(shè)下,通過(guò)推斷我們可能會(huì)觀(guān)察到的極端事件的分布,這就是極值分布(EVD)。其數(shù)學(xué)表達(dá)式如下(互補(bǔ)累積分布函數(shù)公式):其中t代表樣本的經(jīng)驗(yàn)閾值,對(duì)于不同場(chǎng)景可以設(shè)置不同取值,,分別是廣義帕累托分布中的形狀參數(shù)與尺度參數(shù),在給定樣本超過(guò)人為設(shè)定的經(jīng)驗(yàn)閾值t的情況下,隨機(jī)變量X-t是服從廣義帕累托分布的。通過(guò)極大似然估計(jì)方法我們可以計(jì)算獲得參數(shù)估計(jì)值與 ,并且通過(guò)如下公式來(lái)求取模型閾值: 上述公式中q代表風(fēng)險(xiǎn)參數(shù),n是所有樣本數(shù)量,Nt是滿(mǎn)足x-t>0的樣本數(shù)量。由于通常情況下對(duì)于經(jīng)驗(yàn)閾值t的估計(jì)沒(méi)有先驗(yàn)的信息,因此可以使用樣本經(jīng)驗(yàn)分位數(shù)來(lái)替代數(shù)值t,這里經(jīng)驗(yàn)分位數(shù)的取值可以根據(jù)實(shí)際情況來(lái)選擇。
審核編輯:湯梓紅
-
算法
+關(guān)注
關(guān)注
23文章
4587瀏覽量
92500 -
AI
+關(guān)注
關(guān)注
87文章
29805瀏覽量
268102 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3752瀏覽量
64229
原文標(biāo)題:基于AI算法的數(shù)據(jù)庫(kù)異常監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論