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