HOME 首頁
SERVICE 服務產(chǎn)品
XINMEITI 新媒體代運營
CASE 服務案例
NEWS 熱點資訊
ABOUT 關于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    底層原理(底層原理up主為什么不更了)

    發(fā)布時間:2023-03-13 21:37:00     稿源: 創(chuàng)意嶺    閱讀: 129        問大家

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于底層原理的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    ChatGPT國內(nèi)免費在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com

    本文目錄:

    底層原理(底層原理up主為什么不更了)

    一、Docker的底層原理實現(xiàn)(二十)

    Docker 采用了 C/S 架構,包括客戶端和服務端。Docker 守護進程 ( Daemon )作為服務端接受來自客戶端的請求,并處理這些請求(創(chuàng)建、運行、分發(fā)容器)。

    客戶端和服務端既可以運行在一個機器上,也可通過 socket 或者 RESTful API 來進行通信。

    命名空間是 Linux 內(nèi)核一個強大的特性。每個容器都有自己單獨的命名空間,運行在其中的 應用都像是在獨立的操作系統(tǒng)中運行一樣。命名空間保證了容器之間彼此互不影響。

    不同用戶的進程就是通過 pid 命名空間隔離開的,且不同命名空間中可以有相同 pid。所有的 LXC 進程在 Docker 中的父進程為Docker進程,每個 LXC 進程具有不同的命名空間。同時由 于允許嵌套,因此可以很方便的實現(xiàn)嵌套的 Docker 容器。

    有了 pid 命名空間, 每個命名空間中的 pid 能夠相互隔離,但是網(wǎng)絡端口還是共享 host 的端 口。網(wǎng)絡隔離是通過 net 命名空間實現(xiàn)的, 每個 net 命名空間有獨立的 網(wǎng)絡設備, IP 地址, 路由表, /proc/net 目錄。這樣每個容器的網(wǎng)絡就能隔離開來。Docker 默認采用 veth 的方式,將 容器中的虛擬網(wǎng)卡同 host 上的一個 Docker 網(wǎng)橋 docker0 連接在一起。

    容器中進程交互還是采用了 Linux 常見的進程間交互方法(interprocess communication - IPC), 包括信號量、消息隊列和共享內(nèi)存等。然而同 VM 不同的是,容器的進程間交互實際上還是 host 上具有相同 pid 命名空間中的進程間交互,因此需要在 IPC 資源申請時加入命名空間信息,每個 IPC 資源有一個唯一的 32 位 id。

    類似 chroot,將一個進程放到一個特定的目錄執(zhí)行。mnt 命名空間允許不同命名空間的進程看到的文件結構不同,這樣每個命名空間中的進程所看到的文件目錄就被隔離開了。同 chroot 不同,每個命名空間中的容器在 /proc/mounts 的信息只包含所在命名空間的 mount point。

    UTS("UNIX Time-sharing System") 命名空間允許每個容器擁有獨立的 hostname 和 domain name, 使其在網(wǎng)絡上可以被視作一個獨立的節(jié)點而非主機上的一個進程。

    每個容器可以有不同的用戶和組 id, 也就是說可以在容器內(nèi)用容器內(nèi)部的用戶執(zhí)行程序而非主機上的用戶。

    控制組(cgroups)是 Linux 內(nèi)核的一個特性,主要用來對共享資源進行隔離、限制、審計 等。只有能控制分配到容器的資源,才能避免當多個容器同時運行時的對系統(tǒng)資源的競爭。

    聯(lián)合文件系統(tǒng)(UnionFS)是一種分層、輕量級并且高性能的文件系統(tǒng),它支持對文件系統(tǒng)的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統(tǒng)下(unite several directories into a single virtual filesystem)。

    聯(lián)合文件系統(tǒng)是 Docker 鏡像的基礎。鏡像可以通過分層來進行繼承,基于基礎鏡像(沒有父 鏡像),可以制作各種具體的應用鏡像。

    另外,不同 Docker 容器就可以共享一些基礎的文件系統(tǒng)層,同時再加上自己獨有的改動層, 大大提高了存儲的效率。

    Docker 中使用的 AUFS(AnotherUnionFS)就是一種聯(lián)合文件系統(tǒng)。 AUFS 支持為每一個 成員目錄(類似 Git 的分支)設定只讀(readonly)、讀寫(readwrite)和寫出(whiteoutable)權限, 同時 AUFS 里有一個類似分層的概念, 對只讀權限的分支可以邏輯上進行增量地修改(不影響只讀部分的)。

    Docker 目前支持的聯(lián)合文件系統(tǒng)包括 OverlayFS, AUFS, Btrfs, VFS, ZFS 和 Device Mapper。

    最初,Docker 采用了 LXC 中的容器格式。從 0.7 版本以后開始去除 LXC,轉(zhuǎn)而使用自行開 發(fā)的 libcontainer ,從 1.11 開始,則進一步演進為使用 runC 和 containerd 。

    Docker 的網(wǎng)絡實現(xiàn)其實就是利用了 Linux 上的網(wǎng)絡命名空間和虛擬網(wǎng)絡設備(特別是 veth pair)。

    首先,要實現(xiàn)網(wǎng)絡通信,機器需要至少一個網(wǎng)絡接口(物理接口或虛擬接口)來收發(fā)數(shù)據(jù)包;此外,如果不同子網(wǎng)之間要進行通信,需要路由機制。

    Docker 中的網(wǎng)絡接口默認都是虛擬的接口。虛擬接口的優(yōu)勢之一是轉(zhuǎn)發(fā)效率較高。 Linux 通 過在內(nèi)核中進行數(shù)據(jù)復制來實現(xiàn)虛擬接口之間的數(shù)據(jù)轉(zhuǎn)發(fā),發(fā)送接口的發(fā)送緩存中的數(shù)據(jù)包 被直接復制到接收接口的接收緩存中。對于本地系統(tǒng)和容器內(nèi)系統(tǒng)看來就像是一個正常的以 太網(wǎng)卡,只是它不需要真正同外部網(wǎng)絡設備通信,速度要快很多。

    Docker 容器網(wǎng)絡就利用了這項技術。它在本地主機和容器內(nèi)分別創(chuàng)建一個虛擬接口,并讓它 們彼此連通(這樣的一對接口叫做 veth pair )。

    Docker 創(chuàng)建一個容器的時候,會執(zhí)行如下操作:

    完成這些之后,容器就可以使用 eth0 虛擬網(wǎng)卡來連接其他容器和其他網(wǎng)絡。可以在 docker run 的時候通過 --net 參數(shù)來指定容器的網(wǎng)絡配置:

    二、Redis的五種數(shù)據(jù)結構及其底層實現(xiàn)原理

    redis的字符串類型是由一種叫做簡單動態(tài)字符串(SDS)的數(shù)據(jù)類型來實現(xiàn)

    SDC和C語言字符串的區(qū)別:

    1:SDS保存了字符串的長度,而C語言不保存,只能遍歷找到第一個