云計(jì)算基礎(chǔ)知識歸納_第1頁
云計(jì)算基礎(chǔ)知識歸納_第2頁
云計(jì)算基礎(chǔ)知識歸納_第3頁
云計(jì)算基礎(chǔ)知識歸納_第4頁
云計(jì)算基礎(chǔ)知識歸納_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、由于云計(jì)算分為 IaaS、PaaS 和 SaaS三種類型,不同的廠家又提供了不同的解決方案,目前 還沒有一個統(tǒng)一的技術(shù)體系結(jié)構(gòu), 對讀者了解云計(jì)算的原理構(gòu)成了障礙。 為此, 本文綜合不 同廠家的方案, 構(gòu)造了一個供商榷的云計(jì)算體系結(jié)構(gòu)。 這個體系結(jié)構(gòu)如圖 3 所示, 它概括了 不同解決方案的主要特征, 每一種方案或許只實(shí)現(xiàn)了其中部分功能, 或許也還有部分相對次 要功能尚未概括進(jìn)來。圖 3 云計(jì)算技術(shù)體系結(jié)構(gòu) 云計(jì)算技術(shù)體系結(jié)構(gòu)分為 4 層:物理資源層、資源池層、管理中間件層和 SOA 構(gòu)建層,如 圖 3 所示。物理資源層包括計(jì)算機(jī)、存儲器、網(wǎng)絡(luò)設(shè)施、數(shù)據(jù)庫和軟件等;資源池層是將大 量相同類型的

2、資源構(gòu)成同構(gòu)或接近同構(gòu)的資源池, 如計(jì)算資源池、 數(shù)據(jù)資源池等。 構(gòu)建資源 池更多是物理資源的集成和管理工作,例如研究在一個標(biāo)準(zhǔn)集裝箱的空間如何裝下 2000 個 服務(wù)器、 解決散熱和故障節(jié)點(diǎn)替換的問題并降低能耗; 管理中間件負(fù)責(zé)對云計(jì)算的資源進(jìn)行 管理,并對眾多應(yīng)用任務(wù)進(jìn)行調(diào)度,使資源能夠高效、安全地為應(yīng)用提供服務(wù); SOA 構(gòu)建 層將云計(jì)算能力封裝成標(biāo)準(zhǔn)的 Web Services 服務(wù),并納入到 SOA體系進(jìn)行管理和使用,包 括服務(wù)注冊、 查找、 訪問和構(gòu)建服務(wù)工作流等。 管理中間件和資源池層是云計(jì)算技術(shù)的最關(guān) 鍵部分, SOA 構(gòu)建層的功能更多依靠外部設(shè)施提供。云計(jì)算的管理中間件負(fù)責(zé)資

3、源管理、 任務(wù)管理、 用戶管理和安全管理等工作。 資源管理負(fù)責(zé) 均衡地使用云資源節(jié)點(diǎn), 檢測節(jié)點(diǎn)的故障并試圖恢復(fù)或屏蔽之, 并對資源的使用情況進(jìn)行監(jiān) 視統(tǒng)計(jì);任務(wù)管理負(fù)責(zé)執(zhí)行用戶或應(yīng)用提交的任務(wù),包括完成用戶任務(wù)映象(Image) 的部署和管理、任務(wù)調(diào)度、 任務(wù)執(zhí)行、 任務(wù)生命期管理等等;用戶管理是實(shí)現(xiàn)云計(jì)算商業(yè)模式的一 個必不可少的環(huán)節(jié), 包括提供用戶交互接口、 管理和識別用戶身份、 創(chuàng)建用戶程序的執(zhí)行環(huán) 境、對用戶的使用進(jìn)行計(jì)費(fèi)等; 安全管理保障云計(jì)算設(shè)施的整體安全, 包括身份認(rèn)證、 訪問 授權(quán)、綜合防護(hù)和安全審計(jì)等?;谏鲜鲶w系結(jié)構(gòu),本文以 IaaS云計(jì)算為例,簡述云計(jì)算的實(shí)現(xiàn)機(jī)制,如圖

4、 4 所示。 用戶交互接口向應(yīng)用以 Web Services 方式提供訪問接口, 獲取用戶需求。 服務(wù)目錄是用戶可 以訪問的服務(wù)清單。 系統(tǒng)管理模塊負(fù)責(zé)管理和分配所有可用的資源, 其核心是負(fù)載均衡。 配 置工具負(fù)責(zé)在分配的節(jié)點(diǎn)上準(zhǔn)備任務(wù)運(yùn)行環(huán)境。 監(jiān)視統(tǒng)計(jì)模塊負(fù)責(zé)監(jiān)視節(jié)點(diǎn)的運(yùn)行狀態(tài), 并 完成用戶使用節(jié)點(diǎn)情況的統(tǒng)計(jì)。 執(zhí)行過程并不復(fù)雜: 用戶交互接口允許用戶從目錄中選取并 調(diào)用一個服務(wù)。 該請求傳遞給系統(tǒng)管理模塊后, 它將為用戶分配恰當(dāng)?shù)馁Y源, 然后調(diào)用配置 工具來為用戶準(zhǔn)備運(yùn)行環(huán)境。Hadoop HDFS 特性簡介一、設(shè)計(jì)思想1、硬件失效是“常態(tài)事件“,而非“偶然事件”。HDFS可能是有上千

5、的機(jī)器組成(文檔中描述的 Yahoo!一個 Hadoop集群有 4096 個節(jié)點(diǎn)),任何一個組件都有可能一直失效,因此 數(shù)據(jù)的健壯性錯誤檢測和快速、自動的恢復(fù)是HDFS的核心架構(gòu)目標(biāo)。2、流式數(shù)據(jù)訪問。 運(yùn)行在 HDFS上的應(yīng)用和普通的應(yīng)用不同, 需要流式訪問它們的數(shù)據(jù)集。 HDFS的設(shè)計(jì)中更多的考慮到了數(shù)據(jù)批處理,而不是用戶交互處理。比之?dāng)?shù)據(jù)訪問的低延遲 問題,更關(guān)鍵的在于數(shù)據(jù)并發(fā)訪問的高吞吐量。 POSIX標(biāo)準(zhǔn)設(shè)置的很多硬性約束對 HDFS應(yīng) 用系統(tǒng)不是必需的。為了提高數(shù)據(jù)的吞吐量,在一些關(guān)鍵方面對 POSIX 的語義做了一些修 改。3、HDFS 應(yīng)用對文件要求的是 write-one-r

6、ead-many 訪問模型。一個文件經(jīng)過創(chuàng)建、寫, 關(guān)閉之后就不需要改變。 這一假設(shè)簡化了數(shù)據(jù)一致性問題, 使高吞吐量的數(shù)據(jù)訪問成為可能。 典型的如 MapReduce框架,或者一個 web crawler 應(yīng)用都很適合這個模型。4、移動計(jì)算的代價比之移動數(shù)據(jù)的代價低。一個應(yīng)用請求的計(jì)算,離它操作的數(shù)據(jù)越近就 越高效, 這在數(shù)據(jù)達(dá)到海量級別的時候更是如此。 將計(jì)算移動到數(shù)據(jù)附近, 比之將數(shù)據(jù)移動 到應(yīng)用所在顯然更好, HDFS提供給應(yīng)用這樣的接口。5、在異構(gòu)的軟硬件平臺間的可移植性。二、Namenode和 Datanode 的劃分一個 HDFS集群有一個 Namenode和一定數(shù)目的 Data

7、node 組成。Namenode是一個中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的namespace 和客戶端對文件的訪問。Datanode 在集群中會有多個,一般是一個節(jié)點(diǎn)存在一個,負(fù)責(zé)管理其自身節(jié)點(diǎn)上它們附帶 的存儲。在內(nèi)部,一個大文件其分成一個或多個 block ,這些 block 存儲在 Datanode 集合 里。 Namenode執(zhí)行文件系統(tǒng)的 namespace 相關(guān)操作,例如打開、關(guān)閉、重命名文件和目錄, 同時決定了 block 到具體 Datanode 節(jié)點(diǎn)的映射。 Datanode 在 Namenode的指揮下進(jìn)行 block 的創(chuàng)建、刪除和復(fù)制。單一節(jié)點(diǎn)的 Namenode大大簡化了系

8、統(tǒng)的架構(gòu)。 Namenode負(fù)責(zé)保管和管理所有的 HDFS元數(shù) 據(jù),因而在請求 Namenode得到文件的位置后就不需要通過Namenode參與而直接從 Datanode進(jìn)行。為了提高 Namenode的性能,所有文件的 namespace 數(shù)據(jù)都在內(nèi)存中維護(hù),所以就天生存在 了由于內(nèi)存大小的限制導(dǎo)致一個 HDFS集群的提供服務(wù)的文件數(shù)量的上限。根據(jù)目前的文檔,一個元數(shù)據(jù)(一個HDFS文件塊兒)占用 200Bytes ,如果是頁面抓取的小文件,那么 32GB內(nèi)存能承載 1.5 億左右的文件存儲(有待精確詳細(xì)測試)。三、文件系統(tǒng)操作和 namespace 的關(guān)系 HDFS支持傳統(tǒng)的層次型文件組織

9、,與大多數(shù)其他文件系統(tǒng)類似,用戶可以創(chuàng)建目錄,并在 其間創(chuàng)建、刪除、移動和重命名文件。 HDFS不支持 user quotas 和訪問權(quán)限,也不支持鏈 接( link) ,不過當(dāng)前的架構(gòu)并不排除實(shí)現(xiàn)這些特性。 Namenode維護(hù)文件系統(tǒng)的 namespace, 任何對文件系統(tǒng) namespace 和文件屬性的修改都將被 Namenode記錄下來。應(yīng)用可以設(shè)置 HDFS保存的文件的副本數(shù)目,文件副本的數(shù)目稱為文件的replication 因子,這個信息也是由 Namenode保存。四、數(shù)據(jù)復(fù)制 HDFS被設(shè)計(jì)成在一個大集群中可以跨機(jī)器地可靠地存儲海量的文件。它將每個文件存儲成 block 序列

10、,除了最后一個 block ,所有的 block 都是同樣的大小。文件的所有 block 為了 容錯都會被復(fù)制。每個文件的 block 大小和 replication 因子都是可配置的。 Replication 因子可以在文件創(chuàng)建的時候配置, 以后也可以改變。 HDFS中的文件是 write-one ,并且嚴(yán)格 要求在任何時候只有一個 writer 。 Namenode全權(quán)管理 block 的復(fù)制,它周期性地從集群中 的每個 Datanode 接收心跳包和一個 Blockreport 。心跳包的接收表示該 Datanode 節(jié)點(diǎn)正常 工作,而 Blockreport 包括了該 Datanode

11、 上所有的 block 組成的列表。1、副本的存放,副本的存放是 HDFS可靠性和性能的關(guān)鍵。龐大的 HDFS實(shí)例一般運(yùn)行在多 個機(jī)架的計(jì)算機(jī)形成的集群上, 不同機(jī)架間的兩臺機(jī)器的通訊需要通過交換機(jī), 顯然通常情 況下,同一個機(jī)架內(nèi)的兩個節(jié)點(diǎn)間的帶寬會比不同機(jī)架間的兩臺機(jī)器的帶寬大。在大多數(shù)情況下, replication 因子是 3,HDFS的存放策略是將一個副本存放在本地機(jī)架上 的節(jié)點(diǎn),一個副本放在同一機(jī)架上的另一個節(jié)點(diǎn), 最后一個副本放在不同機(jī)架上的一個節(jié)點(diǎn)。 機(jī)架的錯誤遠(yuǎn)遠(yuǎn)比節(jié)點(diǎn)的錯誤少, 這個策略不會影響到數(shù)據(jù)的可靠性和有效性。 三分之一的 副本在一個節(jié)點(diǎn)上, 三分之二在一個機(jī)架上,

12、 其他保存在剩下的機(jī)架中, 這一策略改進(jìn)了寫 的性能。2、副本的選擇,為了降低整體的帶寬消耗和讀延時,HDFS會盡量讓 reader 讀最近的副本。如果在 reader 的同一個機(jī)架上有一個副本, 那么就讀該副本。 如果一個 HDFS集群跨越多個 數(shù)據(jù)中心,那么 reader 也將首先嘗試讀本地?cái)?shù)據(jù)中心的副本。3、SafeModeNamenode啟動后會進(jìn)入一個稱為 SafeMode 的特殊狀態(tài),處在這個狀態(tài)的 Namenode是不會 進(jìn)行數(shù)據(jù)塊的復(fù)制的。 Namenode從所有的 Datanode 接收心跳包和 Blockreport 。 Blockreport 包括了某個 Datanode

13、 所有的數(shù)據(jù)塊列表。每個 block 都有指定的最小數(shù)目的 副本。當(dāng) Namenode檢測確認(rèn)某個 Datanode 的數(shù)據(jù)塊副本的最小數(shù)目,那么該 Datanode 就 會被認(rèn)為是安全的; 如果一定百分比 (這個參數(shù)可配置) 的數(shù)據(jù)塊檢測確認(rèn)是安全的, 那么 Namenode將退出 SafeMode 狀態(tài),接下來它會確定還有哪些數(shù)據(jù)塊的副本沒有達(dá)到指定數(shù)目, 并將這些 block 復(fù)制到其他 Datanode 。五、文件系統(tǒng)元數(shù)據(jù)的持久化Namenode存儲 HDFS的元數(shù)據(jù)。 對于任何對文件元數(shù)據(jù)產(chǎn)生修改的操作,Namenode都使用一個稱為 Editlog 的事務(wù)日志記錄下來。例如,在H

14、DFS中創(chuàng)建一個文件, Namenode就會在Editlog 中插入一條記錄來表示; 同樣,修改文件的 replication 因子也將往 Editlog 插入 一條記錄。 Namenode在本地 OS的文件系統(tǒng)中存儲這個 Editlog 。整個文件系統(tǒng)的 namespace, 包括 block 到文件的映射、 文件的屬性, 都存儲在稱為 FsImage 的文件中, 這個文件也是放 在 Namenode所在系統(tǒng)的文件系統(tǒng)上。Namenode在內(nèi)存中保存著整個文件系統(tǒng) namespace 和文件 Blockmap 的映像。 這個關(guān)鍵的元 數(shù)據(jù)設(shè)計(jì)得很緊湊,一般為 200Bytes 的內(nèi)存占用,因

15、而一個帶有 4G內(nèi)存的 Namenode 足夠 支撐海量的文件和目錄。當(dāng) Namenode啟動時,它從硬盤中讀取 Editlog 和 FsImage,將所 有 Editlog 中的事務(wù)作用( apply) 在內(nèi)存中的 FsImage ,并將這個新版本的 FsImage 從內(nèi) 存中 flush 到硬盤上 , 然后再 truncate 這個舊的 Editlog ,因?yàn)檫@個舊的 Editlog 的事務(wù)都 已經(jīng)作用在 FsImage 上了。這個過程稱為 checkpoint 。在當(dāng)前實(shí)現(xiàn)中, checkpoint 只發(fā)生 在 Namenode啟動時,在不久的將來我們將實(shí)現(xiàn)支持周期性的checkpoin

16、t 。Datanode 并不知道關(guān)于文件的任何東西,除了將文件中的數(shù)據(jù)保存在本地的文件系統(tǒng)上。 它把每個 HDFS數(shù)據(jù)塊存儲在本地文件系統(tǒng)上隔離的文件中。Datanode 并不在同一個目錄創(chuàng)建所有的文件, 相反, 它用啟發(fā)式地方法來確定每個目錄的最佳文件數(shù)目, 并且在適當(dāng)?shù)?時候創(chuàng)建子目錄。 在同一個目錄創(chuàng)建所有的文件不是最優(yōu)的選擇, 因?yàn)楸镜匚募到y(tǒng)可能無 法高效地在單一目錄中支持大量的文件。當(dāng)一個 Datanode 啟動時,它掃描本地文件系統(tǒng), 對這些本地文件產(chǎn)生相應(yīng)的一個所有HDFS數(shù)據(jù)塊的列表,然后發(fā)送報告到 Namenode,這個報告就是 Blockreport 。六、通訊協(xié)議所有的

17、 HDFS通訊協(xié)議都是構(gòu)建在 TCP/IP 協(xié)議上。客戶端通過一個可配置的端口連接到 Namenode,通過 ClientProtocol 與 Namenode 交互。而 Datanode 是使用 DatanodeProtocol 與 Namenode交互。從 ClientProtocol 和 Datanodeprotocol 抽象出一個遠(yuǎn)程調(diào)用 (RPC), 在設(shè)計(jì)上, Namenode不會主動發(fā)起 RPC,而是是響應(yīng)來自客戶端和 Datanode 的 RPC請求。七、健壯性HDFS的主要目標(biāo)就是實(shí)現(xiàn)在失敗情況下的數(shù)據(jù)存儲可靠性。常見的三種失?。篘amenodefailures, Datan

18、ode failures和網(wǎng)絡(luò)分割( network partitions)。1、硬盤數(shù)據(jù)錯誤、心跳檢測和重新復(fù)制每個 Datanode 節(jié)點(diǎn)都向 Namenode周期性地發(fā)送心跳包。 網(wǎng)絡(luò)切割可能導(dǎo)致一部分 Datanode 跟 Namenode失去聯(lián)系。 Namenode 通過心跳包的缺失檢測到這一情況,并將這些Datanode標(biāo)記為 dead,不會將新的 IO 請求發(fā)給它們。寄存在 dead Datanode 上的任何數(shù)據(jù)將不再有 效。 Datanode 的死亡可能引起一些 block 的副本數(shù)目低于指定值, Namenode不斷地跟蹤需 要復(fù)制的 block ,在任何需要的情況下啟動復(fù)

19、制。在下列情況可能需要重新復(fù)制:某個 Datanode 節(jié)點(diǎn)失效, 某個副本遭到損壞, Datanode 上的硬盤錯誤, 或者文件的 replication 因子增大。2、集群均衡HDFS支持?jǐn)?shù)據(jù)的均衡計(jì)劃,如果某個 Datanode 節(jié)點(diǎn)上的空閑空間低于特定的臨界點(diǎn),那么 就會啟動一個計(jì)劃自動地將數(shù)據(jù)從一個 Datanode 搬移到空閑的 Datanode 。當(dāng)對某個文件的 請求突然增加, 那么也可能啟動一個計(jì)劃創(chuàng)建該文件新的副本, 并分布到集群中以滿足應(yīng)用 的要求。這些均衡計(jì)劃目前還沒有實(shí)現(xiàn)。3、數(shù)據(jù)完整性從某個 Datanode 獲取的數(shù)據(jù)塊有可能是損壞的, 這個損壞可能是由于 Data

20、node 的存儲設(shè)備 錯誤、網(wǎng)絡(luò)錯誤或者軟件 bug 造成的。 HDFS客戶端軟件實(shí)現(xiàn)了 HDFS文件內(nèi)容的校驗(yàn)和。當(dāng) 某個客戶端創(chuàng)建一個新的 HDFS文件,會計(jì)算這個文件每個 block 的校驗(yàn)和,并作為一個單 獨(dú)的隱藏文件保存這些校驗(yàn)和在同一個HDFS namespace下。當(dāng)客戶端檢索文件內(nèi)容,它會 確認(rèn)從 Datanode 獲取的數(shù)據(jù)跟相應(yīng)的校驗(yàn)和文件中的校驗(yàn)和是否匹配,如果不匹配,客戶 端可以選擇從其他 Datanode 獲取該 block 的副本。4、元數(shù)據(jù)磁盤錯誤FsImage 和 Editlog 是 HDFS的核心數(shù)據(jù)結(jié)構(gòu)。這些文件如果損壞了,整個HDFS實(shí)例都將失效。因而,

21、Namenode可以配置成支持維護(hù)多個 FsImage 和 Editlog 的拷貝。 任何對 FsImage 或者 Editlog 的修改,都將同步到它們的副本上。這個同步操作可能會降低Namenode 每秒能支持處理的 namespace 事務(wù)。這個代價是可以接受的,因?yàn)镠DFS是數(shù)據(jù)密集的,而非元數(shù)據(jù)密集。當(dāng) Namenode重啟的時候,它總是選取最近的一致的FsImage 和 Editlog 使用。Namenode在 HDFS是單點(diǎn)存在,如果 Namenode所在的機(jī)器錯誤,手工的干預(yù)是必須的。目 前,在另一臺機(jī)器上重啟因故障而停止服務(wù)的Namenode這個功能還沒實(shí)現(xiàn)。八、數(shù)據(jù)組織1、

22、數(shù)據(jù)塊兼容 HDFS的應(yīng)用都是處理大數(shù)據(jù)集合的。這些應(yīng)用都是寫數(shù)據(jù)一次,讀卻是一次到多次, 并且讀的速度要滿足流式讀。 HDFS支持文件的 write-once , read-many 。一個典型的 block 大小是 64MB,因而,文件總是按照 64M切分成 chunk ,每個 chunk 存儲于不同的 Datanode 上。2、數(shù)據(jù)產(chǎn)生步驟 某個客戶端創(chuàng)建文件的請求其實(shí)并沒有立即發(fā)給Namenode,事實(shí)上, HDFS客戶端會將文件數(shù)據(jù)緩存到本地的一個臨時文件。 應(yīng)用的寫被透明地重定向到這個臨時文件。 當(dāng)這個臨時文 件累積的數(shù)據(jù)超過一個 block 的大?。J(rèn) 64M),客戶端才會聯(lián)系

23、 Namenode。 Namenode將 文件名插入文件系統(tǒng)的層次結(jié)構(gòu)中,并且分配一個數(shù)據(jù)塊給它,然后返回 Datanode 的標(biāo)識 符和目標(biāo)數(shù)據(jù)塊給客戶端??蛻舳藢⒈镜嘏R時文件 flush 到指定的 Datanode 上。當(dāng)文件關(guān) 閉時,在臨時文件中剩余的沒有 flush 的數(shù)據(jù)也會傳輸?shù)街付ǖ?Datanode ,然后客戶端告 訴 Namenode文件已經(jīng)關(guān)閉。此時 Namenode才將文件創(chuàng)建操作提交到持久存儲。如果 Namenode在文件關(guān)閉前掛了,該文件將丟失。上述方法是對通過對 HDFS上運(yùn)行的目標(biāo)應(yīng)用認(rèn)真考慮的結(jié)果。如果不采用客戶端緩存,由 于網(wǎng)絡(luò)速度和網(wǎng)絡(luò)堵塞會對吞估量造成比較大的影響。3、數(shù)據(jù)塊復(fù)制當(dāng)某個客戶端向 HDFS文件寫數(shù)據(jù)的時候,一開始是寫入本地臨時文件,假設(shè)該文件的 replication 因子設(shè)置為 3,那么客戶端會從 Namenode 獲取一張 Datanode 列表來存放副本。 然后客戶端開始向第一個 Datanode 傳輸數(shù)據(jù),第一個 Datanode 一小部分一小部分( 4kb) 地接收數(shù)據(jù),將每個部分寫入本地倉庫,并且同時傳輸該部分到第二個 Datanode 節(jié)點(diǎn)。第 二個 Datanode 也是這樣,邊收邊傳,一小部分一小部分地收,存儲在本

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論