- Linux使用和管理指南:從云原生到可觀測性
- (奧)邁克爾·豪森布拉斯
- 1369字
- 2024-07-25 15:55:47
1.5 資源的可見性
在良好的UNIX傳統中,Linux擁有默認的全局資源視圖。這就引出了一個問題:什么是全局視圖(相對于什么?),什么是所謂的資源?
為什么我們首先要討論資源可見性呢?主要原因是提高你對這個主題的認識,并使你對現代Linux環境中的一個重要主題—容器—有正確的認識。如果你現在沒有了解所有的細節,那么也不要擔心,我們將在本書中詳細討論這個主題,特別是在第6章,我們將更詳細地討論容器及其構建塊。
你可能聽說過這樣一種說法:在UNIX(擴展為Linux)中,所有東西都是一個文件。在本書中,我們認為資源是任何可以用來幫助軟件執行的東西,包括硬件及其抽象(如CPU和RAM、文件)、文件系統、硬盤驅動器、固態硬盤(SSD)、進程、與網絡相關的東西(如設備或路由表)以及代表用戶的憑證。
Linux中并非所有資源都是文件或通過文件接口表示。然而,也有一些系統,比如Plan 9(https://oreil.ly/5DkY8),在這方面做得更進一步。
讓我們看一下一些Linux資源的具體示例。首先,我們想要查詢一個全局屬性(Linux版本),然后查詢關于正在使用的CPU的特定硬件信息(輸出已被編輯以適應本書版面):
?輸出Linux版本。
?輸出CPU相關信息,過濾模型。
通過前面的命令,我們了解到這個系統有四個Intel i7核可供使用。當使用不同的用戶登錄時,你希望看到相同數量的CPU嗎?
讓我們考慮一種不同類型的資源:文件。例如,如果用戶troy在/tmp/myfile下創建了一個有權限的文件(見4.3節),那么另一個用戶worf會看到這個文件,甚至能夠對它進行寫操作嗎?
或者,以進程為例,也就是說,內存中的程序具有運行所需的所有資源,如CPU和內存。Linux使用進程ID(簡稱PID,見2.3.1節)來標識進程:
?輸出進程狀態(即當前進程的詳細信息)并限制輸出,只顯示前六行。
什么是$$
你可能已經注意到$$,并想知道這是什么意思。這是一個特殊的變量,指的是當前進程(詳見3.1.2節)。注意,在shell上下文中,$$是你在其中鍵入命令的shell(例如bash)的進程ID。
Linux中可以有多個具有相同PID的進程嗎?這個聽起來很傻很沒用的問題其實是容器的基礎(參見6.6節)。答案是肯定的,可以有多個具有相同PID的進程,在不同的上下文中稱為命名空間(參見6.6.1節)。這可能發生在容器化的設置中,比如當你在Docker或Kubernetes中運行應用程序時。
每個單獨的進程都可能認為它是特殊的,具有PID 1,在更傳統的設置中,PID 1是為用戶空間進程樹的根保留的(更多細節請參閱6.2節)。
從這些觀測中我們可以了解到,給定資源上可以有一個全局視圖(兩個用戶在完全相同的位置看到一個文件),也可以有一個本地或虛擬化視圖,例如進程示例。這就提出了一個問題:Linux中的所有東西都是默認全局的嗎?劇透一下:不是的。讓我們仔細看看。
讓多個用戶或進程并行運行的部分錯覺是對資源的(受限的)可見性。在Linux中提供本地視圖(某些受支持的)的方法是通過命名空間(參見6.6.1節)。
第二個獨立的方面是隔離。當我在這里使用術語“隔離”時,我并不一定要限定它—也就是說,我沒有假設事物隔離得有多好。例如,考慮進程隔離的一種方法是限制內存消耗,以便一個進程不能占用其他進程的內存。例如,我給你的應用程序使用1GB的RAM,如果它使用了更多,它就會因內存不足(https://oreil.ly/kvk1u)而停止響應。這提供了一定程度的保護。在Linux中,我們使用一個叫作cgroups的內核特性來提供這種隔離,在6.6.2節中,你將了解到更多關于它的知識。
另外,完全隔離的環境會讓應用程序看起來完全獨立。例如,虛擬機(VM,請參見9.2節)可以用來為你提供完全隔離。
- 全屋互聯:智能家居系統開發指南
- Getting Started with oVirt 3.3
- Modern Web Testing with TestCafe
- 鴻蒙生態:開啟萬物互聯的智慧新時代
- BPEL and Java Cookbook
- 混沌工程:復雜系統韌性實現之道
- 深入理解eBPF與可觀測性
- Docker+Kubernetes應用開發與快速上云
- 網絡操作系統管理與應用(第三版)
- 嵌入式系統原理及開發
- 操作系統分析
- Fedora 12 Linux應用基礎
- Windows 8實戰從入門到精通(超值版)
- Introduction to R for Quantitative Finance
- Windows 10從新手到高手