架構雜談《七》

来源:https://www.cnblogs.com/haoxiaozhang/archive/2019/07/25/11239326.html
-Advertisement-
Play Games

架構雜談《七》 容器VS虛擬機 一、什麼是虛擬機 虛擬機(Virtual Machine)指通過軟體模擬的具有完整硬體系統功能的、運行在一個完全隔離環境中的完整電腦系統。 虛擬系統通過生成現有操作系統的全新虛擬鏡像,它具有真實windows系統完全一樣的功能,進入虛擬系統後,所有操作都是在這個全新 ...


架構雜談《七》

容器VS虛擬機

一、什麼是虛擬機

  虛擬機(Virtual Machine)指通過軟體模擬的具有完整硬體系統功能的、運行在一個完全隔離環境中的完整電腦系統。   虛擬系統通過生成現有操作系統的全新虛擬鏡像,它具有真實windows系統完全一樣的功能,進入虛擬系統後,所有操作都是在這個全新的獨立的虛擬系統裡面進行,可以獨立安裝運行軟體,保存數據,擁有自己的獨立桌面,不會對真正的系統產生任何影響 ,而且具有能夠在現有系統與虛擬鏡像之間靈活切換的一類操作系統。虛擬系統和傳統的虛擬機(Parallels Desktop ,VmwareVirtualBoxVirtual pc)不同在於:虛擬系統不會降低電腦的性能,啟動虛擬系統不需要像啟動windows系統那樣耗費時間,運行程式更加方便快捷;虛擬系統只能模擬和現有操作系統相同的環境,而虛擬機則可以模擬出其他種類的操作系統;而且虛擬機需要模擬底層的硬體指令,所以在應用程式運行速度上比虛擬系統慢得多。   流行的虛擬機軟體VMware(VMWare ACE)、Virtual BoxVirtual PC,它們都能在Windows系統上虛擬出多個電腦。     以上內容來自 百度百科   總結下:   虛擬機用於為用戶提供一個完整的系統鏡像,常見的虛擬機有VMware、Virtual Box、KVM等。虛擬機技術可以為每個用戶分配虛擬化後的CPU、記憶體和I/O等設備資源,但是為了能運行應用程式,除了需要部署應用程式本身及其依賴外,還需要安裝整個操作系統和驅動。

二、什麼是容器

  容器是一種輕量級、可移植的為應用程式提供了隔離的運行空間。每個容器內都包含一個獨享的完整用戶環境,並且一個容器內的環境變動不會影響其他容器的運行環境,可以使應用程式在幾乎任何地方以相同的方式運行(如 在開發人員自己的本子上創建並測試好的容器無須任何修改就能在生產環境中的虛擬機、物理伺服器或者雲上運行)

  在技術方面,容器是通過一系列系統級別的機制來實現的(如:通過Linux Namespaces進行空間隔離,通過文件系統的掛載點來決定容器可以訪問哪些文件;通過cgroups 來確定每個容器可以利用多少資源),容器之間通過共用同一個系統內核來提升記憶體的使用率。

三、容器與虛擬機的區別

  容器是對應用層的抽象,它把應用程式的代碼和相關依賴打包在一起執行,多個容器可以在同一臺物理機上互不影響地獨立運行,並且共用操作系統內核。啟動快、占用空間少。而虛擬機是物理硬體層上的虛擬化,系統管理程式使虛擬機能夠運行在同一臺物理機上,但是每台虛擬機必須包括一整套操作系統、應用程式和各種依賴庫等。啟動慢、占用空間大。

四、容器主要解決的問題 

  容器有輕量級、可隔離性和可移植等特性,所以應用程式的容器化使得應用程式具備了超強的可移植性。
  在 Web 1.0 時代,信息是單向的,交互只在人與網路之間進行,大多人上網是為了看新聞,因此應用程式相對簡單,一般採用 LAMP。 ( Linux-Apache-MySQL-PHP )的三層架構(Presentation 、 Application 、 Data ),只需要部署到有限的幾台物理伺服器上;在如今的 Web2.0甚至 Web 3.0 時代,互聯網連接一切,包括連接人與人、人與物、物與物,系統架構較 10 年前己經變得非常複雜,開發人員通常使用多種服務構建和組裝應用,比如分散式消息隊列 Kafka、分散式緩存 Redis、分散式文件系統 HDFS 或 Spring Cloud 或 Azure Service Fabric等。複雜應用系統的相應部署環境也變得非常複雜,可能會部署到不同的環境中,比如開發伺服器、測試伺服器和生產伺服器,伺服器也可能是虛擬伺服器、私有雲或公有雲等,如下圖:

  因為存在各種服務和環境,所以開發人員在編寫代碼時需要考慮不同的運行環境,運維人員則需要為不同的服務和平臺進行各種配置,對於他們雙方來說,這些都是艱巨的任務,那麼如何讓每種服務在所有的部署環境中順利運行呢?容器就很好地幫我們解決了這個難題。
  我們先聯想下幾十年前的運輸行業,在每一次運輸中,貨主與承運方都會擔心貨物因種類不同而受損,比如易碎的東西被錯誤地壓在了最下麵。另 一方面,在運輸過程中需要使用不同的交通工具,比如貨物先被裝上卡車運到碼頭,再被裝上船,到岸後又被卸下船,再被裝上火車 ,到達目的地再被卸下 。其中的大部分時間都花費在對不同物品的裝貨、卸貨上,而且搬上搬下還容易損壞物品 。幸運的是,集裝箱的發明解決了這個難題 : 任何貨物,不管是床墊還是機器,都被放在各自的集裝箱中,集裝箱在整個運輸過程中都是密封的,只有到達目的地才被打開。標準集裝箱可以被高效地裝卸、重疊和長途運輸。現代化的起重機可以方便地在卡車、輪船和火車之間移動集裝箱,集裝箱被譽為運輸業與世界貿易的最重要的發明。
  Docker 將集裝箱思想運用到對軟體的打包上,為代碼提供了 一個基於容器的標準化運輸系統,可以將任何應用及其依賴打包成一個輕量級、可移植、自包含的容器,可以運行在幾乎所有操作系統上。

五、Docker的優勢

  1)、Docker 在開發方面的優勢

  每個人的開發環境都不一樣,由於在開發過程中會不斷地切換項目工程,所以每次都要不斷的重覆修改和設置開發環境,而Docker可以使這一過程變得自動化,讓開發人員更加關註軟體開發(比如:開發人員使用Docker後就不需要單獨安裝和配置資料庫,也不需要擔心不同版本的衝突問題),容器化的應用更容易構建、分享和運行,如果團隊有新的同事加入,也不需要花費好幾個小時講解如何搭建環境及安裝軟體和相關的配置,只需要花費幾分鐘安裝Docker就能編譯和調試程式了。

  2)、Docker 在運維方面的優勢

  Docker 使軟體的發佈更加高效,不管是更新版本還是修複 Bug,都能快速發佈完成,並且能瞬間伸縮擴展。Docker 能夠實現自動化的編譯、打包、測試和部署,運維人員不再需要WiKi 、 README 、 CleckList 文檔,因為 Docker 在開發、測試和生產環境中都使用了相同的鏡像,所以更新時不會出現不一致的問題。

  3)、Docker 在容器和虛擬機方面的優勢

  Docker 使容器和虛擬機相結合( Docker Machine 實現了容器和虛擬機的有效結合),使部署和管理應用變得更加靈活 。我們可以在虛擬機中啟動一個容器,這裡的虛擬機並不是由 Docker控制的,而是通過現有的虛擬化管理設施來控制的 。一旦系統實例啟動,就可以通過安裝 Docker來運行容器併進行其他特殊設置。同時由於不同的容器運行在不同的虛擬機上,容器之間也能有很好的隔離。

說明:

  1、參考書籍:《分散式服務架構:原理、設計與實戰》

  2、如有不合適的地方請反饋。綜合後更改。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 做網頁的時候常常會遇到半透明背景色的彈出框,通常回會想要點擊關閉按鈕或者背景色部分關閉彈窗 並且彈窗是背景色的後代 思路: 背景色盒子設置一個class類,通過jq 的點擊事件 獲取事件源對象(就是當前點擊的) 判斷點擊的是否是 背景色盒子 這裡通過類名判斷 $("背景色盒子的類").click(f ...
  • html: <ion-header> <ion-toolbar> <ion-title> 股票 </ion-title> </ion-toolbar> </ion-header> <ion-content> <ion-refresher slot="fixed" (ionRefresh)="doRe ...
  • 工廠模式用於創建對象時,有簡單工廠,工廠方法、抽象工廠。 簡單工廠:由一個工廠對象決定創建哪個實例的對象。簡單工廠適用於創建對象少的場景,客戶端只需要傳入參數,對於如何創建不用關心。 缺點:工廠類職責過重,不易於擴展複雜結構的實例對象,不符合開閉原則。 工廠方法:是指定義一個創建對象的介面,各個不同 ...
  • JVM垃圾回收器原理及使用介紹 垃圾收集基礎 引用計數法(Reference Counting) 標記-清除演算法(Mark-Sweep) 複製演算法(Copying) 標記-壓縮演算法(Mark-Compack) 增量演算法(Incremental Collecting) 分區演算法(partitionin ...
  • Bearer認證 HTTP提供了一套標準的身份驗證框架:伺服器可以用來針對客戶端的請求發送質詢(challenge),客戶端根據質詢提供身份驗證憑證。質詢與應答的工作流程如下:伺服器端向客戶端返回401(Unauthorized,未授權)狀態碼,併在WWW Authenticate頭中添加如何進行驗 ...
  • 前言 Bridge設計模式,將一個複雜類分成可以單獨開發的部分。分成的兩個部分,abstraction,implementation。字面上是抽象和實現,但不同於抽象方法及其實現。下麵摘錄Wiki的兩句話。 decouple an abstraction from its implementatio ...
  • 前言 上一節我們學習了單一職責原則,簡單來說就是各司其職,廚師就專註做好菜,不要跑到前堂做起小二。 但是呢,萬事無一絕對。如果只是小飯店有時候也不是特別嚴格。還是那句話, 原則是死的,人是活的 。 接下來我們來學習介面隔離原則。 基本介紹 客戶端不應該依賴它不需要的介面,即一個類對另一個類的依賴應該 ...
  • 1.智能快遞櫃(開篇) 2.智能快遞櫃(終端篇) 3.智能快遞櫃(通信篇-HTTP) 4.智能快遞櫃(通信篇-SOCKET) 5.智能快遞櫃(通信篇-Server程式) 6.智能快遞櫃(平臺篇) 7.智能快遞櫃(APP及微信公眾號) 8.智能快遞櫃SDK(聯網型鎖板) 9.智能快遞櫃SDK(串口型鎖 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...