摘要:虛擬化技術是業務發展到一定階段,互聯網企業必然會使用的技術。混部當然也有一些問題,例如同一臺物理機上應用被應用突來的高峰所影響,周期被搶光,莫名其妙的負載升高。混部有時也不是一開始就能規劃好的,最好能動態調整,這樣就能通過虛擬化技術來做。
虛擬化技術是業務發展到一定階段,互聯網企業必然會使用的技術。
互聯網業務是7*24小時運行的,系統穩定性是生命線。企業為了保障業務穩定性會使用大量服務器,如何有效的提高機器的使用率,讓好鋼用在刀刃上,對于上層業務無侵入性的虛擬化技術能幫很大忙。
線上應用各有各的特點:
Java應用通常對于CPU要求不高,對于內存會比較高,寫IO可能也不會很高,除非業務日志開到debug級別瘋狂的寫,這在線上是不大可能的。最后對磁盤容量要求很低。
跑數據庫的軟件,一般CPU也不會很高,對于內存和IO要求會很高,IO要求要遠高于Java應用。內存需求一般是由于數據庫引擎會盡量將常用數據緩存在內容中提高性能,所以有時候把整張表都放在內存中也是可能,這就要求盡量高的內存。IO更不必說,主要是可能會有大量寫,畢竟數據庫就是一個保存狀態的實體,不可避免的要有大量的狀態需要保存。
實時流式計算類,Storm,Spark啥的,通常由于其處理數據的場景會導致吞吐量較大,CPU必然會消耗較大。
離線計算類,Hadoop, 數倉,BI,都是數據處理類,此類應用使用的高峰期有可能是半夜才剛開始。
以上幾種典型應用,可以想象一下,如果同類型的應用都放在同一個集群上,是一種比較大的浪費,web應用的使用是隨著人走的,人睡覺了,系統的低峰期就來了,半夜CPU都是閑置的,電還是一樣用著;而全是Hadoop的集群半夜才開始吭哧吭哧的處理數據分析的業務;一種很自然的想法就是在集群中去混部各種業務,讓優勢互補,讓機器一直保持在有事干的狀態。
混部當然也有一些問題,例如同一臺物理機上A應用被B應用突來的高峰所影響,CPU周期被搶光,莫名其妙的負載升高。混部有時也不是一開始就能規劃好的,最好能動態調整,這樣就能通過虛擬化技術來做。
提高硬件使用率的主要思路就是讓一個物理服務器上跑多個程序,程序之間需要一種隔離機制來保證大體上互不影響,這里有個悖論,因為我們的目的是提高資源利用率,那么最好讓應用互相爭搶資源,然而為了穩定性又需要一定程度的資源隔離。
兩種隔離思路 一 鳩占鵲巢,接管操作系統由于計算機歷史悠久的分層設計思路,可以想到讓程序隔離必然要在操作系統層與應用層之間有一種機制,讓應用認為自己在一個獨立的操作系統中,而操作系統又要支持讓應用互相隔離。那么就要引入一層中間層,這層中間層可以模擬操作系統環境來啟動應用,并把應用對操作系統的API調用翻譯過來傳達給下層實際的操作系統,這就是Xen,KVM的設計思路。
這樣的做法會比較重,因為相當于將操作系統重新封裝了一遍。至于為什么要翻譯一遍,這是由于虛擬機的操作系統可能是linux的各種方言版本,也有可能是windows,而實際下層提供操作系統服務的宿主系統一般都是同一個linux版本,所以上層虛擬機的各種cpu指令需要通過虛擬層翻譯過來傳給下層實際的操作系統,這里還會涉及到比較復雜的上層是32位系統,下層是64位系統,連指令集都不一樣,這些都會有性能損耗。這就是純軟件模擬的問題, 下圖可以解釋沒有硬件支持的CPU虛擬化時操作系統與程序的關系:
為了安全,一些特權級指令只允許操作系統發出,普通的應用程序是不允許調用的。但要做到虛擬化,則必然需要將虛擬化軟件作為操作系統的底層,讓其運行在ring0的模式,而把操作系統運行在ring1模式,這明顯會有很多挑戰。
針對這個問題,Intel后期為支持虛擬化增加了VT-x,為CPU的工作模式增加了VMX root operation和VMX non-root operation兩種模式。當客戶操作系統出現特權指令時提供了機制能退出到根模式,由虛擬機監視器(VMM)來處理。
二 操作系統支持,隔離進程空間Linux認識到了虛擬化的意義,提供了另外一種虛擬化的方式 - LXC(Linux Containers)。 此種思路是操作系統為程序提供虛擬執行空間,可以理解為一種容器,操作系統為要運行在容器中的應用程序提供所需的CPU,內存,網絡等底層資源支持,當然,此種方式還能靈活的更改綁定的CPU個數,并能進行CPU超配,提高資源利用率。
這種模式所有容器內的進程都共享同一個操作系統內核,所以限制也在這里,容器內的進程需要是個linux程序,windows程序用的windows操作系統API在這里是不存在的。
這里還要提一下Docker,其實看了前面對于LXC的介紹就知道,Docker的進程隔離思路與LXC是一樣的,所以Docker早期也是基于LXC開發的。Docker的理念與OO設計中的單一職責一樣,容器只支持一個進程,拒絕變成瑞士軍刀。
關于Docker,此處為占位符,下次看看它的設計。虛擬化技術仍在快速發展,應用程序員在寫代碼時完全不知道另外一批偏硬件,系統開發的程序員做了些什么,各種小小的分工,打造了如今的計算機體系,消費者們也得到了想要的(網絡游戲,打車,外賣,搜索)。
文章來自微信平臺「麥芽面包」
微信公眾號「darkjune_think」轉載請注明。
如果覺得有趣,微信掃一掃關注公眾號。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11510.html
摘要:導航第一課體驗第二課基礎類型和入門高級類型第三課泛型第四課解讀高級類型很重要這一節很重要可以說是的最核心部分這一節學完其實就可以開始用寫代碼了想想中的再看看標題中的類型字所以請大家務必認真什么是入門高級類型因為高級類型的內容比較多但是有些基 導航 第一課, 體驗typescript 第二課, 基礎類型和入門高級類型 第三課, 泛型 第四課, 解讀高級類型 很重要 這一節很重要, 可以說...
摘要:往期第一課體驗第二課基礎類型和入門高級類型第三課泛型第四課解讀高級類型插一課本來打算接著上節課把高級類型都講完但是寫著寫著我發現高級類型中有很多地方都需要泛型的知識那么先插一節泛型什么是類型變量和泛型變量的概念我們都知道可以表示任意數據類型 往期 第一課, 體驗typescript 第二課, 基礎類型和入門高級類型 第三課, 泛型 第四課, 解讀高級類型 插一課 本來打算接著上節課, ...
摘要:起因是看到一道題目的另外一種解法特別有意思,同時也做一點正則的筆記,好理解。 這是一篇普通的教程,同時也是我的一篇筆記。起因是看到一道題目的另外一種解法特別有意思,同時也做一點正則的筆記,好理解。 題目 我印象中的這道題目是:有一組數組為[1,1,2,3,3,3,3,4,5,5,5,6,6]使用js把它變成[[1,1],2,[3,3,3],4,[5,5,5].[6,6]] 解法有很多,...
摘要:因此,本文將會以一些正經的嚴謹的有深度的大概吧的課題,慢慢的接觸人工智能的相關知識。 Before The Beginning ????近年,技術圈炒的最火的兩個話(ba)題(gua)不外乎就是人工智障智能以及炒幣區塊鏈了,這個系列文章我主要以一個小菜鳥的角度一步一步的對人工智能的相關知識做一點了解,也算是一個顫顫巍巍追著AI浪潮公交車的社會主義五好青年,咳咳,扯遠了...其實對于人工...
摘要:直達第一課體驗第二課基礎類型和入門高級類型第三課泛型第四課解讀高級類型第五課什么是命名空間回顧第二課的時候為了更好的講解基礎類型所以我們講解了一部分高級類型比如接口聯合類型交叉類型本節課我會把剩余高級類型都講完知識點摘要本節課主要關鍵詞為自 直達 第一課, 體驗typescript 第二課, 基礎類型和入門高級類型 第三課, 泛型 第四課, 解讀高級類型 第五課, 什么是命名空間(na...
閱讀 643·2023-04-25 15:49
閱讀 3099·2021-09-22 15:13
閱讀 1234·2021-09-07 10:13
閱讀 3466·2019-08-29 18:34
閱讀 2554·2019-08-29 15:22
閱讀 498·2019-08-27 10:52
閱讀 676·2019-08-26 18:27
閱讀 3007·2019-08-26 13:44