【重識(shí)云原生】第六章容器6.1.7.1節(jié)——Docker核心技術(shù)cgroups綜述

??《重識(shí)云原生系列》專題索引:

  1. 第一章——不謀全局不足以謀一域
  2. 第二章計(jì)算第1節(jié)——計(jì)算虛擬化技術(shù)總述
  3. 第二章計(jì)算第2節(jié)——主流虛擬化技術(shù)之VMare ESXi
  4. 第二章計(jì)算第3節(jié)——主流虛擬化技術(shù)之Xen
  5. 第二章計(jì)算第4節(jié)——主流虛擬化技術(shù)之KVM
  6. 第二章計(jì)算第5節(jié)——商用云主機(jī)方案
  7. 第二章計(jì)算第6節(jié)——裸金屬方案
  8. 第三章云存儲(chǔ)第1節(jié)——分布式云存儲(chǔ)總述
  9. 第三章云存儲(chǔ)第2節(jié)——SPDK方案綜述
  10. 第三章云存儲(chǔ)第3節(jié)——Ceph統(tǒng)一存儲(chǔ)方案
  11. 第三章云存儲(chǔ)第4節(jié)——OpenStack Swift 對(duì)象存儲(chǔ)方案
  12. 第三章云存儲(chǔ)第5節(jié)——商用分布式云存儲(chǔ)方案
  13. 第四章云網(wǎng)絡(luò)第一節(jié)——云網(wǎng)絡(luò)技術(shù)發(fā)展簡(jiǎn)述
  14. 第四章云網(wǎng)絡(luò)4.2節(jié)——相關(guān)基礎(chǔ)知識(shí)準(zhǔn)備
  15. 第四章云網(wǎng)絡(luò)4.3節(jié)——重要網(wǎng)絡(luò)協(xié)議
  16. 第四章云網(wǎng)絡(luò)4.3.1節(jié)——路由技術(shù)簡(jiǎn)述
  17. 第四章云網(wǎng)絡(luò)4.3.2節(jié)——VLAN技術(shù)
  18. 第四章云網(wǎng)絡(luò)4.3.3節(jié)——RIP協(xié)議
  19. 第四章云網(wǎng)絡(luò)4.3.4節(jié)——OSPF協(xié)議
  20. 第四章云網(wǎng)絡(luò)4.3.5節(jié)——EIGRP協(xié)議
  21. 第四章云網(wǎng)絡(luò)4.3.6節(jié)——IS-IS協(xié)議
  22. 第四章云網(wǎng)絡(luò)4.3.7節(jié)——BGP協(xié)議
  23. 第四章云網(wǎng)絡(luò)4.3.7.2節(jié)——BGP協(xié)議概述
  24. 第四章云網(wǎng)絡(luò)4.3.7.3節(jié)——BGP協(xié)議實(shí)現(xiàn)原理
  25. 第四章云網(wǎng)絡(luò)4.3.7.4節(jié)——高級(jí)特性
  26. 第四章云網(wǎng)絡(luò)4.3.7.5節(jié)——實(shí)操
  27. 第四章云網(wǎng)絡(luò)4.3.7.6節(jié)——MP-BGP協(xié)議
  28. 第四章云網(wǎng)絡(luò)4.3.8節(jié)——策略路由
  29. 第四章云網(wǎng)絡(luò)4.3.9節(jié)——Graceful Restart(平滑重啟)技術(shù)
  30. 第四章云網(wǎng)絡(luò)4.3.10節(jié)——VXLAN技術(shù)
  31. 第四章云網(wǎng)絡(luò)4.3.10.2節(jié)——VXLAN Overlay網(wǎng)絡(luò)方案設(shè)計(jì)
  32. 第四章云網(wǎng)絡(luò)4.3.10.3節(jié)——VXLAN隧道機(jī)制
  33. 第四章云網(wǎng)絡(luò)4.3.10.4節(jié)——VXLAN報(bào)文轉(zhuǎn)發(fā)過(guò)程
  34. 第四章云網(wǎng)絡(luò)4.3.10.5節(jié)——VXlan組網(wǎng)架構(gòu)
  35. 第四章云網(wǎng)絡(luò)4.3.10.6節(jié)——VXLAN應(yīng)用部署方案
  36. 第四章云網(wǎng)絡(luò)4.4節(jié)——Spine-Leaf網(wǎng)絡(luò)架構(gòu)
  37. 第四章云網(wǎng)絡(luò)4.5節(jié)——大二層網(wǎng)絡(luò)
  38. 第四章云網(wǎng)絡(luò)4.6節(jié)——Underlay 和 Overlay概念
  39. 第四章云網(wǎng)絡(luò)4.7.1節(jié)——網(wǎng)絡(luò)虛擬化與卸載加速技術(shù)的演進(jìn)簡(jiǎn)述
  40. 第四章云網(wǎng)絡(luò)4.7.2節(jié)——virtio網(wǎng)絡(luò)半虛擬化簡(jiǎn)介
  41. 第四章云網(wǎng)絡(luò)4.7.3節(jié)——Vhost-net方案
  42. 第四章云網(wǎng)絡(luò)4.7.4節(jié)vhost-user方案——virtio的DPDK卸載方案
  43. 第四章云網(wǎng)絡(luò)4.7.5節(jié)vDPA方案——virtio的半硬件虛擬化實(shí)現(xiàn)
  44. 第四章云網(wǎng)絡(luò)4.7.6節(jié)——virtio-blk存儲(chǔ)虛擬化方案
  45. 第四章云網(wǎng)絡(luò)4.7.8節(jié)——SR-IOV方案
  46. 第四章云網(wǎng)絡(luò)4.7.9節(jié)——NFV
  47. 第四章云網(wǎng)絡(luò)4.8.1節(jié)——SDN總述
  48. 第四章云網(wǎng)絡(luò)4.8.2.1節(jié)——OpenFlow概述
  49. 第四章云網(wǎng)絡(luò)4.8.2.2節(jié)——OpenFlow協(xié)議詳解
  50. 第四章云網(wǎng)絡(luò)4.8.2.3節(jié)——OpenFlow運(yùn)行機(jī)制
  51. 第四章云網(wǎng)絡(luò)4.8.3.1節(jié)——Open vSwitch簡(jiǎn)介
  52. 第四章云網(wǎng)絡(luò)4.8.3.2節(jié)——Open vSwitch工作原理詳解
  53. 第四章云網(wǎng)絡(luò)4.8.4節(jié)——OpenStack與SDN的集成
  54. 第四章云網(wǎng)絡(luò)4.8.5節(jié)——OpenDayLight
  55. 第四章云網(wǎng)絡(luò)4.8.6節(jié)——Dragonflow
  56. ?第四章云網(wǎng)絡(luò)4.9.1節(jié)——網(wǎng)絡(luò)卸載加速技術(shù)綜述

  57. 第四章云網(wǎng)絡(luò)4.9.2節(jié)——傳統(tǒng)網(wǎng)絡(luò)卸載技術(shù)

  58. 第四章云網(wǎng)絡(luò)4.9.3.1節(jié)——DPDK技術(shù)綜述

  59. 第四章云網(wǎng)絡(luò)4.9.3.2節(jié)——DPDK原理詳解

  60. 第四章云網(wǎng)絡(luò)4.9.4.1節(jié)——智能網(wǎng)卡SmartNIC方案綜述

  61. 第四章云網(wǎng)絡(luò)4.9.4.2節(jié)——智能網(wǎng)卡實(shí)現(xiàn)

  62. 第六章容器6.1.1節(jié)——容器綜述

  63. 第六章容器6.1.2節(jié)——容器安裝部署

  64. 第六章容器6.1.3節(jié)——Docker常用命令

  65. 第六章容器6.1.4節(jié)——Docker核心技術(shù)LXC

  66. 第六章容器6.1.5節(jié)——Docker核心技術(shù)Namespace

  67. 第六章容器6.1.6節(jié)—— Docker核心技術(shù)Chroot

  68. 第六章容器6.1.7.1節(jié)——Docker核心技術(shù)cgroups綜述

  69. 第六章容器6.1.7.2節(jié)——cgroups原理剖析

  70. 第六章容器6.1.7.3節(jié)——cgroups數(shù)據(jù)結(jié)構(gòu)剖析

  71. 第六章容器6.1.7.4節(jié)——cgroups使用

  72. 第六章容器6.1.8節(jié)——Docker核心技術(shù)UnionFS

  73. 第六章容器6.1.9節(jié)——Docker鏡像技術(shù)剖析

  74. 第六章容器6.1.10節(jié)——DockerFile解析

  75. 第六章容器6.1.11節(jié)——docker-compose容器編排

  76. 第六章容器6.1.12節(jié)——Docker網(wǎng)絡(luò)模型設(shè)計(jì)

  77. 第六章容器6.2.1節(jié)——Kubernetes概述

  78. 第六章容器6.2.2節(jié)——K8S架構(gòu)剖析

  79. 第六章容器6.3.1節(jié)——K8S核心組件總述

  80. 第六章容器6.3.2節(jié)——API Server組件

  81. 第六章容器6.3.3節(jié)——Kube-Scheduler使用篇

  82. 第六章容器6.3.4節(jié)——etcd組件

  83. 第六章容器6.3.5節(jié)——Controller Manager概述

  84. 第六章容器6.3.6節(jié)——kubelet組件

  85. 第六章容器6.3.7節(jié)——命令行工具kubectl

  86. 第六章容器6.3.8節(jié)——kube-proxy

  87. 第六章容器6.4.1節(jié)——K8S資源對(duì)象總覽

  88. 第六章容器6.4.2.1節(jié)——pod詳解

  89. 第六章容器6.4.2.2節(jié)——Pod使用(上)

  90. 第六章容器6.4.2.3節(jié)——Pod使用(下)

  91. 第六章容器6.4.3節(jié)——ReplicationController

  92. 第六章容器6.4.4節(jié)——ReplicaSet組件

  93. 第六章容器基礎(chǔ)6.4.5.1節(jié)——Deployment概述

  94. 第六章容器基礎(chǔ)6.4.5.2節(jié)——Deployment配置詳細(xì)說(shuō)明

  95. 第六章容器基礎(chǔ)6.4.5.3節(jié)——Deployment實(shí)現(xiàn)原理解析

  96. 第六章容器基礎(chǔ)6.4.6節(jié)——Daemonset

  97. 第六章容器基礎(chǔ)6.4.7節(jié)——Job

  98. 第六章容器基礎(chǔ)6.4.8節(jié)——CronJob

1. cgroups概述

1.1 為什么需要cgroup

????????在Linux里,一直以來(lái)就有對(duì)進(jìn)程進(jìn)行分組的概念和需求,比如session group, progress group等,后來(lái)隨著人們對(duì)這方面的需求越來(lái)越多,比如需要追蹤一組進(jìn)程的內(nèi)存和IO使用情況等,于是出現(xiàn)了cgroup,用來(lái)統(tǒng)一將進(jìn)程進(jìn)行分組,并在分組的基礎(chǔ)上對(duì)進(jìn)程進(jìn)行監(jiān)控和資源控制管理等。

1.2 cgroups簡(jiǎn)介

????????cgroups全稱是control groups,是 Linux 內(nèi)核的一個(gè)功能,用來(lái)限制、控制與分離一個(gè)進(jìn)程組的資源(如CPU、內(nèi)存、磁盤(pán)輸入輸出等)。它是由 Google 的兩位工程師進(jìn)行開(kāi)發(fā)的,自 2008 年 1 月正式發(fā)布的 Linux 內(nèi)核 v2.6.24 開(kāi)始提供此能力。cgroups 到目前為止,有兩個(gè)大版本, cgroup v1 和 v2 。cgroup 主要限制的資源是、CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤(pán) I/O。當(dāng)我們將可用系統(tǒng)資源按特定百分比分配給 cgroup 時(shí),剩余的資源可供系統(tǒng)上的其他 cgroup 或其他進(jìn)程使用。

????????cgroup 的作用基本上就是控制一個(gè)進(jìn)程或一組進(jìn)程可以訪問(wèn)或使用給定關(guān)鍵資源(CPU、內(nèi)存、網(wǎng)絡(luò)和磁盤(pán) I/O)的量。一個(gè)容器中通常運(yùn)行了多個(gè)進(jìn)程,并且您需要對(duì)這些進(jìn)程實(shí)施統(tǒng)一控制,因此 cgroup 是容器的關(guān)鍵組件,為容器虛擬化提供了最基本的保證,是構(gòu)建docker一系列虛擬化的管理工具。Kubernetes 環(huán)境使用cgroup 在 pod 級(jí)別上部署資源請(qǐng)求和限制以及對(duì)應(yīng)的 QoS 類(lèi)。

????????下圖說(shuō)明了當(dāng)您將特定比例的可用系統(tǒng)資源分配給一個(gè) cgroup(在本例中,為cgroup?1)后,剩余資源是如何在系統(tǒng)上其他 cgroup(以及各個(gè)進(jìn)程)之間進(jìn)行分配的:

cgroup 資源分配及剩余可用資源示例圖

1.3 cgroups基本概念

????????cgroups主要由task、cgroup、subsystem及hierarchy構(gòu)成:

  • task:在cgroups中,task就是系統(tǒng)的一個(gè)進(jìn)程。
  • control group(簡(jiǎn)寫(xiě):cgroup):控制族群就是按照某種標(biāo)準(zhǔn)劃分的進(jìn)程,包含一個(gè)或多個(gè)子系統(tǒng)。Cgroups 中的資源控制都是以控制族群為單位實(shí)現(xiàn)。一個(gè)進(jìn)程可以加入到某個(gè)控制族群,也可從一個(gè)進(jìn)程組遷移到另一個(gè)控制族群。一個(gè)進(jìn)程組的進(jìn)程可以使用 cgroups 以控制族群為單位分配的資源,同時(shí)受到 cgroups 以控制族群為單位設(shè)定的限制;
  • hierarchy(層級(jí)樹(shù)):控制族群可以組織成 hierarchical 的形式,既一顆控制族群樹(shù)??刂谱迦簶?shù)上的子節(jié)點(diǎn)控制族群是父節(jié)點(diǎn)控制族群的孩子,繼承父控制族群的特定的屬性;hierarchy由一系列cgroup以一個(gè)樹(shù)狀結(jié)構(gòu)排列而成,每個(gè)hierarchy通過(guò)綁定對(duì)應(yīng)的subsystem進(jìn)行資源調(diào)度;hierarchy中的cgroup節(jié)點(diǎn)可以包含零或多個(gè)子節(jié)點(diǎn),子節(jié)點(diǎn)繼承父節(jié)點(diǎn)的屬性;整個(gè)系統(tǒng)可以有多個(gè)hierarchy。
  • subsystem:Cgroups中的subsystem就是一個(gè)資源調(diào)度控制器(Resource Controller),比如CPU子系統(tǒng)可以控制CPU時(shí)間分配,內(nèi)存子系統(tǒng)可以限制cgroup內(nèi)存使用量;子系統(tǒng)必須附加(attach)到一個(gè)層級(jí)上才能起作用,一個(gè)子系統(tǒng)附加到某個(gè)層級(jí)以后,這個(gè)層級(jí)上的所有控制族群都受到這個(gè)子系統(tǒng)的控制。但是資源調(diào)度控制器這個(gè)說(shuō)法也不完全準(zhǔn)確,因?yàn)橛袝r(shí)我們將進(jìn)程分組只是為了做一些監(jiān)控,觀察一下他們的狀態(tài),比如perf_event subsystem。到目前為止,Linux支持12種subsystem,比如限制CPU的使用時(shí)間,限制使用的內(nèi)存,統(tǒng)計(jì)CPU的使用情況,凍結(jié)和恢復(fù)一組進(jìn)程等。

1.3.1 相互關(guān)系

  • 每次在系統(tǒng)中創(chuàng)建新層級(jí)時(shí),該系統(tǒng)中的所有任務(wù)都是那個(gè)層級(jí)的默認(rèn) cgroup(我們稱之為 root cgroup,此 cgroup 在創(chuàng)建層級(jí)時(shí)自動(dòng)創(chuàng)建,后面在該層級(jí)中創(chuàng)建的 cgroup 都是此 cgroup 的后代)的初始成員;
  • 一個(gè)子系統(tǒng)最多只能附加到一個(gè)層級(jí);
  • 一個(gè)層級(jí)可以附加多個(gè)子系統(tǒng);
  • 一個(gè)任務(wù)可以是多個(gè) cgroup 的成員,但是這些 cgroup 必須在不同的層級(jí);
  • 系統(tǒng)中的進(jìn)程(任務(wù))創(chuàng)建子進(jìn)程(任務(wù))時(shí),該子任務(wù)自動(dòng)成為其父進(jìn)程所在 cgroup 的成員。然后可根據(jù)需要將該子任務(wù)移動(dòng)到不同的 cgroup 中,但開(kāi)始時(shí)它總是繼承其父任務(wù)的 cgroup。

????????如圖所示,CPU 和 Memory 兩個(gè)子系統(tǒng)有自己獨(dú)立的層級(jí)系統(tǒng),而又通過(guò) Task Group 取得關(guān)聯(lián)關(guān)系

1.3.2 cgroups子系統(tǒng)

????????cgroups 為每種可以精細(xì)化控制的資源定義了一個(gè)子系統(tǒng),典型的子系統(tǒng)如下:

  • cpu 子系統(tǒng): 主要限制進(jìn)程cpu的使用率(也可以理解為限制分配給cpu的core,最終限制是cpu 利用率的限制;比如一共32core 分配4core ,那這個(gè)進(jìn)程cpu 最大占用率 = 12.5%,所以一個(gè)進(jìn)程可以申請(qǐng)< 1core,因?yàn)樽詈笫寝D(zhuǎn)換成比率來(lái)控制的;
  • cpu 子系統(tǒng),主要限制進(jìn)程的 cpu 使用率。
  • cpuacct 子系統(tǒng):統(tǒng)計(jì)每個(gè)進(jìn)程cpu 使用率的報(bào)告,如果達(dá)到預(yù)定的上限,可以采取一定的措施;
  • cpuset 子系統(tǒng):可以為進(jìn)程分配單獨(dú)的cpu節(jié)點(diǎn)或者mem節(jié)點(diǎn),可以理解為為進(jìn)程分配指定的額cpu占有率,就是精細(xì)化控制cpu資源;
  • memery 子系統(tǒng):可以限制進(jìn)程memery 最大的使用量;
  • blkio 子系統(tǒng):可以限制進(jìn)程訪問(wèn)的塊設(shè)備io;
  • device 子系統(tǒng):可以控制訪問(wèn)的設(shè)備;
  • net_cls 子系統(tǒng):標(biāo)記cgroups 中的網(wǎng)絡(luò)數(shù)據(jù)包,然后可以使用tc模塊(traffice control) 系統(tǒng)對(duì)數(shù)據(jù)包進(jìn)行控制;比如namespace NET 的可以通過(guò)這個(gè)系統(tǒng)讓namespace 內(nèi)進(jìn)程可以獨(dú)立進(jìn)行網(wǎng)絡(luò)通信,功能類(lèi)似于自己?jiǎn)为?dú)的網(wǎng)卡、單獨(dú)的帶寬;
  • net_prio子系統(tǒng):這個(gè)子系統(tǒng)用來(lái)設(shè)計(jì)網(wǎng)絡(luò)流量的優(yōu)先級(jí)
  • freezer 子系統(tǒng),可以stop或者start cgroups 管理的進(jìn)程,就是監(jiān)控進(jìn)程的狀態(tài),如果設(shè)置了一直是start狀態(tài),就去確定環(huán)境是否是ok,如果ok就啟動(dòng)服務(wù);
  • ns子系統(tǒng): 可以控制cgroup的進(jìn)程訪問(wèn)不同的namespace;這個(gè)配合namespace的功能實(shí)現(xiàn)容器的隔離效果;
  • hugetlb子系統(tǒng):這個(gè)子系統(tǒng)主要針對(duì)于HugeTLB系統(tǒng)進(jìn)行限制,這是一個(gè)大頁(yè)文件系統(tǒng)。

????????這里每一個(gè)子系統(tǒng)都需要跟內(nèi)核的其他模塊配合來(lái)完成資源的控制,比如對(duì)cpu資源的控制,需要內(nèi)核的進(jìn)程調(diào)度模塊根據(jù)cpu子系統(tǒng)的配置來(lái)完成;內(nèi)存資源的限制需要內(nèi)核的內(nèi)存模塊根據(jù)memery子系統(tǒng)的配置來(lái)完成。

1.3.3 如何查看當(dāng)前系統(tǒng)支持哪些subsystem

????????可以通過(guò)查看/proc/cgroups(since Linux 2.6.24)知道當(dāng)前系統(tǒng)支持哪些subsystem,下面是一個(gè)例子:

?????????從左到右,字段的含義分別是:

  1. subsystem的名字
  2. subsystem所關(guān)聯(lián)到的cgroup樹(shù)的ID,如果多個(gè)subsystem關(guān)聯(lián)到同一顆cgroup樹(shù),那么他們的這個(gè)字段將一樣,比如這里的cpu和cpuacct就一樣,表示他們綁定到了同一顆樹(shù)。如果出現(xiàn)下面的情況,這個(gè)字段將為0:
    • 當(dāng)前subsystem沒(méi)有和任何cgroup樹(shù)綁定
    • 當(dāng)前subsystem已經(jīng)和cgroup v2的樹(shù)綁定
    • 當(dāng)前subsystem沒(méi)有被內(nèi)核開(kāi)啟
  1. subsystem所關(guān)聯(lián)的cgroup樹(shù)中進(jìn)程組的個(gè)數(shù),也即樹(shù)上節(jié)點(diǎn)的個(gè)數(shù)
  2. 1表示開(kāi)啟,0表示沒(méi)有被開(kāi)啟(可以通過(guò)設(shè)置內(nèi)核的啟動(dòng)參數(shù)“cgroup_disable”來(lái)控制subsystem的開(kāi)啟).

1.4 cgroups提供的功能

  • 限制進(jìn)程組可以使用的資源(Resource limiting ):比如memory子系統(tǒng)可以為進(jìn)程組設(shè)定一個(gè)memory使用上限,進(jìn)程組使用的內(nèi)存達(dá)到限額再申請(qǐng)內(nèi)存,就會(huì)出發(fā)OOM(out of memory)
  • 進(jìn)程組的優(yōu)先級(jí)控制(Prioritization ):比如可以使用cpu子系統(tǒng)為某個(gè)進(jìn)程組分配cpu share
  • 統(tǒng)計(jì)進(jìn)程組使用的資源量(Accounting ):比如使用cpuacct子系統(tǒng)記錄某個(gè)進(jìn)程組使用的cpu時(shí)間
  • 進(jìn)程組隔離(Isolation):比如使用ns子系統(tǒng)可以使不同的進(jìn)程組使用不同的namespace,以達(dá)到隔離的目的,不同的進(jìn)程組有各自的進(jìn)程、網(wǎng)絡(luò)、文件系統(tǒng)掛載空間
  • 進(jìn)程組控制(Control):比如使用freezer子系統(tǒng)可以將進(jìn)程組掛起和恢復(fù)

參考鏈接?

徹底搞懂容器技術(shù)的基石: cgroup

linux 容器(LXC) 第4章 cgroups_caoshuming_500的博客-CSDN博客

Cgroup原理及使用 - zhrx - 博客園

Linux 基礎(chǔ):cgroup 原理與實(shí)現(xiàn)_CGroup_層級(jí)_控制

【docker 底層知識(shí)】cgroup 原理分析_張忠琳的博客-CSDN博客_cgroup

CGroup的原理和使用_書(shū)笑生的博客-CSDN博客_cgroup原理

Docker核心原理之 Cgroup詳解

Linux Cgroups詳解(二) - lisperl - 博客園

Linux Cgroup系列(04):限制cgroup的內(nèi)存使用(subsystem之memory)

Linux Cgroup系列(04):限制cgroup的內(nèi)存使用(subsystem之memory) - SegmentFault 思否

Linux Cgroup系列(01):Cgroup概述

Linux Cgroup系列(01):Cgroup概述 - SegmentFault 思否

深入理解 Linux Cgroup 系列(一):基本概念

深入理解 Linux Cgroup 系列(一):基本概念 - SegmentFault 思否

深入理解 Linux Cgroup 系列(二):玩轉(zhuǎn) CPU

深入理解 Linux Cgroup 系列(二):玩轉(zhuǎn) CPU - SegmentFault 思否

深入理解 Linux Cgroup 系列(三):內(nèi)存 - SegmentFault 思否

本文由[mdnice](https://mdnice.com/?platform=6)多平臺(tái)發(fā)布
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容