那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文帶你吃透微服務、容器和K8S之間的關系

jf_TEuU2tls ? 來源:浩道linux ? 作者:浩道linux ? 2022-11-12 11:40 ? 次閱讀

前言

大家好,這里是浩道linux,主要給大家分享linux、python網絡通信相關的IT知識平臺。

今天浩道跟大家分享一篇硬核干貨,關于微服務、容器、K8S之間的關系!

什么是微服務?

什么是微服務?你應該使用微服務嗎?

從根本上講,微服務只是一個運行在服務器或虛擬計算實例上并響應網絡請求的計算機程序。

這與典型的 Rails/Django/Node.js 應用程序有何不同?它根本上沒有什么不同。事實上,您可能會發現您的組織中已經部署了十幾個微服務。沒有任何新的神奇技術使您的應用程序有資格稱為微服務。微服務不是由它的構建方式來定義的,而是由它如何變成更通用的系統或解決方案來定義的。

那么是如何使服務成為微服務呢?一般來說,微服務的范圍更窄,專注于做好較小的任務。讓我們通過看一個例子來進一步探索。

微服務示例:亞馬遜產品列表

讓我們檢查在 Amazon 上為您提供此產品頁面的系統。它包含幾個信息塊,可能是從不同的數據庫中檢索到的:

產品描述,包括價格、標題、照片等。

推薦項目,即其他人購買的類似書籍。

與此項目相關的贊助商列表。

關于本書作者的信息。

顧客評論。

您自己在亞馬遜商店中瀏覽其他商品的歷史記錄。

如果您要快速編寫用于此列表的代碼,那么簡單的方法將如下所示:

7d107008-6221-11ed-8abf-dac502259ad0.png

當用戶的請求來自瀏覽器時,它將由 Web 應用程序(Linux 或 Windows 進程)提供服務。通常,被調用的應用程序代碼片段稱為請求處理程序。處理程序內部的邏輯將依次多次調用數據庫,獲取呈現頁面所需的信息并將其拼接在一起,然后呈現返回給用戶的網頁。很簡單吧?事實上,許多 Ruby on Rails 書籍都有類似這樣的教程和示例。那么,你可能會問,為什么要把事情復雜化?

想象一下隨著應用程序的增長和越來越多的工程師參與其中會發生什么。上面例子中的推薦引擎是由一小群程序員和數據科學家維護的。有幾十個不同的團隊負責渲染該頁面的某些組件。這些團隊中的每一個通常都希望獲得以下自由:

更改他們的數據庫架構。

快速且頻繁地將他們的代碼發布到生產環境中。

使用他們選擇的編程語言或數據存儲等開發工具。

在計算資源和開發人員生產力之間做出自己的權衡。

偏好維護/監控其功能。

可以想象,隨著時間的推移,讓團隊就發布 Web 商店應用程序的新版本的所有內容達成一致將變得更加困難。

解決方案是將組件拆分為更小的、獨立的服務(也就是微服務)。

7d34fdec-6221-11ed-8abf-dac502259ad0.png

升級流程變得更小、更笨。它基本上是一個代理,它簡單地將傳入的頁面請求分解為幾個專門的請求,并將它們轉發給相應的微服務,這些微服務現在是他們自己的進程并在其他地方運行。“應用微服務”基本上是專門服務返回的數據的聚合器。您甚至可以完全擺脫它并將該工作卸載到用戶的設備上,讓此代碼在瀏覽器中作為單頁 JavaScript 應用程序運行。

其他微服務現在被分離出來,每個開發微服務的開發團隊都可以:

隨心所欲地部署他們的服務,而不會干擾其他團隊。

以他們認為合適的方式擴展他們的服務。例如,使用他們選擇的 AWS 實例類型,或者可能在專用硬件上運行。

擁有自己特定于其服務的監控、備份和災難恢復。

什么是容器?

從技術上講,容器只是一個從可執行文件產生的進程,運行在 Linux 機器上,它有一些限制,例如:

容器不允許“看到”所有文件系統,它只能訪問其中的指定部分。

一個容器不允許使用所有的 CPURAM

容器在如何使用網絡方面受到限制。

從歷史上看,現代操作系統總是對進程施加限制,例如每個 Linux 進程都以系統用戶的權限運行,但是容器化技術引入了更多可能的限制并使其更加靈活。

基本上,任何 Linux 可執行文件都可以受到限制,即可以“容器化”。

大多數情況下,當人們說“容器”時,他們不僅僅指的是 Linux 進程,還指的是可執行文件的打包和存儲方式。

類似的工具Docker允許開發人員獲取他們的可執行文件及其依賴項,以及他們想要的任何其他文件,并將它們全部打包成一個文件。這項技術與 tarball 之類的存檔沒有太大區別。Docker 還允許包含一些額外的指令和配置來運行這個打包的可執行文件。通常這些文件,通常稱為“容器鏡像”,也稱為容器。

但為了簡單起見,請記住:

一個容器就是一個運行受限制的linux進程

容器鏡像是可執行進程的依賴和配置打包

容器鏡像是自給自足的。它們將在任何 Linux 機器上運行,因此容器化使得將代碼從開發人員的機器復制(部署)到任何環境變得更加容易。

微服務和容器有什么區別?

我們剛剛了解到,容器只是一種打包、部署和運行 Linux 程序/進程的方法。您可以將一個巨大的單體應用程序作為容器,也可以擁有一群完全不使用容器的微服務。

容器是一種有用的資源分配和共享技術。這是 DevOps 人們感到興奮的事情。微服務是一種軟件設計架構。這是開發人員感到興奮的事情。

它們是相關的,但不需要彼此。您可以將單體應用部署為容器,也可以擁有不受限制的、非容器化的微服務。

什么時候使用微服務?

微服務背后的想法并不新鮮。幾十年來,軟件架構師一直致力于將單體應用程序分解為可重用的組件。

微服務的好處

微服務的好處很多,包括:

更簡單的自動化測試;

快速靈活的部署模式;

更強彈性擴縮容。

采用微服務的另一個好處是能夠為工作選擇最佳工具。應用程序的某些部分可以從 C++ 的速度中受益,而其他部分可以從更高級別語言(例如 Python 或 JavaScript)的生產力提高中受益。

微服務的缺點

微服務的缺點包括:

需要更仔細的規劃;

更高的研發投入;

過度設計的誘惑。

如果應用程序和開發團隊足夠小并且工作量不具有挑戰性,則通常無需投入額外的工程資源來解決您尚未解決的問題并使用微服務。但是,如果您開始看到微服務的利大于弊,這里有一些具體的設計注意事項:

計算和存儲分離。隨著您對 CPU 能力和存儲需求的增長,這些資源具有非常不同的擴展成本和特性。從一開始就不必依賴本地存儲,這將使您能夠相對輕松地適應未來的工作負載。這既適用于文件系統等簡單的存儲形式,也適用于數據庫等更復雜的解決方案。

異步處理。通過添加越來越多的相互調用的子進程或對象來逐步構建應用程序的傳統方法隨著工作負載的增長而停止工作,并且應用程序本身必須跨多臺機器甚至數據中心擴展。將需要圍繞事件驅動模型重新構建應用程序。這意味著發送事件(而不是等待結果)而不是調用函數并同步等待結果。

擁抱消息總線。這是必須實現異步處理模型的直接后果。隨著您的單體應用程序被分解為事件處理程序和事件發射器,就需要一個健壯、高性能和靈活的消息總線。有多種選擇,選擇取決于應用程序規模和復雜性。對于一個簡單的用例,像 Redis 這樣的東西就可以做到。如果您需要您的應用程序真正是云原生的并自行擴展和縮減,您可能需要能夠處理來自多個事件源的事件:從 Kafka 等流管道到基礎設施,甚至監控事件。

API 版本控制。由于您的微服務將使用彼此的 API 通過總線相互通信,因此設計用于保持向后兼容性的架構將是至關重要的。只需部署一個微服務的最新版本,開發人員就不應該要求其他人升級他們的代碼。這將是向整體方法向后兼容的一步,開發團隊必須在永遠支持舊 API 和保持更高的開發速度之間達成合理的妥協。這也意味著 API 設計成為一項重要的技能。頻繁的破壞性 API 更改是團隊無法高效開發復雜微服務的原因之一。

重新考慮您的安全性。許多開發人員沒有意識到這一點,但遷移到微服務為更好的安全模型創造了機會。由于每個微服務都是一個專門的進程,因此最好只允許它訪問所需的資源。這樣,僅一個微服務中的漏洞就不會將系統的其余部分暴露給攻擊者。這與大型單體形成對比,后者傾向于以更高的特權(每個人都需要的超集)運行,并且可能導致更多的違規行為。

Kubernetes 與微服務有什么關系?

Kubernetes太復雜了,無法在此詳細描述,但值得對其進行概述,因為很多人在有關微服務的對話中都會提到它。

嚴格來說,Kubernetes(又名 K8s)的主要好處是通過跨多個進程高效共享計算資源來提高基礎設施利用率。Kubernetes 是動態分配計算資源以滿足需求的大師。這允許組織避免為他們不使用的計算資源付費。但是,K8s 的一些附帶好處使向微服務的過渡變得更加容易。

當您將單體應用程序分解為單獨的、松散耦合的微服務時,您的團隊將獲得更多的自主權和自由度。但是,在與微服務必須運行的基礎設施進行交互時,它們仍然必須密切合作。

您必須解決以下問題:

預測每個服務需要多少計算資源;

這些要求在負載下如何變化;

如何劃分基礎設施分區并將它們劃分到微服務之間;

實施資源限制。

Kubernetes 非常優雅地解決了這些問題,并提供了一個通用框架來描述、檢查和推理基礎設施資源的共享和利用。這就是為什么采用 Kubernetes 作為微服務重新架構的一部分是一個好主意。

然而,Kubernetes 是一項需要學習的復雜技術,而且更難管理。如果可以,您應該利用云提供商提供的托管 Kubernetes 服務。但是,對于需要跨多個云提供商和企業數據中心運行自己的 Kubernetes 集群的公司來說,這并不總是可行的。

結論

容器只是具有應用受限制的 Linux 進程。限制的示例包括允許進程使用多少 CPU 或內存。Docker 之類的工具允許開發人員將他們的可執行文件與依賴項和附加配置打包在一起。這些包被稱為 鏡像,并且經常且容易混淆地也被稱為容器。

微服務并不新鮮。這是一種舊的軟件設計模式,由于互聯網公司的規模不斷擴大,它越來越受歡迎。微服務不一定要容器化。同樣,單體應用程序可以是微服務。

小項目不應該回避整體設計。它為較小的團隊提供更高的生產力。

Kubernetes 是由多個微服務組成的復雜應用程序的絕佳平臺。

Kubernetes 也是一個復雜的系統,學習曲線陡峭,管理成本非常高。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 容器
    +關注

    關注

    0

    文章

    499

    瀏覽量

    22120
  • 微服務
    +關注

    關注

    0

    文章

    142

    瀏覽量

    7431
  • kubernetes
    +關注

    關注

    0

    文章

    227

    瀏覽量

    8752

原文標題:一文帶你吃透微服務、容器和 K8S之間的關系

文章出處:【微信號:浩道linux,微信公眾號:浩道linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    微服務容器化部署好處多嗎?

    微服務容器化部署好處有很多,包括環境致性、資源高效利用、快速部署與啟動、隔離性與安全性、版本控制與回滾以及持續集成與持續部署。這些優勢助力應用可靠穩定運行,提升開發運維效率,是現代軟件架構的優質選擇。UU云小編認為
    的頭像 發表于 01-17 10:22 ?80次閱讀

    容器化能替代微服務嗎?兩者有何區別

    容器化不能替代微服務,但它是微服務的解決方案之微服務架構的核心在于將大型應用程序拆分為系列
    的頭像 發表于 01-13 10:40 ?104次閱讀

    k8s和docker區別對比,哪個更強?

    Docker和Kubernetes(K8s)是容器化技術的兩大流行工具。Docker關注構建和打包容器,適用于本地開發和單主機管理;而K8s則提供
    的頭像 發表于 12-11 13:55 ?183次閱讀

    k8s微服務架構就是云原生嗎?兩者是什么關系

    k8s微服務架構就是云原生嗎?K8s微服務架構并不等同于云原生,但兩者之間存在密切的聯系。Kubernetes在云原生架構中扮演著核心組件的
    的頭像 發表于 11-25 09:39 ?196次閱讀

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地與公有云分別建立K8s集群,并確保網絡連接。接著,配置kubeconfig文件連接兩集群,并安裝云服務插件以實現資源互通。然后,編寫Deployment文件部署應用,并使用kubectl命令
    的頭像 發表于 11-07 09:37 ?189次閱讀

    k8s可以部署私有云嗎?私有云部署全攻略

    Kubernetes(簡稱K8S)可以部署私有云。Kubernetes是個開源的容器編排引擎,能夠自動化容器的部署、擴展和管理,使得應用可以在各種環境中高效運行。通過使用Kubern
    的頭像 發表于 10-25 09:32 ?207次閱讀

    k8s云原生開發要求

    Kubernetes(K8s)云原生開發對硬件有定要求。CPU方面,建議至少配備2個邏輯核心,高性能CPU更佳。內存至少4GB,但8GB或更高更推薦。存儲需至少20-30GB可用空間,SSD提升
    的頭像 發表于 10-24 10:03 ?276次閱讀
    <b class='flag-5'>k8s</b>云原生開發要求

    微服務架構與容器云的關系與區別

    微服務架構與容器云密切相關又有所區別。微服務將大型應用拆分為小型、獨立的服務,而容器云基于容器
    的頭像 發表于 10-21 17:28 ?282次閱讀

    k8s容器啟動失敗的常見原因及解決辦法

    k8s容器啟動失敗的問題通常出現在開發者使用Kubernetes進行容器編排時,可能的原因有多種,例如:配置錯誤、鏡像問題、資源限制、依賴問題、網絡問題、節點狀態異常、其他因素等,以下是對這些常見原因的詳細分析:
    的頭像 發表于 10-11 10:12 ?323次閱讀

    服務器部署k8s需要什么配置?

    服務器部署K8s需要至少2核CPU、4GB內存、50GBSSD存儲的主節點用于管理集群,工作節點建議至少2核CPU、2GB內存、20GBSSD。還需安裝Docker,選擇兼容的Kubernetes版本,配置網絡插件,以及確保系統安全、監控和備份措施到位。
    的頭像 發表于 10-09 15:31 ?247次閱讀

    入門級攻略:如何容器化部署微服務

    步理解容器化基礎,第二步創建Dockerfile,第三步構建推送鏡像,第四步部署微服務,第五步管理微服務、第六步優化更新。容器化部署
    的頭像 發表于 10-09 10:08 ?205次閱讀

    常用的k8s容器網絡模式有哪些?

    常用的k8s容器網絡模式包括Bridge模式、Host模式、Overlay模式、Flannel模式、CNI(ContainerNetworkInterface)模式。K8s容器網絡模
    的頭像 發表于 09-19 11:29 ?299次閱讀

    K8S集群中使用JDOS KMS服務對敏感數據安全加密

    基本概念 KMS,Key Management Service,即密鑰管理服務,在K8S集群中,以驅動和插件的形式啟用對Secret,Configmap進行加密。以保護敏感數據, 驅動和插件需要
    的頭像 發表于 08-09 16:00 ?279次閱讀
    <b class='flag-5'>K8S</b>集群中使用JDOS KMS<b class='flag-5'>服務</b>對敏感數據安全加密

    K8S學習教程三:在PetaExpress KubeSphere 容器部署 Wiki 系統 wiki.js 并啟用中文全文檢索

    K8S學習教程(三):在PetaExpress KubeSphere 容器部署 Wiki 系統 wiki.js 并啟用中文全文檢索? 。
    的頭像 發表于 07-08 17:03 ?697次閱讀
    <b class='flag-5'>K8S</b>學習教程三:在PetaExpress KubeSphere <b class='flag-5'>容器</b>部署 Wiki 系統 wiki.js 并啟用中文全文檢索

    K8S學習教程(二):在 PetaExpress KubeSphere容器平臺部署高可用 Redis 集群

    并且需要手動重啟節點,相較之下,使用 PetaExpress 提供的 Kubernetes(k8s) 服務 進行 Redis 集群的部署,則展現出了顯著的優勢: 1、安裝便捷:使用鏡像或者 yaml 配置文件即可件安裝,極大地
    的頭像 發表于 07-03 15:30 ?837次閱讀
    <b class='flag-5'>K8S</b>學習教程(二):在 PetaExpress KubeSphere<b class='flag-5'>容器</b>平臺部署高可用 Redis 集群
    百家乐桌现货| 大众百家乐官网的玩法技巧和规则 | 威尼斯人娱乐城官方网站| 中国百家乐官网澳门真人娱乐平台网址| 芷江| 大发888充钱| 百家乐开户优惠多的平台是哪家 | 大中华百家乐官网的玩法技巧和规则 | 美国百家乐官网怎么玩| 大发888官方备用| 百家乐官网投注方法投资法| 星空棋牌舟山清墩| 女神百家乐的玩法技巧和规则 | 百家乐免佣台| 香港百家乐官网的玩法技巧和规则 | 百家乐官网网络游戏信誉怎么样| A8百家乐官网游戏| 大连娱网棋牌步步为赢| 三亚百家乐的玩法技巧和规则| 百家乐赢的技巧| 百家乐官网送现金200| 百家乐官网有什么打法| 六合彩聊天室| 真人游戏网| 百家乐电子发牌盒| 百家乐终端下载| 博之道百家乐官网技巧| 百家乐官网百家乐官网群| 本溪棋牌娱乐网| 全讯网六仔开奖| 迪威百家乐赌场娱乐网规则| 百家乐稳一点的押法| 百家乐官网平客户端| 百家乐官网是怎样算牌| 百家乐官网平台出租家乐平台出租| 遂昌县| 太子娛樂城网址| 现金网系统出租| 大发888有银钱的吗| 明珠百家乐的玩法技巧和规则| 顶尖百家乐学习|