容器化升級對服務有哪些影響?

容器技術是近幾年計算機領域的熱門技術,特別是隨著各種云服務的發展,越來越多的服務運行在以 Docker 為代表的容器之內。

本文我們就來分享一下容器化技術相關的知識。

容器化技術簡介

相比傳統虛擬化技術,容器技術是一種更加輕量級的操作系統隔離方案,可以將應用程序及其運行依賴環境打包到鏡像中,通過容器引擎進行調度,并且提供進程隔離和資源限制的運行環境。

虛擬化技術

虛擬化技術通過 Hypervisor 實現虛擬機與底層硬件的解耦,虛擬機實現依賴 Hypervisor 層,Hypervisor 是整個虛擬機的核心所在。

Hypervisor 是什么呢 ? 也可以叫作虛擬機監視器 VMM(Virtual Machine Monitor),是一種運行在基礎物理服務器和操作系統之間的中間軟件層,可允許多個操作系統和應用共享硬件。

image (11).png

Hypervisor 虛擬機可以模擬機器硬件資源,協調虛擬機對硬件資源的訪問,同時在各個虛擬機之間進行隔離。

每一個虛擬機都包括執行的應用,依賴的二進制和庫資源,以及一個完整的 OS 操作系統,虛擬機運行以后,預分配給它的資源將全部被占用。

容器化技術

在容器技術中,最具代表性且應用最廣泛的是 Docker 技術。

Docker 是一個開源的應用容器引擎,可以打包應用以及依賴包到一個可移植的容器中,然后發布到服務器上,Docker 容器基于鏡像運行,可部署在物理機或虛擬機上,通過容器引擎與容器編排調度平臺實現容器化應用的生命周期管理。

使用容器化技術有哪些好處呢?

Docker 不同于 VM,只包含應用程序及依賴庫,處于一個隔離的環境中,這使得 Docker 更加輕量高效,啟動容器只需幾秒鐘之內完成。由于 Docker 輕量、資源占用少,可以更方便地部署標準化應用,一臺主機上可以同時運行上千個 Docker 容器。

兩種虛擬化技術的對比

虛擬機是一個運行在宿主機之上的完整操作系統,虛擬機運行自身操作系統會占用較多的 CPU、內存、硬盤資源等。

虛擬化技術為用戶提供了一個完整的虛擬機,包括操作系統在內,容器化技術為應用程序提供了隔離的運行空間,容器之間共享同一個上層操作系統內核。虛擬化技術有更佳的隔離性和安全性,但是更新和升級困難,容器化具有快速擴展、靈活性和易用性等優勢,但其隔離性較差、安全性相對較低。

實際部署一般是把兩種技術結合起來,比如一個虛擬機中運行多個容器,這樣既保證了較好的強隔離性和安全性,也有了快速擴展、靈活性和易用性。

容器化的原理

容器技術的核心是如何實現容器內資源的限制,以及不同容器之間的隔離,這些是基于 Linux 的 Namespace 和 CGroups 技術。

image (12).png

Namespace

Namespace 的目的是通過抽象方法使得 Namespace 中的進程看起來擁有它們自己的隔離的全局系統資源實例。
Linux 內核實現了六種 Namespace:Mount namespaces、UTS namespaces、IPC namespaces、PID namespaces、Network namespaces、User namespaces,功能分別為:隔離文件系統、定義 hostname 和 domainame、特定的進程間通信資源、獨立進程 ID 結構、獨立網絡設備、用戶和組 ID 空間。

Docker 在創建一個容器的時候,會創建以上六種 Namespace 實例,然后將隔離的系統資源放入到相應的 Namespace 中,使得每個容器只能看到自己獨立的系統資源。

Cgroups

Docker 利用 CGroups 進行資源隔離。CGroups(Control Groups)也是 Linux 內核中提供的一種機制,它的功能主要是限制、記錄、隔離進程所使用的物理資源,比如 CPU、Mermory、IO、Network 等。

簡單來說,CGroups 在接收到調用時,會給指定的進程掛上鉤子,這個鉤子會在資源被使用的時候觸發,觸發時會根據資源的類別,比如 CPU、Mermory、IO 等,然后使用對應的方法進行限制。

CGroups 中有一個術語叫作 Subsystem 子系統,也就是一個資源調度控制器,CPU Subsystem 負責 CPU 的時間分配,Mermory Subsystem 負責 Mermory 的使用量等。Docker 啟動一個容器后,會在 /sys/fs/cgroup 目錄下生成帶有此容器 ID 的文件夾,里面就是調用 CGroups 的配置文件,從而實現通過 CGroups 限制容器的資源使用率。

微服務如何適配容器化

微服務的設計思想是對系統功能進行解耦,拆分為單獨的服務,可以獨立運行,而容器進一步對這種解耦性進行了擴展,應用容器技術可以對服務進行快速水平擴展,從而到達彈性部署業務的能力。在各種云服務概念興起之后,微服務結合 Docker 部署,更加方便微服務架構運維部署落地。

微服務結合容器有很多優點,但是另一方面,也給服務的部署和應用提出了一些新的問題。

以 Java 服務為例,容器與虛擬機不同,其資源限制通過 CGroup 來實現,而容器內部進程如果不感知 CGroup 的限制,就進行內存、CPU 分配的話,則可能會導致資源沖突的問題。

Java 8 之前的版本無法跟 Docker 很好的配合,JVM 通過容器獲取的可用內存和 CPU 數量并不是 Docker 允許使用的可用內存和 CPU 數量。

我們在開發中會應用一些線程池,通常會根據 CPU 核心數來配置,比如使用:

Runtime.getRuntime().availableProcessors()

在 1.8 版本更早的實現,在容器內獲取的是上層物理機或者虛擬機的 CPU 核心數,這就使得線程池配置不符合我們期望的設置。

另一個影響體現在 GC 中,JVM 垃圾對象回收對 Java 程序執行性能有一定的影響,默認的 JVM 使用公式“ParallelGCThreads = (ncpus <= 8) ? ncpus : 3 + ((ncpus * 5) / 8)” 來計算并行 GC 的線程數,其中 ncpus 是 JVM 發現的系統 CPU 個數。如果 JVM 應用了錯誤的 CPU 核心數,會導致 JVM 啟動過多的 GC 線程,導致 GC 性能下降,Java 服務的延時增加。

總結

這一課時和你分享了容器技術的發展,以 Docker 為代表的容器化技術的實現原理,以及大規模容器化之下,微服務如何適配等問題。

本課時的內容以概念為主,如果你在工作中沒有接觸過容器化場景,可以到 Docker 官網學習入門指南、了解 Docker 命令,并動手實踐一下 Docker 部署。

Docker環境準備教程(安裝與卸載).zip

Docker常用的基本命令大全

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215880.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215880.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215880.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分治法求最大子列和

給定N個整數的序列{ A1, A2, …, AN}&#xff0c;其中可能有正數也可能有負數&#xff0c;找出其中連續的一個子數列&#xff08;不允許空序列&#xff09;&#xff0c;使它們的和盡可能大&#xff0c;如果是負數&#xff0c;則返回0。使用下列函數&#xff0c;完成分治法求最大…

CorelDRAW軟件2024版本好用嗎?有哪些功能優勢

CorelDRAW是一款綜合性強大的專業平面設計軟件&#xff0c;其功能覆蓋了矢量圖形設計、高級文字編輯、精細繪圖以及多頁文檔和頁面設計。該軟件不僅適用于廣告設計、包裝設計&#xff0c;還廣泛應用于出版、網頁設計和多媒體制作等多個領域。下面就給大家介紹一下CorelDRAW這款…

0012Java安卓程序設計-ssm記賬app

文章目錄 **摘要**目 錄系統設計5.1 APP端&#xff08;用戶功能&#xff09;5.2后端管理員功能模塊開發環境 編程技術交流、源碼分享、模板分享、網課分享 企鵝&#x1f427;裙&#xff1a;776871563 摘要 網絡的廣泛應用給生活帶來了十分的便利。所以把記賬管理與現在網絡相…

arkts編譯報錯-arkts-limited-stdlib錯誤【Bug已完美解決-鴻蒙開發】

文章目錄 項目場景:問題描述原因分析:解決方案:適配指導案例此Bug解決方案總結項目場景: arkts編譯報錯-arkts-limited-stdlib錯誤。 我用Deveco studio4.0 beta2開發應用,報arkts-limited-stdlib錯誤 報錯內容為: ERROR: ArKTS:ERROR File: D:/prRevivw/3792lapplica…

[Verilog]用Verilog實現串并轉換/并串裝換

用Verilog實現串并轉換/并串裝換 摘要 一、串并轉換模塊 串轉并就是將低3位信號和輸入信號一起賦值。因為經過轉換后&#xff0c;碼元速率會將為原來四分之一&#xff0c;所以設置4分頻時鐘&#xff0c;將其輸出。而并轉串就是不斷右移&#xff0c;取高位輸出。 module serial…

Android 11.0 systemui鎖屏頁面時鐘顯示樣式的定制功能實現

1.前言 在11.0的系統ROM定制化開發中,在進行systemui的相關開發中,當開機完成后在鎖屏頁面就會顯示時間日期的功能,由于 開發產品的需求要求時間顯示周幾上午下午接下來就需要對鎖屏顯示時間日期的相關布局進行分析,然后實現相關功能 效果圖如圖: 2.systemui鎖屏頁面時鐘顯…

mysql原理--B+樹索引

1.沒有索引的查找 1.1.在一個頁中的查找 (1). 以主鍵為搜索條件 可以在 頁目錄 中使用二分法快速定位到對應的槽&#xff0c;然后再遍歷該槽對應分組中的記錄即可快速找到指定的記錄。 (2). 以其他列作為搜索條件 這種情況下只能從 最小記錄 開始依次遍歷單鏈表中的每條記錄&am…

值得收藏的練習打字網站

本文對一些好用的練習打字的網站進行了匯總整理&#xff0c;方便大家使用 一&#xff1a;程序猿練習打字&#xff1a; 1.Typing Practice for Programmers http://Typing.io 是程序員的打字導師。它的練習課程基于開源代碼&#xff0c;讓你在不斷的練習中提升自己的碼字速度…

Python:核心知識點整理大全15-筆記

目錄 ?編輯 7.3.2 刪除包含特定值的所有列表元素 pets.py 7.3.3 使用用戶輸入來填充字典 mountain_poll.py 7.4 小結 第8章 函 數 8.1 定義函數 greeter.py 8.1.1 向函數傳遞信息 8.1.2 實參和形參 8.2.1 位置實參 2. 位置實參的順序很重要 8.2.2 關鍵字實參 往…

Ansible通過kubernetes.core.k8s_info和kubernetes.core.k8s訪問OCP

文章目錄 環境OCPClient&#xff08;Ansible控制節點&#xff09; 步驟準備工作在client端配置ssh免密登錄OCP端在client端安裝Ansible kubernetes.core.k8s_info第1次嘗試在OCP端安裝python和pip3在OCP端安裝kubernetes在OCP端安裝PyYAML第2次嘗試在OCP端配置config文件第3次嘗…

計算機循環神經網絡(RNN)

計算機循環神經網絡&#xff08;RNN&#xff09; 一、引言 循環神經網絡&#xff08;RNN&#xff09;是一種常見的深度學習模型&#xff0c;適用于處理序列數據&#xff0c;如文本、語音、時間序列等。RNN通過捕捉序列數據中的時間依賴關系和上下文信息&#xff0c;能夠解決很…

react Hooks之useId

當我們在編寫React組件時&#xff0c;有時需要為元素生成唯一的ID。這種情況經常出現在表單元素、標簽和用于無障礙性的目的上。React提供了一個名為useId的自定義Hook&#xff0c;它可以幫助我們生成唯一的ID。 1、作用&#xff1a; 用于生成一個唯一的 ID。這個 ID 可以用于…

CLIP的升級版Alpha-CLIP:區域感知創新與精細控制

為了增強CLIP在圖像理解和編輯方面的能力&#xff0c;上海交通大學、復旦大學、香港中文大學、上海人工智能實驗室、澳門大學以及MThreads Inc.等知名機構共同合作推出了Alpha-CLIP。這一創新性的突破旨在克服CLIP的局限性&#xff0c;通過賦予其識別特定區域&#xff08;由點、…

Could not resolve all dependencies for configuration ‘:app:androidApis‘.

android studio出現Could not resolve all dependencies for configuration ‘:app:androidApis’. 試過很多種方法&#xff0c;但是都不好使&#xff0c;不管怎么樣都是提示如下報錯&#xff1a; Using insecure protocols with repositories, without explicit opt-in, is un…

丹麥市場開發攻略,帶你走進童話王國

說起安徒生&#xff0c;大家多多少少都知道&#xff0c;因為小時候讀的安徒生童話書真的太有名了&#xff0c;但是大家可能不知道安徒生是丹麥的。丹麥是高度發達的國家&#xff0c;奉行自由貿易政策&#xff0c;市場潛力是非常不錯的&#xff0c;而且中國是丹麥非常重要的貿易…

Python部分基礎知識入門學習,十分鐘快速上手

文章目錄 一、基礎語法二、變量類型三、運算符四、條件語句關于Python技術儲備一、Python所有方向的學習路線二、Python基礎學習視頻三、精品Python學習書籍四、Python工具包項目源碼合集①Python工具包②Python實戰案例③Python小游戲源碼五、面試資料六、Python兼職渠道 一、…

這家消金公司業務調整,暫停合作產品貸款服務

來源 | 鐳射財經&#xff08;leishecaijing&#xff09; 曾為金美信重要的線上自營渠道之一&#xff0c;錢多美宣告謝幕。 「鐳射財經」注意到&#xff0c;金美信消費金融近期發布一則關于錢多美的業務調整公告&#xff0c;提及2023年12月15日起&#xff0c;旗下“錢多美App”…

初識 WebGPU 以及遇到 WebGPU not supported 錯誤的解決方法

初識 WebGPU 以及遇到 WebGPU not supported 錯誤的解決方法 WebGPU學習資源初識WebGPU遇到并解決問題在線示例 因公司需求&#xff0c;開始接觸 WebGPU&#xff0c;偶然遇到問題&#xff0c;網上搜索無效&#xff0c;后來通過逐步判斷&#xff0c;終于定位到問題&#xff0c;這…

【WPF 按鈕點擊后異步上傳多文件code示例】

前言: WPF中按鈕點擊事件如何執行時間太長會導致整個UI線程卡頓&#xff0c;現象就是頁面刷新卡住&#xff0c;點擊其他按鈕無反饋。如下是進行異步執行命令&#xff0c;并遠程上傳文件的代碼。 ![異步上傳文件](https://img-blog.csdnimg.cn/direct/20c071929b004dcf9223dee2…

聽我的,日志還是得好好打!

日志這東西&#xff0c;平時看不出來什么&#xff0c;真要出了問題&#xff0c;那就是救命的稻草。這期就給大家分享一些日志相關的東西。 弄懂日志 SpringBoot項目啟動日志 什么是日志&#xff1f; 日志&#xff0c;維基百科中對其的定義是一個或多個由服務器自動創建和維護…