




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、軟件架構(gòu)質(zhì)量評(píng)估方案1質(zhì)量屬性在系統(tǒng)設(shè)計(jì)和開發(fā)過(guò)程中,我們比擬容易關(guān)注系統(tǒng)的功能維 度,例如有沒(méi)有實(shí)現(xiàn)預(yù)期功能,輸入?yún)?shù)和輸出參數(shù)是否匹配等 等,這是比擬容易衡量的。但是我們不能就此止步,因?yàn)闈M足功能是系統(tǒng)的基本要求, 還需要關(guān)注系統(tǒng)的非功能維度,例如系統(tǒng)性能是否優(yōu)秀,代碼可 擴(kuò)展性如何,出現(xiàn)異常是否可以自動(dòng)降級(jí)等等,這些指標(biāo)決定了 系統(tǒng)能否提供高質(zhì)量的服務(wù)。我之前在文章結(jié)構(gòu)化思維如何指導(dǎo)技術(shù)系統(tǒng)優(yōu)化提到了 三個(gè)質(zhì)量屬性:高性能、高可用、高擴(kuò)展。本文我們可以充實(shí)為 六個(gè)質(zhì)量屬性:性能、可用性、可修改性、可靠性、平安性、易 用性。性能單位時(shí)間內(nèi)可以做多少事情,做完單位數(shù)量的事情需要多長(zhǎng)時(shí)間口用性
2、系統(tǒng)正常運(yùn)行時(shí)間占總運(yùn)行時(shí)間的比例可修改性可擴(kuò)展性系統(tǒng)擴(kuò)展新構(gòu)件時(shí)對(duì)其它構(gòu)件的影響程度可維護(hù)性系統(tǒng)修改舊構(gòu)件時(shí)對(duì)具它構(gòu)件的影響程度結(jié)構(gòu)重組重新組織構(gòu)件關(guān)系的難易程度可移植性在不同硬件平臺(tái)、編程語(yǔ)言、操作系統(tǒng)間移植的難易程度可靠性容錯(cuò)性和健壯性,系統(tǒng)面對(duì)錯(cuò)誤輸入仍能保證正確輸出的能力平安性系統(tǒng)防止非法用戶訪問(wèn)的能力易用性系統(tǒng)使用的難易程度(7)出現(xiàn)異常引導(dǎo)用戶至錯(cuò)誤頁(yè)面,不能展示異常棧信息(8)對(duì)于球員信息配置功能的靈活度尚未達(dá)成共識(shí),影響了 系統(tǒng)可修改性(9)對(duì)于球員比賽實(shí)時(shí)收集響應(yīng)時(shí)間的要求,影響了系統(tǒng)數(shù) 據(jù)存儲(chǔ)設(shè)計(jì)(10)主教練提出了訓(xùn)練指標(biāo)新模式,影響了系統(tǒng)性能和可 修改性根據(jù)上述場(chǎng)景生
3、成質(zhì)量屬性效用樹,(1)屬于性能,(2)(3) 屬性可用性,(4)屬于可修改性,(5)屬于平安性,(6)屬于易用 性,(7)屬于可靠性:我們?cè)俑鶕?jù)這些場(chǎng)景分析系統(tǒng)的風(fēng)險(xiǎn)點(diǎn)、敏感點(diǎn)、權(quán)衡點(diǎn)。 風(fēng)險(xiǎn)點(diǎn)是指某些操作會(huì)給系統(tǒng)帶來(lái)隱患和風(fēng)險(xiǎn),(8)屬于風(fēng)險(xiǎn)點(diǎn)。 敏感點(diǎn)是指為了實(shí)現(xiàn)某個(gè)特定質(zhì)量屬性,一個(gè)或多個(gè)系統(tǒng)組件所 具有的特性,(9)屬于敏感點(diǎn)。權(quán)衡點(diǎn)是指某些操作會(huì)影響系統(tǒng) 的多個(gè)質(zhì)量屬性,(10)屬于權(quán)衡點(diǎn)。第三個(gè)階段是測(cè)試階段,根據(jù)足球運(yùn)發(fā)動(dòng)信息管理系統(tǒng)特性, 我們首先確定場(chǎng)景優(yōu)先級(jí),由高到低分別是:性能、可靠性、可 修改性、平安性、可用性、易用性。架構(gòu)權(quán)衡分析方法所謂權(quán)衡在此得到了表達(dá),質(zhì)量屬性
4、每個(gè) 都很重要,但是根據(jù)系統(tǒng)特點(diǎn)需要對(duì)質(zhì)量屬性有優(yōu)先級(jí)排序,架 構(gòu)設(shè)計(jì)時(shí)需要所有權(quán)衡和折中。確定了優(yōu)先級(jí)之后,我們需要具體闡述針對(duì)每個(gè)質(zhì)量屬性系 統(tǒng)采取了哪些方案,例如提升性能使用了緩存,提升可修改性使 用了策略模式,提升可靠性使用了統(tǒng)一異常處理框架等等,具體 方案可以參考本文第一章節(jié)。第四個(gè)階段是報(bào)告階段,我們將評(píng)估過(guò)程和結(jié)果都匯總整理 成文檔,其中包括質(zhì)量屬性效用樹、風(fēng)險(xiǎn)點(diǎn)、敏感點(diǎn)、權(quán)衡點(diǎn)和 每次評(píng)估會(huì)議紀(jì)要,以及最終的架構(gòu)決策。3文章總結(jié)第一系統(tǒng)滿足功能性需求是最基本的要求,作為架構(gòu)師不能 就此止步,不僅應(yīng)該關(guān)注功能性需求,還應(yīng)該關(guān)注非功能性需求, 質(zhì)量屬性就是衡量系統(tǒng)質(zhì)量的重要指標(biāo)。第
5、二架構(gòu)評(píng)估方法分為基于問(wèn)卷、基于度量、基于場(chǎng)景的方 式,目前業(yè)內(nèi)較為流行的是基于場(chǎng)景的評(píng)估方法,ATAM是一種優(yōu) 秀的基于場(chǎng)景評(píng)估方法。第三ATAM以質(zhì)量屬性效用樹為核心,幫助架構(gòu)師識(shí)別工程風(fēng)險(xiǎn)點(diǎn)、敏感點(diǎn)、權(quán)衡點(diǎn),指導(dǎo)架構(gòu)師做出合理架構(gòu)決策。性能如何定義性能有兩個(gè)定義維度:第一個(gè)維度是單位時(shí)間內(nèi)可以做多少 事情,第二個(gè)維度是做完單位數(shù)量的事情需要多少時(shí)間,常用以 下參數(shù)進(jìn)行量化:QPS:每秒處理請(qǐng)求數(shù)TPS:每秒處理事務(wù)數(shù)并發(fā)數(shù):同一時(shí)刻處理請(qǐng)求數(shù)/事務(wù)數(shù)響應(yīng)時(shí)間:系統(tǒng)對(duì)請(qǐng)求做出響應(yīng)的時(shí)間并發(fā)數(shù)二QPS x RT1.2如何提升提升性能可以從兩個(gè)維度思考,第一個(gè)維度是時(shí)間維度,從 事前、事中、事
6、后三個(gè)時(shí)間節(jié)點(diǎn)進(jìn)行優(yōu)化。事前是指在訪問(wèn)最開 始就拒絕無(wú)效流量。事中可以使用提高并發(fā)度(并發(fā)編程),增 加資源(服務(wù)器、分布式緩存、讀寫別離,分庫(kù)分表),減少交互 (批量請(qǐng)求)等方案。事后是指數(shù)據(jù)分析需求可以放到離線數(shù)據(jù) 中心進(jìn)行,不要放在主應(yīng)用和主數(shù)據(jù)庫(kù)進(jìn)行。第二個(gè)維度是層次維度,每一層都可以進(jìn)行優(yōu)化。系統(tǒng)架構(gòu) 一般分為數(shù)據(jù)層、緩存層、服務(wù)層、網(wǎng)關(guān)層、客戶端、代理層, 每一層都可以進(jìn)行優(yōu)化,每一層都可以按照事前、事中、事后進(jìn) 行優(yōu)化,而不是一提到優(yōu)化就是加緩存,應(yīng)該更加全面地思考。1. 2可用性. 1如何定義可用性是指系統(tǒng)正常運(yùn)行時(shí)間占總運(yùn)行時(shí)間比例,業(yè)界常用X個(gè)9指標(biāo)進(jìn)行量化,例如可用性到達(dá)
7、5個(gè)9,那么全年系統(tǒng)不 可用時(shí)間只有5分鐘:如何提升(1)非線性我們從另一個(gè)概念理解可用性:非線性,這個(gè)概念在生活中 無(wú)處不在。假設(shè)要趕早上8點(diǎn)鐘的火車,如果6:30出發(fā)可以在7:00到 達(dá)車站,所以得到一個(gè)結(jié)論:只要30分鐘就可以到達(dá)車站。如果早上睡晚一點(diǎn)7: 15出發(fā),那么按照預(yù)期7:45可以到達(dá) 車站。但是最可能的結(jié)果是錯(cuò)過(guò)這趟火車。因?yàn)檎糜錾显绺叻?導(dǎo)致至少需要1個(gè)小時(shí)才能到達(dá)車站。我們?cè)俜治鲆粋€(gè)互聯(lián)網(wǎng)秒殺場(chǎng)景。假設(shè)秒殺系統(tǒng)當(dāng)每秒30 個(gè)請(qǐng)求時(shí),響應(yīng)時(shí)間是10毫秒。如果按照線性思維可以做出如 下設(shè)計(jì):每秒30個(gè)訪問(wèn)量響應(yīng)時(shí)間10毫秒每秒300個(gè)訪問(wèn)量響應(yīng)時(shí)間100毫秒每秒3000個(gè)訪
8、問(wèn)量響應(yīng)時(shí)間1000毫秒如果按照這個(gè)思路做系統(tǒng)設(shè)計(jì)將會(huì)發(fā)生重大錯(cuò)誤。因?yàn)楫?dāng)每 秒3000個(gè)訪問(wèn)量發(fā)生時(shí),響應(yīng)時(shí)間可能不是1000毫秒,而是可 能直接導(dǎo)致系統(tǒng)崩潰。這就是非線性,事物不是簡(jiǎn)單線性疊加關(guān)系,當(dāng)?shù)竭_(dá)某個(gè)臨界值時(shí)會(huì)造成一種截然不同的結(jié)果。(2)提升策略冗余+自動(dòng)故障轉(zhuǎn)移最基本的冗余策略就是主從模式。原理是準(zhǔn)備兩臺(tái)機(jī)器,部 署了同一份代碼,在功能層面是相同的,都可以對(duì)外提供相同的 服務(wù)。一臺(tái)機(jī)器啟動(dòng)提供服務(wù),這就是主服務(wù)器。另一臺(tái)機(jī)器啟動(dòng) 在一旁待命,不提供服務(wù),隨時(shí)監(jiān)聽主服務(wù)器的狀態(tài),這就是從 服務(wù)器。當(dāng)發(fā)現(xiàn)主服務(wù)器出現(xiàn)故障時(shí),從服務(wù)器立刻替換主服務(wù) 器,繼續(xù)為用戶提供服務(wù)。自動(dòng)故障轉(zhuǎn)
9、移策略是指當(dāng)主系統(tǒng)發(fā)生異常時(shí),應(yīng)該可以自動(dòng) 探測(cè)到異常,并自動(dòng)切換為備用系統(tǒng)。不應(yīng)該只依靠人工去切換 成,否那么故障處理時(shí)間會(huì)顯著增加。降級(jí)策略當(dāng)系統(tǒng)遇到無(wú)法承受的壓力時(shí),選擇暫時(shí)關(guān)閉一些非關(guān)鍵的 功能,或者延時(shí)提供一些功能,把此刻所有的資源都提供給現(xiàn)在 最關(guān)鍵的服務(wù)。在秒殺場(chǎng)景中下訂單就是最核心最關(guān)鍵的功能。當(dāng)系統(tǒng)壓力 將要到達(dá)臨界值時(shí),可以暫時(shí)先關(guān)閉一些非核心功能如查詢功能。還有一種降級(jí)策略,當(dāng)系統(tǒng)依賴的下游服務(wù)出現(xiàn)錯(cuò)誤,甚至 已經(jīng)完全不可用了,那么此時(shí)就不能再調(diào)用這個(gè)下游服務(wù)了,否那么可能導(dǎo)致雪崩。所以直接返回兜底方案,把下游服務(wù)直接降級(jí)。延時(shí)策略用戶下訂單成功后就需要進(jìn)行支付。假設(shè)秒殺
10、系統(tǒng)下訂單每 秒訪問(wèn)量是3000,有沒(méi)有必要將每秒3000次訪問(wèn)量壓力傳遞給 支付服務(wù)器?答案是沒(méi)有必要。因?yàn)橛脩裘霘⒊晒罂梢陨酝砀犊睿?可以跳轉(zhuǎn)到一個(gè)支付頁(yè)面,提示用戶只要在10分鐘內(nèi)支付完成 即可。這樣流量就被分?jǐn)傊翈追昼?,有效保護(hù)了系統(tǒng)。技術(shù)架構(gòu)還 可以使用消息隊(duì)列做緩沖,讓下游系統(tǒng)根據(jù)處理能力拉取消息。隔離策略物理隔離:應(yīng)用分別部署在不同物理機(jī)、不同機(jī)房,資源之 間不會(huì)互相影響。線程隔離:不同類型的請(qǐng)求進(jìn)行分類,交給不同的線程池處 理,當(dāng)一類請(qǐng)求出現(xiàn)高耗時(shí)和異常,不影響另一類請(qǐng)求訪問(wèn)。1. 3可修改性1. 3. 1如何定義可修改性是指是否能夠以較高的性價(jià)比對(duì)系統(tǒng)進(jìn)行變更的 能力,
11、可以分為以下四種類型:可擴(kuò)展性:系統(tǒng)擴(kuò)展新構(gòu)件時(shí)對(duì)其它構(gòu)件的影響程度可維護(hù)性:系統(tǒng)修改舊構(gòu)件時(shí)對(duì)其它構(gòu)件的影響程度結(jié)構(gòu)重組:重新組織構(gòu)件關(guān)系的難易程度可移植性:在不同硬件平臺(tái)、編程語(yǔ)言、操作系統(tǒng)間移植的難易程度如何提升可修改性最終還是在解決牽一發(fā)而動(dòng)全身的復(fù)雜性問(wèn)題,復(fù) 雜業(yè)務(wù)之所以復(fù)雜,一個(gè)重要原因是涉及角色或者類型較多,如 果平鋪直敘地進(jìn)行設(shè)計(jì)會(huì)出現(xiàn)if-else代碼塊,可讀性和可修改 性都很低。從功能上完全可以實(shí)現(xiàn)業(yè)務(wù)需求,但是程序員不僅要滿足功 能,還需要思考代碼的可維護(hù)性。如果新增一種訂單類型,或者 新增一個(gè)訂單屬性處理邏輯,那么我們就要在上述邏輯中新增代 碼,如果處理不慎就會(huì)影響原
12、有邏輯。為了防止?fàn)恳话l(fā)而動(dòng)全身這種情況,設(shè)計(jì)模式中的開閉原那么 要求我們面向新增開放,面向修改關(guān)閉,我認(rèn)為這是設(shè)計(jì)模式中 最重要的一條原那么。需求變化通過(guò)擴(kuò)展,而不是通過(guò)修改已有代碼實(shí)現(xiàn),這樣就 保證代碼穩(wěn)定性。擴(kuò)展也不是隨意擴(kuò)展,因?yàn)槭孪榷x了算法, 擴(kuò)展也是根據(jù)算法擴(kuò)展,用抽象構(gòu)建框架,用實(shí)現(xiàn)擴(kuò)展細(xì)節(jié)。標(biāo) 準(zhǔn)意義的二十三種設(shè)計(jì)模式說(shuō)到底最終都是在遵循開閉原那么。4可靠性1如何定義可靠性包括容錯(cuò)性和健壯性,系統(tǒng)面對(duì)錯(cuò)誤輸入仍能保證正 確輸出的能力,可以分為兩種類型:系統(tǒng)可靠性和業(yè)務(wù)可靠性。系統(tǒng)可靠性是指面對(duì)出現(xiàn)基本錯(cuò)誤的輸入,系統(tǒng)能夠識(shí)別和 攔截,而不是任由其在構(gòu)件中傳遞,造成錯(cuò)誤數(shù)據(jù)或者引
13、發(fā)系統(tǒng) 異常。例如空值引發(fā)的空指針異常,不應(yīng)該出現(xiàn)在系統(tǒng)中。業(yè)務(wù)可靠性是指輸入?yún)?shù)在基本校驗(yàn)通過(guò)的情況下,系統(tǒng)能 夠進(jìn)行業(yè)務(wù)校驗(yàn),不會(huì)引發(fā)超出業(yè)務(wù)預(yù)期的輸出結(jié)果。例如電商 系統(tǒng)中的超賣現(xiàn)象,重復(fù)創(chuàng)立訂單現(xiàn)象都是業(yè)務(wù)可靠性較低的表 現(xiàn)。如何提升(1)攔截提升可靠性的關(guān)鍵是應(yīng)該盡早在上層識(shí)別并攔截異常數(shù)據(jù), 阻止其在構(gòu)件中流動(dòng),防止產(chǎn)生系統(tǒng)異常和錯(cuò)誤數(shù)據(jù),尤其當(dāng)產(chǎn) 生錯(cuò)誤數(shù)據(jù)后,數(shù)據(jù)修復(fù)難度大。提升系統(tǒng)可靠性可以在服務(wù)入口增加判空校驗(yàn)、參數(shù)類型校 驗(yàn)、范圍校驗(yàn)、合法枚舉值校驗(yàn)等基本校驗(yàn),一旦發(fā)現(xiàn)異常直接 拒絕。提升業(yè)務(wù)可靠性可以增強(qiáng)業(yè)務(wù)校驗(yàn),例如庫(kù)存預(yù)扣減,活動(dòng) 有效期校驗(yàn),參與活動(dòng)次數(shù)校驗(yàn),扣減
14、庫(kù)存校驗(yàn),分布式鎖控制 并發(fā)等方案,如果校驗(yàn)規(guī)那么復(fù)雜可以引入規(guī)那么引擎進(jìn)行條件組合, 不滿足業(yè)務(wù)條件直接拒絕請(qǐng)求。(2)告警如果第一階段沒(méi)有將異常輸入攔截成功,那么就要在發(fā)生異常時(shí)及時(shí)感知,異常分為系統(tǒng)異常和業(yè)務(wù)異常。系統(tǒng)異常是不允許出現(xiàn)的異常,例如空指針,操作數(shù)據(jù)庫(kù)失 敗等異常,一旦出現(xiàn)就要立即告警。業(yè)務(wù)異??梢苑譃橐韵骂愋停簶I(yè)務(wù)異常:?jiǎn)挝粫r(shí)間出現(xiàn)X次需要告警延時(shí)監(jiān)控:某指標(biāo)單位時(shí)間內(nèi)是否變化數(shù)據(jù)監(jiān)控:?jiǎn)挝粫r(shí)間數(shù)據(jù)指標(biāo)是否正常5平安性與易用性平安性是指系統(tǒng)防止非法用戶訪問(wèn)的能力,易用性是指系統(tǒng) 使用的難易程度,本文不展開論述,下一個(gè)章節(jié)會(huì)再提到。2架構(gòu)評(píng)估方法1三種評(píng)估方法因?yàn)樯婕暗奖姸嘧?/p>
15、量和場(chǎng)景,所以評(píng)估一個(gè)復(fù)雜技術(shù)系統(tǒng)的 質(zhì)量并不是一件容易的事情。業(yè)界有以下三種評(píng)估方法:第一是基于問(wèn)卷的方式,通過(guò)問(wèn)卷調(diào)查對(duì)系統(tǒng)比擬熟悉的相 關(guān)人員得到結(jié)論,這種方式主觀性很強(qiáng)。第二是基于度量的方式,對(duì)系統(tǒng)指標(biāo)完全量化,基于量化指 標(biāo)評(píng)價(jià)系統(tǒng),這種方式需要評(píng)估者對(duì)系統(tǒng)非常熟悉。第三種是基于場(chǎng)景的方式,篩選出系統(tǒng)的關(guān)鍵場(chǎng)景,根據(jù)系 統(tǒng)在不同場(chǎng)景中的表現(xiàn)進(jìn)行評(píng)估,這種方式具有一定的主觀性, 需要評(píng)估者對(duì)系統(tǒng)較為熟悉,這也是目前較為流行的架構(gòu)評(píng)估方 法。架構(gòu)權(quán)衡評(píng)估方法(ATAM)全稱是Architecture Tradeoff Analysis Method,由卡梅隆大學(xué)軟件工程協(xié)會(huì)提出,是一種基 于場(chǎng)景的架構(gòu)評(píng)估方法,核心是結(jié)合質(zhì)量屬性效用樹對(duì)系統(tǒng)進(jìn)行 評(píng)價(jià),確定風(fēng)險(xiǎn)點(diǎn)、敏感點(diǎn)、權(quán)衡點(diǎn),并對(duì)系統(tǒng)架構(gòu)做出決策和 折中。ATAM分為以下步驟,其中123為描述和介紹階段,456為調(diào) 查和分析階段,78為測(cè)試階段,9為報(bào)告階段。2 ATAM 實(shí)例本文以結(jié)合DDD講清楚編寫技術(shù)方案的七大維度足球運(yùn) 發(fā)動(dòng)信息管理系統(tǒng)為例看看ATAM如何實(shí)施。第一階段是描述和介紹階段,首先由架構(gòu)師向大家介紹什么 是ATAM方法,其次由產(chǎn)品經(jīng)理介紹開發(fā)足球運(yùn)發(fā)動(dòng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全案整裝合同范例
- 借款合同范本 個(gè)人
- 醫(yī)院保潔服務(wù)合同范本
- 五金合作合同范本
- 中介寄賣合同范本
- 單位廁所裝修合同范本
- 醫(yī)療家具清單購(gòu)買合同范本
- 公司購(gòu)買牛奶購(gòu)銷合同范本
- 出租商用合同范本
- 十三薪標(biāo)準(zhǔn)合同范本
- 中山大學(xué)抬頭信紙中山大學(xué)橫式便箋紙推薦信模板a
- 皮膚性病學(xué)課件:濕疹皮炎
- 無(wú)形資產(chǎn)評(píng)估完整版課件
- 一體化學(xué)工服務(wù)平臺(tái)、人事管理系統(tǒng)、科研管理系統(tǒng)建設(shè)方案
- 市場(chǎng)營(yíng)銷學(xué)課后習(xí)題與答案
- 常暗之廂(7規(guī)則-簡(jiǎn)體修正)
- 10kV變電所設(shè)備檢修內(nèi)容與周期表
- 制冷系統(tǒng)方案的設(shè)計(jì)pptx課件
- 修心七要原文
- 中國(guó)TBHQ行業(yè)市場(chǎng)調(diào)研報(bào)告
- 1資產(chǎn)負(fù)債表變動(dòng)情況的分析評(píng)價(jià)
評(píng)論
0/150
提交評(píng)論