注:本文為來自 csdn 不錯的“深度學習 / 云計算發展史 ” 相關文章合輯。
對原文,略作重排。
深度學習發展史(1943-2024 編年體)(The History of Deep Learning)
Hefin_H 已于 2024-05-23 15:54:45 修改
深度學習是人工智能領域的一個重要分支,它在圖像識別、語音識別、自然語言處理等方面取得了顯著的進展。
學習任一門知識都應該先從其歷史開始,把握了歷史,也就抓住了現在與未來 。
那么深度學習到底是經歷了一段怎樣的發展過程呢?下面我們就來了解一下深度學習發展史。
1940s-1950s:早期神經網絡概念
1943 年,Warren McCulloch 和 Walter Pitts 發表論文 “A logical calculus of the ideas immanent in nervous activity”(神經活動中內在思想的邏輯演算),建立了神經網絡和數學模型,稱為 MCP 模型。奠定了神經網絡和數學模型的基礎。
MCP 當時是希望能夠用計算機來模擬人的神經元反應的過程,該模型將神經元簡化為了三個過程:輸入信號線性加權,求和,非線性激活(閾值法)。如下圖所示:
圖:MCP 模型
1949 年,Donald Hebb 提出了Hebbian 學習規則,該規則表明,如果神經元 A 在接收到神經元 B 的輸入后,持續發放輸出,那么神經元 A 與神經元 B 之間的連接強度將增強:
Hebb 學習規則與 “條件反射” 機理一致,并且已經得到了神經細胞學說的證實。Hebbian 學習規則為神經元連接強度的學習機制提供了理論支持。
1950s-1960s:感知機和早期模型
1958 年,計算機科學家 Frank Rosenblatt 提出了兩層神經元組成的神經網絡,稱之為感知器 (Perceptrons),使用 MCP 模型對輸入的多維數據進行二分類,且能夠使用梯度下降法從訓練樣本中自動學習更新權值。
1969 年,Marvin Minsky 和 Seymour Papert 在他們的書《Perceptrons》中指出感知器本質上是一種線性模型,只能處理線性分類問題,就連最簡單的 XOR(異或)問題都無法正確分類。
圖:異或(XOR)問題:沒有一條直線能將綠點和紅點分開
1980s-1990s:多層感知機和反向傳播
1985 年,Geoffrey Hinton 等人發表論文 A learning algorithm for boltzmann machines,提出了受限玻爾茲曼機 (RBM)。一種用于無監督學習的隨機神經網絡。可用于特征提取、降維。后來成為深度信念網絡的組成塊進而流行。
1986 年,Geoffrey Hinton 發明了適用于多層感知器(MLP)的 BP(Backpropagation)算法,并采用 Sigmoid 進行非線性映射,有效解決了非線性分類和訓練的問題。該方法引起了神經網絡的第二次熱潮。
1989 年, Yann LeCun 等人發表論文Backpropagation Applied to Handwritten Zip Code Recognition(反向傳播應用于手寫郵政編碼識別),使用 BP 算法訓練卷積神經網絡(CNN) 用于手寫數字識別。
圖:CNN 模型
1990s-2000:深度學習領域的形成期
1990 年, Jeffrey Elman 發表論文Finding structure in time提出SRNs(也叫 Elman Networks),其核心概念就是今天所熟知的循環神經網絡(RNN)。
1991 年, Sepp Hochreiter 在他的畢業論文中闡述了梯度消失問題,當梯度通過深度神經網絡中的各層反向傳播時,它們往往會變得非常小,導致較早的層訓練速度非常慢或完全不訓練。這個問題在循環神經網絡(RNN)和深度前饋網絡中尤其嚴重。
1993 年,Geoffrey Hinton 發表論文 Autoencoders, minimum description length and Helmholtz free energy, 發表了關于自編碼器(Autoencoders) 的研究,自編碼器的概念至少在 1993 年之前就已經存在并被學術界所探討。
1997 年,Sepp Hochreiter 和 Jürgen Schmidhuber發表了論文 Long Short-Term Memory,為了解決 RNN 的梯度消失問題,提出了LSTM。
1998 年,Yann LeCun 等人發表論文Gradient-based learning applied to document recognition,改進了之前的 CNN,提出了LeNet-5,專為 MNIST 數據集手寫數字識別而設計,LeNet-5 引入了卷積、池化和激活函數的使用等關鍵概念,這些概念已成為現代深度學習的基礎。
2000s:深度學習的復興
2006 年,Geoffrey Hinton 等人發表論文A Fast Learning Algorithm for Deep Belief Nets,提出深度信念網絡(DBN)。這篇論文被認為是近代的深度學習方法的開始。
同年,還是 Geoffrey Hinton 等人發表論文 Reducing the Dimensionality of Data with Neural Networks,提出深度自編碼器。以上這兩篇論文都提出深層網絡訓練中 梯度消失問題的解決方案:逐層貪心預訓練,即通過無監督預訓練對權值進行初始化 + 有監督訓練微調。
還是2006 年,NVIDIA 推出 CUDA 框架,利用 GPU 的并行處理能力,將 GPU 用作通用并行計算設備,以加速各種計算任務,而不僅限于圖形處理。CUDA 框架大大提升了深度學習算法的效率。
2010s: 深度學習的突破與普及
2012 年,Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 的 AlexNet 在 ImageNet 大規模視覺識別挑戰賽 (ILSVRC) 中取得了巨大成功,首次采用 ReLU 激活函數,從根本上解決了梯度消失問題,于是拋棄了預訓練 + 微調的方法,完全采用有監督訓練。AlexNet 展示了卷積神經網絡 (CNN) 的強大功能,并標志著計算機視覺的轉折點,普及了深度學習技術。
2013 年 12 月 19 日,Google DeepMind 發表論文Playing Atari with Deep Reinforcement Learning,提出了 Deep Q-Network (DQN),將深度學習與強化學習相結合。 DQN 通過使用卷積神經網絡 (CNN) 估計 Q 值,成功在 Atari 游戲中實現了超越人類的表現。DQN 對人工智能和自動化控制系統產生了深遠影響。
2013 年 12 月 20 日,Kingma 和 Welling 發表論文 Auto-Encoding Variational Bayes,提出了變分自編碼器(VAE),展示了一種結合貝葉斯推理和深度學習的生成模型。VAE 通過編碼器 - 解碼器結構學習數據的潛在表示,并能夠生成新樣本。VAE 在圖像生成、異常檢測、數據壓縮等領域取得顯著成果。其創新方法為生成模型提供了概率框架,推動了深度學習在生成任務中的應用和發展。
2014 年 6 月 10 日,Ian Goodfellow 等人發表論文 Generative Adversarial Nets 提出生成對抗網絡(GAN),在圖像生成、圖像修復、超分辨率等領域取得了顯著成果,為生成模型帶來了新的方向。
圖:GAN 模型
2014 年 6 月 24 日,Google DeepMind 發表Recurrent Models of Visual Attention,使得注意力機制(Attention Mechanism) 開始受到廣泛關注。該論文采用了循環神經網絡(RNN)模型,并集成了注意力機制來處理圖像分類任務,開創了將注意力機制應用于深度學習模型的先河。
2014 年 9 月 1 日,Dzmitry Bahdanau、KyungHyun Cho 和 Yoshua Bengio 發表論文Neural Machine Translation by Jointly Learning to Align and Translate,將注意力機制(Attention Mechanism)引入機器翻譯,以提高長序列處理能力。它在機器翻譯的歷史中標志著一個重要的轉折點。
2015 年 5 月 18 日,Ronneberger 等人發表論文U-Net: Convolutional Networks for Biomedical Image Segmentation,提出了U-Net,U-Net 采用對稱的 U 形架構,通過跳躍連接融合不同層次的特征信息,實現高精度的分割。其設計有效解決了小樣本問題,廣泛應用于醫學影像分析、遙感圖像處理等領域,對圖像分割任務的發展產生了深遠影響。
圖:U-Net
2015 年 12 月 10 日,何凱明等人發表論文Deep Residual Learning for Image Recognition,提出了ResNet(殘差網絡),展示了一種通過殘差連接解決深層神經網絡訓練難題的方法。ResNet 在 ILSVRC 2015 競賽中獲得冠軍,顯著提高了深度學習模型的性能和可訓練性。其創新架構允許構建更深的網絡,推動了圖像識別、目標檢測等計算機視覺任務的發展,成為深度學習領域的重要基石。
圖:ResNet
2015 年 - 2016 年,Google,Facebook 相繼推出 TensorFlow、PyTorch 和 Keras,極大地促進了深度學習研究和應用的發展,使得復雜的神經網絡模型的開發和訓練變得更加便捷和高效。
2016 年, Google DeepMind 開發的 AlphaGo 擊敗了圍棋世界冠軍李世石,展示了深度強化學習的潛力。
2017 年,Google Brain 發表了Attention is All You Need,提出了 Transformer,徹底放棄了傳統的循環神經網絡(RNN)和卷積神經網絡(CNN)結構,轉而完全采用注意力機制來執行機器翻譯任務。這一創新猶如火星撞地球一般迅速橫掃了整個自然語言處理學術界。徹底改變了自然語言處理(NLP)領域。對后續的 BERT、GPT 等模型產生了深遠影響。
圖:Transformer
2018 年 6 月,OpenAI 發表了Improving Language Understanding by Generative Pre-Training,提出了 GPT,這是一個具有里程碑意義的大規模預訓練模型。
2018 年 10 月 11 日,Google AI Language 發表了BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,提出了 BERT,GPT 和 BERT,它們分別使用自回歸語言建模和自編碼語言建模作為預訓練目標。所有后續的大規模預訓練模型都是這兩個模型的變體。
圖:BERT
2020s: 深度學習的擴展與應用
2020 年 10 月 22 日,Google 團隊發表An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale,提出了 Vision Transformer(ViT),雖然不是第一篇將 Transformer 應用在視覺任務的論文,但是因為其模型 “簡單” 且效果好,可擴展性強(scalable,模型越大效果越好),成為了 transformer 在 CV 領域應用的里程碑著作,也引爆了后續相關研究。
2021 年 2 月 26 日,OpenAI 發表了Learning Transferable Visual Models From Natural Language Supervision,提出了 CLIP,通過對比學習方法,將圖像與自然語言文本進行配對,實現了多模態學習。具備零樣本學習能力。為多模態 AI 的研究和應用奠定了基礎,推動了圖像生成、理解和交互等領域的發展。
2021 年 7 月 15 日和 7 月 22 日,Google DeepMind 在 Natrue 分別發表論文Highly accurate protein structure prediction with AlphaFold,Highly accurate protein structure prediction for the human proteome,發布了 AlphaFold 2,AlphaFold 2 在第十四屆國際蛋白質結構預測競賽(CASP)上取得驚人的準確度,多數預測模型與實驗測得的蛋白質結構模型高度一致,引起舉世矚目。對生物醫學研究、藥物設計和生命科學產生了深遠影響。
2022 年 12 月 20 日,Stability AI 發表論文High-Resolution Image Synthesis with Latent Diffusion Models,發布了完全開源的 Stable Diffusion,展示了一種利用擴散過程生成圖像的方法,是 AI 繪畫領域的一個核心模型,能夠進行文生圖(txt2img)和圖生圖(img2img)等圖像生成任務。
圖:Diffusion Model
2022 年 7 月 12 日,David Holz 發布了 Midjourney,一個基于生成對抗網絡(GANs)和深度學習的 AI 平臺,通過用戶提供的文本描述生成高質量圖像。
2022 年 11 月 30 日,OpenAI 發布了GPT-3.5,其產品 ChatGPT 瞬間成為全球爆品。引起了全球學術界和工業界的大語言模型熱潮。以 ChatGPT 為代表的大語言模型向世人展露出了前所未有的能力。一大波大語言、多模態的預訓練模型如雨后春筍般迅速出現。
圖:ChatGPT
以后有機會專門出一期大模型的介紹。
2023 年 12 月 1 日,Albert Gu 和 Tri Dao 發表了論文Mamba: Linear-Time Sequence Modeling with Selective State Spaces,提出了 Mamba,這是一種新的不同于 Transformer 的處理長序列數據的神經網絡架構,能夠在保持高效率的同時,提供出色的性能。對于需要處理大量數據的應用場景,如自然語言處理、語音識別和生物信息學等領域,具有重要的實際應用價值。
圖:Mamba
2024 年 2 月 18 日,OpenAI 發布了 SORA,一種通過文本生成視頻的模型,結合了先進的 Transformer 和 GAN 架構,更多地使用了 CLIP,實現了高質量的文本到視頻生成。
圖:SORA 生成的視頻
2024 年 5 月 8 日,DeepMind 發表論文Accurate structure prediction of biomolecular interactions with AlphaFold?3,提出了 AlphaFold 3,以前所未有的精確度成功預測了所有生命分子(蛋白質、DNA、RNA、配體等)的結構和相互作用。與現有的預測方法相比,AlphaFold 3 發現蛋白質與其他分子類型的相互作用最高提高了一倍。
圖:AlphaFold 3 生成的蛋白質結構
綜上所述,本文詳細介紹了深度學習領域從 1940 年代至今的演變歷程,涵蓋了早期神經網絡模型、感知器、多層感知機、反向傳播算法、循環神經網絡、自編碼器、深度信念網絡、生成對抗網絡、Transformer 等重要里程碑。
然而,本文仍有一些不足之處和未盡事宜。比如,有文獻指出 1970 年 Seppo Linnainmaa 率先發表了反向傳播算法,但本文采用了較為普遍的說法,將其歸功于 Geoffrey Hinton。Hinton 本人也在 2019 年澄清,他并非反向傳播算法的發明者,而是將其發揚光大的重要推動者。
此外,由于深度學習近年來發展迅猛,本文未能涵蓋深度學習在各個行業和新興研究領域的最新整合進展和趨勢。也未能涵蓋近兩年各大企業和學術機構的大模型產品,希望未來能有更多的研究和討論,進一步完善和深化對這一領域的理解。
云計算技術發展編年史
范桂颶已于 2024-05-02 18:26:35 修改
1605,誕生二進制與萊布尼茨之夢
1605 年,英國哲學家、政治家、科學家、法學家、演說家和散文作家弗朗西斯?培根(Francis Bacon)基于二元組合提出了一套系統,可以把 26 個字母轉化為 “二進制數”,在十六世紀用于傳遞機密信件。編寫密碼時,一組為五個字母。例如:aaaaa 表示字母 A,aaaab 表示字母 B。以此類推,5 位序列可以表示 32 個可能值,通過改變字母的寫法來達到加密的效果。
培根曾道,這個實現思路可用于任何事物:“只要這些事物的差異是簡單對立的,比如鈴鐺和喇叭響或不響,燈光和手電筒亮或不亮”。這是二進制數系統相對原始的提出及應用,證實了通過二元組合法是可以使用具有簡易雙重特征的事物來描述邏輯的。例如:使用數字 0、1 來表述邏輯是、非。這就是布爾代數的原型。
現代二進制記數系統由德國哲學家、數學家戈特弗里德?萊布尼茨(德語:Gottfried Wilhelm Leibniz)于 1679 年設計,并寫于《二進制算術》一文。1701 年,萊布尼茨向巴黎皇家學會提交了一篇正式論文《數字科學新論》但卻遭到時任科學院院長封單內(De Fontenelle)的拒絕,理由是看不出二進制的用處。
隨后,萊布尼茨在研究并補充了中國伏羲先天圓圖(先天六十四卦方圓圖)來佐證二進制的用途之后,于 1703 年 5 月 5 日在法國《皇家科學院院刊》發表了標題為《二進位算術的闡述》,副標題為《論只使用符號 0 和 1 的二進制算術,兼論其用途及它賦予伏羲所使用的古老圖形的意義》的論文,該論文完整的介紹了二進制數的表示、計算與換算。
萊布尼茨使用數字 0 表示空位,數字 1 表示實位。這樣一來,所有的自然數都可以使用 0 和 1 這兩個數字來表示。例如:0001 的數值為 2 的 0 次方,0010 的數值為 2 的 1 次方,0100 的數值為 2 的 2 次方,1000 的數值為 2 的 3 次方。
由于這篇文章的關系,早期曾有人認為現代計算機的二進制系統來自八卦圖,但實際上這只是一個美麗的誤解,梁啟超先生對此還曾有過證明。其實與二進制數相關的系統早在古埃及、古印度和古中國都有出現。萊布尼茨又是比較早接觸中國文化的西方學者,他對中國文化一直抱有濃厚的興趣。所以當他在機緣巧合之下從一位法國傳教士白晉(字明遠,原名若阿基姆?布韋,法語:Joachim Bouvet)手上中得到了得到了邵雍先生(字堯夫,自號安樂先生,人又稱百源先生,謚康節,后世稱邵康節,北宋五子之一,易學家、思想家、詩人)的先天圓圖之后,便曉有興致的進行了研究并發現了可以通過二進制來對齊其進行解讀,以至于在發表文章中說明先天圓圖中已經包含了他所發明的東西。
《易經》中的伏羲先天八卦圖由符號系統和概念系統組成,符號系統叫掛(八卦和六十四卦),概念系統就是與掛爻符號相匹配的綴辭(彖辭或象辭),用于占筮。其中,符號系統就是我們所熟悉的:太極生兩儀,兩儀生四象,四象生八卦,八卦相重生六十四卦。兩儀就是陽爻(連線)和陰爻(斷線)。四象就是兩個符號組成一個組合的全排列。以此類推,三個符號一組的全排列就是八卦。六個符號一組的全排列就是六十四卦。
萊布尼茨曾在《1 與 0,一切數字的神奇淵源。這是造物的秘密美妙的典范,因為,一切無非都來自上帝》這篇手稿中斷言:“二進制乃是具有世界普遍性的、最完美的邏輯語言”。只是二進制在萊布尼茨的時代并沒有得到推廣,直到計算機被發明后,二進制才真正實現了其應用。數字電子電路中,邏輯門的實現直接應用了二進制,因此現代的計算機和依賴計算機的設備里都用到二進制。每個數字(0 或 1)稱為一個比或比特(Bit,Binary digit 的縮寫)。
在數學領域,萊布尼茨更為著名的是與牛頓各自獨立地創建了微積分。我們至今仍在沿用的微分符號 “dx”、“dy” 與積分符號 “∫x” 正是由萊布尼茨發明的,他認為通過選擇良好的符號,可以大大的簡化運算的復雜性,人們不用過多思考就可以很容易地進行復雜的演算,甚至將這樣的運算變成一種天然的過程。
萊布尼茨是一位世間少有的天才及通才,除了數學領域,還在物理學、自然學、政治學、哲學、神學、倫理學、歷史學、語言學等領域中都留有著作。他夢想所有的知識都可以通過數學語言表達出來,而演算規則將會揭示這些命題之間所有的邏輯關系。為了發展這一種邏輯演算,萊布尼茨進行了很多嘗試,他得到的一些結果已經具有后來布爾的邏輯代數的雛形。也許就是這么一位天才,才得以提出這樣一個偉大的構想:萊布尼茨希望可以將人類的思維像代數運算那樣符號化,規則化,從而讓笨的人通過掌握這樣的規則變得聰明,更進一步的制造出可以進行思維運算的機器,將人類從思考中解放。很難說這一構想不是對未來計算機以及人工智能的預言,這一偉大構想被后世稱之為萊布尼茨之夢!
1725,誕生穿孔紙帶
1725 年,法國人巴西爾?布尚(Basile Bouchon)發明了穿孔紙帶,它是歷史上最早的的數據存儲介質之一。穿孔紙帶是一種很薄的紙片,面積為 190×84 毫米,最初用于儲存紡織機工作過程控制的信息。
它的工作原理如下圖,紡織機在編織過程中,編織針會往復滑動,同時編織針會根據穿孔紙帶上的小孔是否存在來判斷是否應該進行勾線,繼而編織出不同的圖案。
這種根據 “存儲” 在穿孔紙帶上的 “圖案程序” 來進行編織作業的方式,被認為是半自動化機械領域中的第一個工業應用。
1801 年,法國人約瑟夫?瑪麗?雅卡爾(Joseph Marie Jacquard)在巴西爾?布尚發明的基礎上對早期紡織機進行了改良,基于類似的原理,實現了更加高效的自動化編織復雜的圖案,大大提高了編織效率和質量。這種成熟的機器后來被稱為 Jacquard 編織機,是工業革命早期自動化機械的重要里程碑之一。
18 世紀末期到 19 世紀后期,穿孔紙帶被廣泛用于 “程序化” 的織機和其他工業機器。現在回頭看,Jacquard 編織機的發明影響深遠,不僅推動了紡織業的發展,還為計算機誕生提供了啟示,這種根據需要進行制作穿孔紙帶的工作也被視為現代 “編程” 的起源。
1846,誕生穿孔指令帶
1846 年,蘇格蘭人亞歷山大?貝恩(Alexander Bain)發明了電報打字機(Electric printing telegraph),它能夠將電信號轉化為可打印的文字,這被認為是第一臺現代打印機的雛形。
亞歷山大?貝恩在電報打字機中沿用了穿孔紙帶的思路,改進為了體積更小的穿孔指令帶。穿孔指令帶上的每一行代表一個字符,利用 01 二進制編碼,以規定格式排列就可以代表規定的信息。
1890,誕生穿孔卡制表機
1890 年,美國統計學家赫爾曼?何勒里斯(Herman Hollerith)發明了穿孔卡制表機。通過該機器可以制作同時最多存儲 960bits 數據量的穿孔卡。
結合穿孔卡讀取設備,它能將穿孔卡以 01 二進制方式進行讀取并完成數據統計。這項技術最早應用于美國人口普查局的人口普查工作中,后來被廣泛應用在工業檢索以及數據統計領域,也標志著半自動化數據處理系統時代的開始。
1896 年,赫爾曼?何勒里斯成立了制表機公司,這也是后來 IBM 公司的前身。
1936,誕生圖靈完備性和圖靈機
20 世紀初的數學界最炙手可熱的討論話題莫過于哥德爾的不完全定理(G?del’s incompleteness theorem)。
在該定理提出之前,數學家們總是認為一個數學問題的求解也許困難重重,但理論上總會有一個確定的答案。一個數學命題,要么是真的,要么是假的。但哥德爾的不完全定理表明,在任何一種包括基本算術的公理化形式系統中,必然存在一些無法被證明(True)或證偽(False)的命題。
對此,數學家們的信仰被震撼,這意味著,即使是最基礎的數學理論也無法完全證明其內部所有命題的真假。于是數學家們開始寄希望于與數學緊密相依的邏輯學,試圖為陷入了危機的數學找到一條出路。
這些邏輯學家包括當時在劍橋的貝特朗?羅素、阿爾弗雷德?懷特海等,而當時正在劍橋求學的阿蘭?圖靈(Alan Mathison Turing)也同樣被糾纏到這個數學困境中。
直到 1936 年,圖靈向倫敦的數學雜志投了一篇題為《On Computable Numbers, with an Application to the Entscheidungsproblem》(論可計算數及其在判定性問題上的應用)的論文。該論文中提到了一種數學模型,該模型討論的是一種有窮的、構造性的問題的求解思路。
圖靈以數學領域的布爾代數(Boolean,Ture or False)為基礎,將邏輯領域中的任意命題(可轉化為數學符號)都用一種通用的機器來表示和演算,并且能按照一定的規則推導出結論,即:將論據(輸入)基于某種規則(指令集)來進行論證(計算)之后就肯定能得到結論(輸出)。這就是可計算性理論,是一種嚴格的邏輯和數學框架,限定了什么樣的問題是求解的,什么樣的問題是無法求解的。也就是所謂圖靈完備的。
而圖靈機(Turing Machine)就是一種實現了圖靈完備的演算機器,能制作圖靈機的數學問題,它必然有解。圖靈在論文中給出了圖靈機的設計思想,利用機器來模擬人使用紙筆進行數學運算的過程,通過一個機械操作的讀寫頭去模擬筆和眼睛,可以在紙帶上寫上或者擦除某個符號,也可以像眼一樣移動到紙的另一個位置。為了模擬人的這種行為,一個典型的圖靈機應該具有以下組成部分:
1.一條無限長的穿孔指令帶(輸入 / 輸出存儲):指令帶被劃分為一個個小格子,每個格子用于表示一個有限字母表上的符號。
2.一個穿孔指令帶讀寫頭(讀 / 寫):讀寫頭可以在指令帶上左右移動,它能讀出當前格子上的符號,并能改變當前格子上的符號。
3.一套控制規則(指令集):它根據當前機器所處的狀態以及當前讀寫頭所指的格子上的符號來確定讀寫頭下一步的動作,并改變狀態寄存器的值,令機器進入一個新的狀態。
4.一個狀態寄存器(Register):它用來保存圖靈機當前所處的狀態,并具有一個有限的狀態機。
盡管圖靈機當時還只是一紙空文,但其思想奠定了整個現代計算機發展的理論基礎。
1942,誕生世界上第一臺專用計算機
在 1937-1942 年間,美國工程師約翰?阿塔納索夫(John Atanasoff)和克利福特?貝瑞(Clifford Berry)基于圖靈機的理論基礎設計并研制了實際上第一臺專用計算機 Atanasoff-Berry Computer(阿塔納索夫 - 貝瑞計算機),簡稱 ABC 計算機。
之所以稱之為 “專用”,是因為 ABC 不可以進行編程,僅能用于求解線性方程組。但 ABC 的誕生仍開創了多項現代計算機的基礎要素,包括二進制算術方式和電子開關器件。
1945,誕生馮?諾依曼體系結構
1945 年,馮?諾依曼(John von Neumann)在論文《First Draft of Report o the EDVAC》(第一份草案)中提出了馮?諾依曼體系結構,又稱:存儲程序計算機。即:程序本身是存儲在主機內存中的,可以通過加載不同的程序來解決不同的問題。
馮?諾依曼體系結構奠定了現代計算機的體系結構,它包含 5 大計算機組成部分,我們現在也習慣稱之為主機和外設。
主機:
-
CPU(Central Processing Unit,中央處理器)
-
處理單元(Processing Unit,PU):又稱數據通路(Data Path)或運算器,包含了算術邏輯單元(Arithmetic Logic Unit,ALU)和處理器寄存器(Processor Register)。用于完成各種算術和邏輯運算。
-
控制器單元(Control Unit,CU):包含了指令寄存器(Instruction Register)和程序計數器(Program Counter)。用于控制程序的流程(程序流),通常是條件判斷和跳轉。
-
內存:包括用于存儲數據(Data)和指令(Instruction)的主存儲器和容量更大但速度卻慢的外部存儲器。
外設:
- 輸入 / 輸出設備:鍵盤、鼠標屬于輸入設備,顯示器是輸出設備,網卡即是輸入設備又是輸出設備。
回頭看,現代計算機的誕生經歷了 3 個重大的歷史節點:
1.阿蘭?圖靈(Alan Mathison Turing)揭示了計算機能不能做出來:從理論上證明了計算機的可行性。
2.阿塔那索夫(John Vincent Atanasoff)把計算機做出來了:把世界上第一臺計算機做了出來。
3.馮?諾依曼(John von Neumann)指示了計算機應該怎么做:存儲程序計算機,奠定了現代計算機的體系結構。
1946,誕生了世界上第一臺通用計算機
1946 年 2 月 14 日,世界上第一臺通用計算機 ENIAC(Electronic Numerical Integrator And Computer,電子數值積分計算機)于美國賓夕法尼亞大學誕生,發明人是美國人莫克利(John W.Mauchly)和艾克特(J.PresperEckert)。
ENIAC 是第一代電子管計算機,是圖靈完備的,并且能夠重新編程以解決各種計算問題。同時,ENIAC 也是一個不折不扣的龐然大物,用了 18000 個電子管,占地 150 平方米,重達 30 噸,耗電功率約 150 千瓦,每秒鐘可進行 5000 次運算。由于使用的電子管體積很大,耗電量大,易發熱。因而,ENIAC 的工作時間不能太長,最初只用于幫助美國陸軍的彈道研究實驗室(BRL)計算火炮的火力表。
- ENIAC 程序員在工作,實際上,女性才是最早的程序員主力軍。
1955,第一次提出了分時多用戶共享的概念
串行系統
最初的計算機系統都是串行運作的,一次只能錄入執行一個程序,當程序進行緩慢的 I/O 操作時,CPU 只好空轉等待。這不僅造成了 CPU 的浪費,也造成了其他計算機硬件資源的浪費。
批處理處理系統
那時的計算機科學家們都在思考如何能夠提高 CPU 的利用率,直到提出了多道程序設計(Multi-Programming),這也是批處理 / 多任務處理系統的前身。多道程序設計的運行原理就是一次性把一批任務都提交給計算機,然后等待執行結果。并且中途不能和計算機進行交互。
在整個 20 世紀 50-60 年代,多道程序設計的討論非常流行。它使得 CPU 能夠一次性讀取多個程序到內存,先運行第一個程序直到它出現了 I/O 操作,此時 CPU 切換到運行第二個程序,即:第 n+1 個程序得以執行的條件是第 n 個程序進行 I/O 操作或已經運行完畢。
可見,多道程序設計的特征就是:多道程序、宏觀上并行、微觀上串行。有效的提高了 CPU 的利用率,也充分發揮著其他計算機系統部件的并行性。
但多道程序設計存在一個問題, 就是它并不會考慮分配給各個程序的時間是否均等,很可能第一個程序運行了幾個小時都不會出現 I/O 操作,故第二個程序沒有運行。
最初,這個問題是讓人接受的,因為那時的科學家們更在意最終的輸出結果,而不是誰先誰后的問題。直到有人提出了新的需求 —— 多用戶同時使用計算機。
分時系統(多用戶共享交互式操作系統)
1955 年,美國麻省理工學院(MIT)的約翰?麥卡錫(John McCarthy,AI 概念提出者,1971 年獲圖靈獎)教授提出了 Time-Sharing(分時)系統的概念,希望以此來解決多人同時使用一臺計算機的訴求。
所謂 “分時” 的含義是將 CPU 占用切分為多個極短(1/100sec)的時間片,每個時間片之間輪詢地執行著不同的程序。在一個分時系統中,能夠允許幾個、幾十個甚至幾百個用戶通過終端機連接到同一臺大型主機,將 CPU 時間分片與內存空間按一定的時間周期,輪流地切換給各終端用戶的程序使用。由于時間間隔很短,所以讓每個用戶感覺像是獨占了計算機一樣。
分時系統實現了讓多個程序共享計算機硬件和軟件資源的效果,本質是一個多用戶交互式操作系統。
1959,第一次提出了虛擬化技術的概念
時間來到 1959 年 6 月 15 日,牛津大學的計算機教授,克里斯托弗?斯特雷奇(Christopher Strachey)在國際信息處理大會(International Conference on Information Processing)上發表了一篇名為《大型高速計算機中的分時系統》(“Time sharing in large fast computers”)的學術報告,他在文中首次提出了 “虛擬化” 的基本概念,還論述了什么是虛擬化技術。這篇文章被認為是最早的虛擬化技術論述,從此拉開了虛擬化發展的帷幕。
- Christopher Strachey,這篇文章記錄了斯特雷奇的生平
https://history.computer.org/pioneers/strachey.html
- 《Time sharing in large fast computers》影印
https://archive.org/details/large-fast-computers
斯特雷奇在論文的開頭這么寫到:
Time sharing, in the sense of causing the main computer to interrupt its program to perform the arithmetic and control operations required by external or peripheral equipment, has been used on a limited scale for a long time. this paper explores the possibility of applying time sharing to a large fast computer on a very extensive scale.
?
“分時(Time sharing)是指使計算機中斷正在運行的程序以執行外圍設備所需要的算術與控制操作,長期以來一直在有限的范圍內使用。本文探討了將分時(Time sharing)的概念應用到大型高速計算機中的可能性。”
本質上,斯特雷奇是在討論如何將分時系統的實現方式融入到多道程序設計的方式當中,從而實現一個可多用戶操作(CPU 時間切片),又具有多程序設計效益(CPU 中斷讓出)的虛擬化系統。可見,虛擬化概念最初的提出就是為了滿足多用戶同時操作大型計算機,并充分利用大型計算機各部件資源的現實需求。而對這一需求的實現與演進,貫穿了整個大型機與小型機虛擬化技術的發展歷程。
1962,誕生了第一臺超級計算機和專用操作系統 — Atlas
1960 年,英國啟動 Atlas 超級計算機(Super Computer)項目。
超級計算機(Super Computer),又稱巨型機,有著極強的計算速度,通常用于科學與工程上的計算,譬如天氣預測、氣候研究、運算化學、分子模型、天體物理模擬、汽車設計模擬、密碼分析等。超級計算機的創新設計在于把復雜的工作細分為可以同時處理的工作并分配到不同的 CPU 上。它們在進行特定的運算方面表現突出,但在通用運算方面卻表現一般。
超級計算機的計算速度與內存性能有關,所以程序的數據結構需要經過精心的設計來確保內存數據的讀寫效率,傳輸速率的細微差別可以導致運算能力的巨大差別。
1962 年 12 月 7 日,第一臺 Atlas 超級計算機 Atlas 1 誕生,Atlas 是第二代晶體管計算機,被認為是當時世界上最強大的計算機。Atlas 開創了許多沿用至今的軟件概念,包括第一次實現了名為 Atlas Supervisor 的底層資源管理組件,Supervisor 通過特殊的指令或代碼來管理主機的硬件資源。還第一次實現了內存分頁技術(Paging Techniques)以及當時被稱為一級存儲(One-Level Store)的虛擬內存(Virtual Memory)技術。
Supervisor 就是我們現在稱之為 Operating System(操作系統)的前身,還被叫過一段時間的 Master Control Program(主控程序),但最終更貼切的 Operating System 勝出了。另外,Hypervisor(虛擬機管理程序)的命名也來源于 Supervisor。在西文中,Super 和 Hyper 是同意詞,意為超級,但詞義上 Hyper 比 Super 還要高級一些。
- Atlas 1 超級計算機。
1964,誕生了第一個分時共享操作系統 — Multics
1961 年 11 月,由麻省理工學院的費爾南多?科爾巴托(Fernando Corbato,1990 年獲得圖靈獎)教授帶領團隊開始研發 CTSS(Compatible Time-Sharing System,兼容性分時系統)項目,并由 IBM 提供主機設備和工程師進行支持。CTSS 開創性的實習了多用戶硬件隔離和多用戶獨立的文件系統技術,極大地影響了后來的分時系統的設計,包括 IBM 著名的 TSS(Time Sharing System)技術。
同年,在麻省理工學院百周年紀念典禮上,約翰?麥卡錫(John McCarthy)第一次提出了 Utility Computing(公共計算)的概念。約翰?麥卡錫認為:“如果我設想的那種計算機(即:分時系統,同時支持多人同時使用的計算機)能夠成真,那么計算或許某天會像電話一樣被組織成公共服務(Utility Computing,公共計算服務),就像生活中的水、電、煤氣一樣,被每一個人尋常地使用。那將是一種全新的重要工業的基礎。”
1964 年,麥卡錫在大西洋月刊發表了一篇題為《The Computers of Tomorrow(明日計算機)》的文章,詳細分析了 Utility Computing Service(公共計算服務)與公共電網之間的異同點。文章指出,計算想要成為像電網那樣的公共服務,需要關注三個問題:
1.接口:用戶如何和資源進行對接?
2.服務設備:用戶通過什么設備將資源轉換成服務?
3.產品同質性:電總歸是電,而計算是一種復雜的服務,存在多樣性,存在不同的編程語言和硬件,如何兼容、交互?
這似乎是云計算最初的遠景,只是那時還沒有網絡將人們連接起來。
在《The Computers of Tomorrow》的影響下,麻省理工學院(MIT)和 DARPA(美國國防高級研究計劃局)下屬的 IPTO(信息處理技術辦公室)共同啟動了著名的 MAC(Multiple Access Computing,多址計算)項目。
DARPA 還專門提供了約 200 萬美元的項目津貼。其目的是在 CTSS 所取得的經驗之上,開發出一種具有多用戶交互能力的、且具有多道程序處理能力的分時共享操作系統(多人可同時使用的電腦系統)— Multics 系統,以取代當時廣泛使用的批處理操作系統。
Multics(Multiplexed information and Computing Service,多路信息計算系統)意為多用戶、多任務、多層次(Multi-User、Multi-Processor、Multi-Level),目標是連接 1000 部終端機,同時支持 300 個用戶在線。Multics 項目是 Unix 操作系統的前身。
MAC 項目組最終由貝爾實驗室(Bell Labs),麻省理工學院(MIT)以及通用電氣公司(General Electric)組成。其中,由于 GE(通用電氣公司)被選為硬件供應商,IBM 被踢出局。
1965,IBM 開啟了大型計算機的虛擬化之路
1964 年,從 MAC 項目中出局的 IBM,在 Thomas J. Watson Research Center(紐約沃森研究中心)進行 M44/44X 計算機項目的研究。M44/44X 項目基于 IBM 7044 大型機(M44),并通過軟件和硬件結合的方式來模擬出多個 7044 虛擬機(44X)。
他們為操作系統的每一部分建立一個 7044 鏡像。每個鏡像叫做 7044(M44)/44X。允許用戶在同一臺主機上運行多個操作系統,讓用戶盡可能的充分利用昂貴的大型機資源。M44/44X 實現了多個具有突破性的虛擬化概念,包括部分 / 半硬件共享(Partial Hardware Sharing)、分時(Time Sharing)、內存分頁(Memory Paging)以及虛擬內存(Virtual Memory)。M44/44X 項目首次使用了 “Virtual Machine” 這一術語,所以被認為是世界上第一個支持虛擬機的計算機系統。
現在看來,雖然 M44/44X 只實現了部分的虛擬化功能,但其最大的成功在于證明了虛擬機的運行效率并不一定比傳統的方式更低。使得 IBM 的工程師們更好地理解了多道程序設計(Multi-Programming)的理念。M44/44X 是 IBM 虛擬機概念的開端。他們認為,虛擬機就是真實機器的副本,只是內存減少了。
1965 年 8 月,IBM 推出了著名的 System/360(簡稱 S/360)大型計算機系統。System/360 取自一圈 360 度,意為滿足每個用戶的需要而設計。你或許有所耳聞,System/360 的開發過程被稱為計算機發展史上最大的一次豪賭。為了研發 System/360,IBM 征召了六萬多名新員工,創建了五座新工廠,投資 50 億美元。即便如此,System/360 的出貨時間仍被不斷推延。理佛瑞德?布魯克斯(Frederick P. Brooks, Jr.)是當時的項目經理,他事后根據這項計劃的開發經驗寫出了同樣著名的《人月神話:軟件項目管理之道》(“The Mythical Man-Month: Essays on Software Engineering”),記述了人類工程史上一項里程碑式的大型復雜軟件系統的開發經驗,至今被稱為軟件項目管理的圣經。System/360 是第三代中小規模集成電路計算機,同時也是世界上第一臺大型機。
注:大型計算機使用了專用的處理器指令集、操作系統和應用軟件,是硬件和專屬軟件一體化的計算機系統。大型機與超級計算機不同,大型機追求的 RAS(Reliability, Availability, Serviceability)高可靠性、可用性和可維護性。大型機的性能并不能用單一的每秒并行浮點計算能力來體現,大型機的運算任務主要受數據傳輸與轉移、可靠性及并發處理性能所限制。大型機更傾向整數運算,如訂單數據、銀行業務數據等,超級計算機則是更強調浮點計算性能如天氣預報,大型機在處理數據的同時需要讀寫或傳輸大量信息,如海量的交易信息、航班信息等等。
- System/360 大型計算機。
- 《人月神話:軟件項目管理之道》。
1967 年,科學家 L.W. Comeau 和 R.J. Creasy 為 System/360 大型機量身研發了 CP-40/CMS 分時共享操作系統。
CP-40/CMS 被認為是第一個實現了基于硬件的完全虛擬化操作系統(Full Hardware Virtualization)。支持 TSS(Time Sharing System,最原始的 CPU 虛擬化技術)、虛擬內存、多任務處理,還支持通過捕獲特權指令(例如 I/O 操作)和內存缺頁(Page Faults)等異常,然后交由控制程序(Control Program)進行模擬的方式來實現虛擬機(最多可提供 14 個虛擬機)。用戶可以在虛擬機之上安裝其他的操作系統,多個操作系統之間互相隔離,就像運行在一臺獨立的主機之上。
CP-40/CMS 最大的成就在于提出并實現了 Trap-And-Emulate(捕獲 - 模擬)這一經典的虛擬機運行方式,早期的 VMware 虛擬機也沿用著這一設計。其基本架構和用戶界面也被延續到了 IBM 具有革命性意義的 CP/CMS 操作系統系列中。CP/CMS 系列為 System/360 大型機的成功打下了堅實的基礎,逐漸發展成為了 IBM 的 PowerVM(運行于 Power 服務器)和 z/VM(運行于 IBM Z 和 IBM LinuxONE 服務器)的大型機虛擬化產品線。
現在我們知道,IBM System/360 取得了巨大的商業成功。System/360 不僅提供了新型的 CP-40/CMS 分時共享操作系統,還解決了當時 IBM 低端系統與高端系統無法兼容的問題。使得單一操作系統可以適用于整個大型機系列的產品,這就是 System/360 系列大型機獲得成功的關鍵之一。
綜上可見,虛擬化技術的應用和發展源于大型機對分時系統的需求。這種通過硬件的方式來生成多個可以運行獨立操作系統軟件的虛擬機實例,解決了早期大型計算機只能單任務處理而不能分時多任務處理的問題。
1965,誕生了第一臺小型計算機
1960 年,DEC(Digital Equipment Corporation,數字設備公司,是計算機歷史上最有影響力的公司之一)推出試驗性的 PDP-1(Programmed Data Processor,程序數據處理機)小型計算機。直到 1965 年 3 月 28 日,DEC 才正式推出了世界上第一臺真正意義上的小型機(Mini Computer)PDP-8。
關于 Mini Computer 名字的由來有這樣的一個小故事,時任 DEC 海外銷售主管的約翰?格倫將 PDP-8 運到英國,發現倫敦街頭正在流行 “迷你裙”(Mini),姑娘們爭相穿上短過膝蓋的裙子,活潑輕盈,顯得那么嫵媚動人。他突然發現 PDP 與迷你裙之間的聯系,所以創造了 Mini Computer 這個有趣的名字。
PDP-8 小型機簡化了大型機的功能,但相對也價格低廉,在當時它的售價只有 18500 美元,比當時任何公司的電腦產品都低,很快便成為 DEC 的主力產品,并引發了當時計算機市場的小型化革命。而 PDP-8 則被認為是 PC(個人電腦)的先驅者。
1973-1977,誕生 C 語言和可移植的 UNIX 分時共享操作系統
1950 年代末期,隨著操作系統的發展,大量的計算機編程語言也隨之涌現。最初,這些編程語言都是圍繞著單個操作系統展開的,只能為 UNIVAC、IBM700 等主機編寫應用程序。這樣的狀況使得不同操作系統之間的程序移植幾乎不可能完成。對此,一些美國計算機科學家們開始提倡研究和開發出一種與硬件無關的科學用程序設計語言。
1958 年 5 月 27 日至 6 月 1 日,GAMM(Gesellschaft für Angewandte Mathematik und Mechanik,德國的應用數學和力學學會)和 ACM(Association for Computing Machinery,國際計算機學會)聯合為新的設備無關編程語言定下研究目標,并命名為 IAL(International Algebraic Language,國際代數語言),后改名為 ALGOL(ALGOrithmic Language,算法語言)。
不久后,艾倫·佩利(Alan J.Perlis,圖靈獎獲得者)在巴黎舉行的軟件專家討論會上發表了《算法語言 ALGOL 60 報告》,標志著程序設計語言成為了一門獨立的科學學科。ALGOL 60 是計算機發展史上第一個清晰定義的高級編程語言,2002 年,圖靈獎得主 Edsger Dijstra 將 ALGOL 60 的誕生稱為 “一個絕對的奇跡”,標志著 “計算機科學” 的誕生。
1963 年,英國劍橋大學在 ALGOL 60 的基礎上推出了 CPL(Combined Programming Language)編程語言,相較于 ALGOL 60,CPL 更加接近硬件,但也更加復雜,難以開發大規模程序。
1967 年,編程語言和編譯器科學家馬丁?理查茲(Martin Richards)在訪問麻省理工學院的時候在 CPL 的基礎上做了簡化后推出了 BCPL(Base Combined Programming Language,基礎組合程序設計語言)編程語言。BCPL 是一門 “無類型” 的編程語言,它僅能操作機器字(Machine word)這一種數據類型。
回到操作系統發展的主線,1969 年,Multics 項目的交付已經延期了兩年(Multics 始于 1964 年,最初的交付期限是 1967 年),遠遠超出了預算。由于受不了 Multics 項目的緩慢進展,Bell(貝爾實驗室)決定退出 Multics 計劃。
作為項目成員之一,來自 Bell 的 Ken Thompson(肯?湯普遜)負責以 BCPL 語言為基礎,又作了進一步的簡化,設計出了很簡單且很接近硬件的 B 語言。其名字取的是 BCPL 的第一個字母。Thompson 還用 B 語言編寫了一個叫做 Space Travel(太空大戰)的游戲,這個游戲需要運行在 Multics 上。但是當 Bell 退出了 Multics 后,也就意味著 Thompson 失去了玩 Space Travel 的主機。
由于 Thompson 對這個自己開發出來的游戲非常喜愛,所以他找來了一臺空閑的 DEC PDP-7 小型機,但是這臺主機并沒有操作系統,于是 Thompson 著手為 DEC PDP-7 開發一個。在獨自經過 4 個星期的奮斗后,Thompson 以匯編語言寫出了一組內核程序,包括:一個匯編器、一個簡單的 Shell(命令解析器)、以及一個小的文件系統,用于運行 Space Travel。
當完成之后,Thompson 懷著激動的心情把身邊同事 Dennis M.Ritchie(丹尼斯?里奇)叫過來一起游戲。很可惜,Ritchie 表示對他的游戲不感興趣,但是對他編寫的操作系統很感興趣,并加入一起開發。
也許是對 Multics 項目的怨念,最初 Thompson 將自己的這個操作系統取名為 Uni-plexed Information and Computing Service(沒路信息計算系統),與 Multiplexed information and Computing Service(多路信息計算系統)相反,簡稱為 UNICS,后來取其諧音,就稱其為 UNIX 了。
那時候的 UNIX 是使用匯編語言寫的,Thompson 和 Ritchie 在做內核移植開發時,感覺使用匯編語言很難實現。所以開始切換到 B 語言來。后來在 PDP-11 發布后,由于 PDP-11 提供了多種不同規格大小的基本對象,例如:一字節長的字符、兩字節長的整型數、四字節長的浮點數等等。又由于 B 語言是一種無類型的編程語言,無法處理這些不同規格大小的對象,也沒有提供單獨的操作符去操作它們。所以為了將 UNIX 移植到 PDP-11,Ritchie 開始著手改進 Thompson 的 B 語言。
1972 年,Ritchie 以 B 語言為基礎開發了 C 語言(取 B 的下一個字母),并為其創造了一系列數據類型。C 語言最初嘗試通過向 B 語言中增加數據類型的想法來處理那些不同類型的數據。和大多數語言一樣,在 C 中,每個對象都有一個類型以及一個數值。類型決定了可用于數值的操作的函數,以及數值占用的內存空間大小。
1973 年初,C 語言的主體完成了,它既保持了 B 語言的優點(精煉、接近硬件),又克服了 B 語言的缺點(過于簡單,數據無類型)。于是 Thompson 和 Ritchie 開始著手使用 C 語言在 PDP-11 上重寫 UNIX。這是 C 語言第一次被應用在操作系統的內核開發上。可見,從一開始,C 語言就是為系統級編程而設計,程序的運行效率至關重要。
- PDP-11 前面的 Ken Thompson(坐著)和 Dennis M.Ritchie(站著)。
1974 年,Thompson 和 Ritchie 發表了第一篇關于 UNIX 的論文《The UNIX Time Sharing System》(UNIX 分時共享操作系統),從此 UNIX 廣為人知。
1977 年,Dennis M.Ritchie 跨時代的論文《可移植的 C 語言編譯程序》,標志 UNIX 成為了世界上第一個可移植的操作系統。與主機硬件設備完全解耦的 C 語言和 UNIX 使得程序員這門職業得以誕生,計算機技術不再是科學家們的專屬,程序員們走向了臺前。
1978 年,Thompson 和 Ritchie 合作出版了《C 程序設計語言》的第一版,也被 C 程序員稱作 “K&R C”。這是是第一本系統性介紹 C 語言編程方法的書籍,在 C 語言的發展和普及過程中起到了非常重要的作用,也被視為是 C 語言的業界標準規范,譽為 “C 語言圣經”,至今仍然廣泛使用。
Thompson 和 Ritchie 因在計算機領域做出的杰出貢獻,于 1983 年獲得了圖靈獎。
就這樣 UNIX 和 C 語言完美地結合成為了生命共同體,隨著 UNIX 的發展,C 語言也得到了不斷的完善。因為 C 是編寫 UNIX 的語言,因此后來也成了最受歡迎的系統程序語言之一。
UNIX 和 C 語言的結合是一個偉大的時刻,在此之前,使用匯編語言來編寫能夠發揮計算機最高效能的操作系統是業界共識。而 C 語言為 UNIX 所帶來的可移植性在那時可以說是極具創新意義。從此以后,當一款新的主機出現時,程序員再也不用需要重復發明輪子了。
1974,第一次提出了 VMM 的概念
1974 年,Gerald J. Popek(杰拉爾德?J?波佩克)和 Robert P. Goldberg(羅伯特?P?戈德堡)在合作論文《可虛擬第三代架構的規范化條件》(Formal Requirements for Virtualizable Third Generation Architectures)中提出了一組稱為虛擬化準則的充分條件,又稱波佩克與戈德堡虛擬化需求(Popek and Goldberg virtualization requirements)。
論文中定義了虛擬化系統結構的三個基本條件。滿足這些條件的控制程序才可以被稱為虛擬機監控器(Virtual Machine Monitor,簡稱 VMM):
1.資源控制(Resource Control):控制程序必須能夠管理所有的系統資源。
2.等價性(Equivalence):在控制程序管理下運行的程序(包括操作系統),除時序和資源可用性之外的行為應該與在沒有控制程序的時候保持完全一致,且預先編寫的特權指令可以自由地執行。
3.效率性(Efficiency):絕大多數的客戶機指令應該由主機硬件直接執行而無需控制程序的參與。
該論文盡管基于簡化的假設,但上述條件仍為評判一個計算機體系結構是否能夠有效地支持虛擬化提供了一個便利方法,也為設計可虛擬化的計算機架構給出了指導原則。為未來 40 多年的虛擬化技術的快速演進奠定了理論基礎:定義了什么樣的技術才能叫做虛擬化,什么樣的條件才能滿足虛擬化的定義。
同時,Gerald J. Popek 和 Robert P. Goldberg 還在論文中介紹了兩種 Hypervisor 類型。
- 類型 I(裸金屬 Hypervisor):這些虛擬機管理程序直接運行在宿主機(Host)的硬件上來控制硬件和管理虛擬機。特點是:1)需要硬件支持;2)VMM 作為宿主機操作系統(Host OS);3)運行效率高。
- 類型 II(寄居式 Hypervisor):VMM 運行在傳統的宿主機操作系統(Host OS)上,就像其他應用程序那樣運行。特點是:1)VMM 作為應用程序運行在宿主機操作系統之上;2)運行效率一般較類型 I 低。
現在回看,由于當時技術的原因,早期的 VMM 產品大多實現的是寄居式,例如:VMware 5.5 以前的版本、Xen 3.0 以前的版本。隨著硬件虛擬化技術的誕生,幾乎所有的 VMM 產品都轉向了裸金屬 Hypervisor 實現。例如:VMware 5.5 及以后版本、Xen 3.0 及以后版本以及 KVM。
1978,誕生了第一片 x86 處理器和提出了摩爾定律
在上世紀 60 到 70 年代末,大型機和虛擬化技術互相成就了對方,并且在相當長的一段時間里,虛擬化技術也只被應用于大型機中。其實也可以理解,以當時 Micro-CPU(微處理器)的處理能力,應付一兩個應用程序已然捉襟見肘,的確沒有更多的資源分與虛擬化應用了。直到摩爾定律開始生效為止。
1965 年,Intel(英特爾)創始人之一戈登?摩爾提出了摩爾定律(Moore’s law):“在成本不變的前提下,半導體芯片上的晶體管密度(運算速度),約每隔兩年便會增加一倍。”
從提出開始算起,半導體行業已經按照摩爾定律發展了半個多世紀,對二十世紀后半葉的世界經濟增長做出了貢獻,PC(個人電腦)、Internet、智能手機等技術的創新都離不開摩爾定律的延續。
- 摩爾定律:半導體行業預計摩爾定律將至少持續到 2020 年,但實際上在 2013 年就已經放緩。
1971 年,Intel 設計了世界上第一個微處理器芯片 Intel 4004,并以它為核心組成了世界上第一臺微型計算機 MCS-4,從此揭開了微型計算機發展的序幕。微型計算機是第四代大規模集成電路計算機的典型代表。
1978 年 6 月 8 日,Intel 發布了新款的 16 位微處理器 8086,是世界上第一款 x86 架構。(注:x86 架構并非指某一個芯片的信號,而是指 Intel 通用計算機系列的標準編號縮寫,也標識一套通用的計算機指令集合。)
1980,Wintel 個人微型計算機時代來臨
自微型計算機誕生以來,消費者們對微機的熱情幾近瘋狂,美國新聞界就曾對群眾進行過問卷調查,問人們是否希望在不久的將來擁有一臺家用計算機,結果超 80% 的人表達了這個愿望。往后的幾年里,面對巨大的市場和商機,直接體現為全球計算機的產量逐漸從巨大、昂貴的小型計算機轉變為更小型的、便宜的微型計算機。各種各樣的微處理器和微型計算機如潮水般地涌入市場,尤其是以 IBM 推出的 PC(Personal Computer,個人計算機)電腦在早期幾乎形成了壟斷地位。
1980 年,微軟和英特爾組成 Wintel 商業聯盟,希望以此來取代 IBM PC 在個人計算機市場上的主導地位。依靠英特爾的摩爾定律和微軟 Windows 桌面(Desktop)操作系統的升級換代,雙方通過共同轄制下游 PC 生產商而不斷攫取巨額暴利,以至于在全球個人電腦產業形成了所謂的 “雙寡頭壟斷” 格局。直到 2016 年微軟在 WinHEC 上宣布 Windows 10 可以運行在 ARM 架構之上,標志著壟斷桌面端長達 20 多年的 Wintel 聯盟正式破裂。但不可否認的是,正因為有了 Wintel 的強悍聯合,才使個人電腦的發展日新月異。
1984,GUN 計劃啟動
1974 年 7 月,經過不斷改良的 UNIX 發展到第 5 個版本,Bell 選擇了公開 UNIX 的源碼,引起了學術界的廣泛興趣。所以,UNIX 第 5 版就以 “僅用于教育目的” 的協議,提供給各大學作為教學之用,成為當時操作系統課程的范例教材。
1978 年,柏克利大學 (UC Berkeley)推出了基于 UNIX 第 6 版的 BSD(Berkeley Software Distribution,伯克利分發版)分支,這就是著名的 “1 BSD(1st Berkeley Software Distribution)”。
于是乎 UNIX 在當時就存在了 2 個分支,一個歸 Bell 所有,一個歸 BSD 所有。另外,由于當時 Bell 所屬的 AT&T 受到了美國《謝爾曼反托拉斯法》的影響,不能銷售除了電話機、電報機等之外的商品,甚至后來被拆解成 “AT&T 七子 “。
AT&T 被拆解后,從法律許可上可以開始對外售賣 UNIX 了,意味著 UNIX 正式走向了商業化。在那時,用戶如果想繼續使用 Bell UNIX 就需要購買 4 萬美元一份的授權。
1979 年,AT&T 推出基于第七版 UNIX 的 System V,支持 x86 架構。但同時特別聲明 “不再對學校提供源碼”。雖然 AT&T 的 System V 也是非常優秀的 UNIX 發行版本,但由于 BSD Unix 一直堅持開源,所以后者在開發者群體中的影響力更大。
直到 1992 年,AT&T UNIX 系統實驗室指控 BSDI(一家發行商業 BSD UNIX 的公司),違反了 AT&T 的許可權,并進一步指控伯克利計算機系統研究組泄漏了 UNIX 的商業機密(注:實際上此時的 BSD UNIX 4.3 中來自 AT&T UNIX 的代碼已經不足 10%)。這個官司影響了很多 UNIX 用戶,使他們不得不從 BSD UNIX 轉向 AT&T System V 以避免法律問題。以至于當今大多數商業 UNIX 發行版都是基于 System V 的。
這場官司一直打到 AT&T 將自己的 UNIX 系統實驗室賣掉都還沒有結束,這時已經是 1993 年。新接手 UNIX 的 Novell 公司采取了一種比較開明的做法,允許 BSDI 自由發布自己的 BSD UNIX,但是前提是必須將來自于 AT&T 的代碼完全刪除,于是誕生了 BSD UNIX 4.4 Lite 版本。由于這個版本不存在法律問題,所以 BSD UNIX 4.4 Lite 成為了現代 BSD 系統的基礎版本。
由于 BSD UNIX 已經十分成熟,作為對操作系統進行研究的目標已經達到,伯克利計算機系統研究組(CSRG)在發布了 BSD UNIX 4.4 Lite2 之后就解散了,小組的科研人員有些進入了 UNIX 商業公司,有些繼續進行其他計算機領域的研究。此時,嚴格意義上的 System V 和 BSD UNIX 都不復存在了,存在的只是他們的各種后續版本。BSD UNIX 的開發也走向了幾個不同的方向,并最終促使了 FreeBSD、 OpenBSD 和 NetBSD 的出現。其中的 FreeBSD 就是 MacOS 的前身。
另外,后來 Novell 又將 UNIX 版權出售給了 SCO(這一事實雙方尚存在爭議)。有很多大公司在取得了 UNIX 的授權之后,繼續開發了自己的 UNIX 產品。
綜上可見,在 1970-80 年代,應用最為廣泛的 UNIX 操作系統更多的是一個閉源的商業軟件。讓當時許多 UNIX 的愛好者和軟件開發者們感到相當的痛心和憂慮,他們認為商業化的種種限制并不利于產生的發展,還可能會產品出現諸多的問題。于是,這群 “反叛者們 “ 開始有組織地結成聯盟,以此對抗欺行罷市的 UNIX 商業化行為。
1983 年,麻省理工學院的程序員 Richard Stallman(理查德?斯托曼)認為 UNIX 是一個相當好的操作系統,如果大家都能夠將自己所學貢獻出來,那么這個系統將會更加的優異,并提出了 **GNU(GNU’s Not Unix)**計劃。
Richard 最早只是在 net.unix-wizards 新聞組上公布該消息,并附帶一份《GNU 宣言》等解釋為何發起該計劃的文章,其中一個理由就是要 “重現當年軟件界合作互助的團結精神”。Richard 倡導 Open Source 的理念,希望發展出一套完整的、開發源代碼的操作系統以取代 UNIX,志在創建一個完全兼容 UNIX 的自由軟件生態環境。
為保證 GNU 軟件可以自由地 “使用、復制、修改和發布”,所有 GNU 軟件都在一份在禁止其他人添加任何限制的情況下授權所有權利給任何人的協議條款。
GNU 包含了 3 個協議條款:
-
GPL(GNU General Public License,GNU 通用公共許可證),即 “反版權”(Copyleft)概念。
-
LGPL(GNU Lesser General Public License,GNU 較寬松公共許可證)。
-
GFDL(GNU Free Documentation License,GNU 自由文檔許可證)。
1985 年, Richard 又創立了 FSF(Free Software Foundation,自由軟件基金會)來為 GNU 計劃提供技術、法律以及財政支持。
現在我們知道,一個完整的操作系統是需要包含許多軟件的,除了最重要的 Kernel 之外,還需要有編輯器,編譯器,Shell、視窗系統等等一系列軟件作為支撐。Richard 早期的捐助者大都是新踏入 UNIX 土地的老牌 ARPANET(阿帕網)黑客,他們對代碼共享的使命感異常強烈。
盡管 GNU 計劃大部分時候是由個人自愿無償貢獻,但 FSF 有時還是會聘請程序員幫助編寫。當 GNU 計劃開始逐漸獲得成功時,一些商業公司開始介入開發和技術支持。當中最著名的就是之后被 Red Hat 兼并的 Cygnus Solutions。
到了 1990 年,GNU 已經開發出的一系列的開源軟件,被稱為 GNU 套件,包括:GCC(GNU Compiler Collection,GNU 編譯器集合),GLIBC(libraries,函數庫)、GDB(debugs,調試工具)、TeX(文本編輯器)、Emacs(一個功能強大的文字編輯器)、X Window 視窗系統、Apache HTTP 服務器,以及 UNIX Shell 等等。
你可能會發現,上面唯獨缺少了一個操作系統 Kernel。
1991,Linux 誕生
在 UNIX 需要支付昂貴的授權費用后,很多大學不得不停止對其的研究。
1987 年,荷蘭有個大學教授 Andy Tanenbaum(安德魯)寫了一個 Minix 操作系統,類似于 UNIX,專用于教學。當 Minix 流傳開來之后,世界各地的黑客們紛紛開始使用并改進,希望把改進的東西合并到 Minix 中,但是安德魯覺得他的系統是用于教學的,不能破壞純凈性,于是拒絕了。
1990 年,Linus Torvalds 還是芬蘭赫爾辛基大學的一名學生,最初是用匯編語言寫了一個在 Intel 80386 保護模式下處理多任務切換的程序,后來從 Minix 得到靈感,進一步產生了寫一個比 Minix 更好的操作系統的想法。
于是 Linus 開始寫了一些硬件的設備驅動程序,以及一個小的文件系統。就這樣誕生了 Linux 0.0.1(Linus’s Unix)版本。但是它只具有一個操作系統內核的雛形,甚至不能運行,還必須在有 Minix 的主機上完成編譯后才能運行。但這時的 Linus 已經完全沉迷其中,決定踢開 Minix,于是在 1991 年 10 月 5 號發布 Linux 0.0.2 版本,在這個版本中已經可以運行 Bash 和 GUN GCC 了。
1991 年,Linus Torvalds 編寫出了與 UNIX 兼容的 Linux Kernel 并在 GPL 條款下發布。隨即引起了黑客們的注意,通過網絡加入到了 Linux Kernel 的開發。由于一批高水平黑客的加入,使 Linux 發展迅猛,幾乎一兩個禮拜就有新版或修正版的出現。
**1993 年底,**Linux 1.0 終于誕生了!
Linux 1.0 已經是一個功能完備的操作系統 Kernel,代碼實現緊湊而高效,可以充分發揮硬件的性能,在 4M 內存的 Intel 80386 主機上也表現得非常好。直至今天,Linux 社區的開發者們依然認為在 Linux Kernel 里進行開發才是真正的編程。
后來開源運動的吹鼓手 Eric Raymond(埃里克?雷蒙德)寫了一篇文章《大教堂與集市》來分析 Linux 的開發模式。大教堂要設計好圖紙,動用優秀的工匠,有序的工程計劃才能修筑,鬧哄哄無序如菜市場的一撥人能不能修一座大教堂?答案是可以的,因為他們建成了。
關于 “大教堂”(集權、封閉、受控、保密)和 “集市”(分權、公開、精細的同僚復審)兩種開發模式的對比成為了新思潮的中心思想。這個新思潮對 IT 業產生了非常深遠影響。為整個計算機世界帶來了革命性的價值觀。
1992,Linux 與 GUN 偉大結合
由于 Linux 誕生即開源,其良好的開放性使得幾乎所有 GNU 計劃中的、運行于用戶空間的軟件都可以在 Linux 上使用。1992 年,Linux 與 GNU 套件結合,一個完全自由的操作系統誕生了。
由于其所具有的開放性和自主性,越來越多的開發者開始從 UNIX 轉向 Linux,并參與了 Linux 的開發與修改,Linux 也逐步成為了最受歡迎的 GNU 軟件開發及運行平臺。在軟件的世界,開源意味著自由,是 “秩序反叛者們 “ 的樂園。
當時,Richard 主張,因為 Linux 使用了許多的 GNU 軟件,所以應該正名為 GNU/Linux,但這一提議并沒有得到 Linux 社區的一致認同,后來還引發了 GNU/Linux 命名爭議。但不管如何,雖然 Linux 本身并不屬于 GNU 計劃的一部份,但兩者的關系早已宛如一體共生。
1995 年,Linux 從 Apache 基金會找到了自己的殺手級應用 — Apache HTTP Web Server。
很快,運行 Apache HTTP 的 Linux 服務器成了全球 ISP 平臺的首選。當時,約 60% 的網站選用 Apache。時至今日,LAMP(Linux、Apache、MySQL、PHP)仍是一個非常經典的組合。
- UNIX-Like 操作系統的主干脈絡圖。
1987,微機虛擬化時代全面啟動
隨著 x86 服務器(Server)和桌面(Desktop)部署的增長也為企業 IT 基礎架構帶來了新的難題:
-
IT 運維成本高。
-
基礎設施利用率低下。
-
故障切換和災難保護不足。
而解決這些難題就是新時代付予虛擬化技術的歷史任務,自上世紀 80 年代開始,微機虛擬化技術及公司如同雨后春筍般涌現,它們都是云計算時代的奠基者。
操作系統模擬器
1987 年,Insignia Solutions 公司演示了一個稱為 SoftPC 的軟件模擬器,這個模擬器允許用戶在 UNIX Workstations 上運行 DOS 應用。當時一個可以運行 Microsoft DOS 的 PC 需要 1,500 美金,而使用 SoftPC 模擬,就可以直接在大型工作站上運行 Microsoft DOS 了。
1989 年,Insignia Solutions 發布了 Mac 版的 SoftPC,使蘋果用戶不僅能運行 DOS,還能運行 Windows 操作系統。
1998 年,著名的 x86 仿真模擬器 Bochs 發布。
VMware ESXi 虛擬化
1998 年,VMware 公司成立并首次實現了基于 x86 CPU 的虛擬技術,這是一種稱之為 “二進制翻譯(Binary Translation)” 的技術。可以通過運行在 Windows NT 上的 VMware 來啟動 Windows 95 虛擬機。
1999 年,VMware 率先推出針對 x86 平臺推出了可以流暢運行的商業虛擬化軟件 VMaware Workstation。
2001 年,VMware 發布 ESX 和 GSX,是 ESXi 的前身。
VMware 商業化的成功,也標志著虛擬化技術已經從大型機開始走進微機。
在那時,由于 Intel x86 CPU 完全不具有虛擬化支撐能力,所以 VMware 的二進制翻譯技術需要完全捕獲虛擬機發出的特權指令,然后再通過陷入模擬的方式進行指令翻譯,這種方式也被稱為完全軟件實現的虛擬化技術,缺點是實現復雜且性能底下。
-
特權解除(優先級壓縮):當 GuestOS 需要調用運行 Ring0 的指令時,VMM 就會動態的將內核態指令捕獲,并調用若干運行在用戶態的指令來模擬出期望得到的效果,從而將內核態的特權解除。解除了內核心的特權后,就能夠在 GuestOS 中執行大部分的內核態的指令了。但是,這仍然不能完美的解決問題。因為在一個 OS 的指令集中還存在著一種敏感指令(可能是內核態,也可能是用戶態)。此時就需要陷入模擬的實現。
-
陷入模擬(二進制翻譯):無論是 HostOS 還是 GuestOS,只要是一個 OS 都必然會存在有敏感指令(e.g. reboot、shutdown 等)。試想如果我們希望將 GuestOS 重啟,并在 GuestOS 中執行了 reboot 指令,但是卻將 HostOS 給重啟了,這將會非常糟糕。VMM 的陷入模擬機制就是為了解決這個問題。例如:在 GuestOS 中執行了敏感指令 reboot 時,VMM 首先會將敏感指令 reboot 捕獲、檢測并判定其為敏感指令。此時 VMM 就會陷入模擬,將敏感指令 reboot 模擬成一個只針對 GuestOS 進行操作的、非敏感的、并且運行在非核心態上的 “reboot” 指令,最后 VMM 執行虛擬機的重啟操作。
Citrix XenServer 虛擬化
1990 年,英國劍橋大學的 Keir Fraser 和 Ian Pratt 創建了 XenServer 的初始代碼工程。
2000 年,Citrix(思杰)桌面虛擬化產品發布。
2003 年,成立了 XenSource 公司并創立了開源虛擬化項目 Xen 1.0,通過半虛擬化技術(Para-Virtualization)為 x86-64 提供虛擬化支持。往后,基于 Xen 虛擬化解決方案陸續被 Redhat、Novell 和 Sun 等的 Linux 發行版集成,作為默認的虛擬化解決方案。
Xen 實現的半虛擬化 VMM 在處理敏感指令和內核態指令的流程上相對更簡單一些,把 Guest OS 原本要在 Ring0 上執行的特權指令改造成對 VMM 的調用(Hypercells),這樣 Guest OS 就不需要也不會執行 Ring0 的指令了。比較麻煩的就是要改造操作系統代碼,所以無法支持閉源的 Windows OS。
另外,雖然 Xen 實現了 CPU 和內存虛擬化,但是虛擬機的 I/O 功能,包括網絡和存儲等,還需要通過虛擬機中的一個 Front-end(前端模塊)與 Domain 0 中的 Backend(后端模塊)進行交互,并最終由 Domain 0 中的 Device drivers 實現。
這里的 Domain 0 是 Xen 的一個特權虛擬機(唯一運行在 Xen Hypervisor 之上的虛擬機),運行著被修改過的 Linux kernel,它擁有訪問物理 I/O 資源的權限。Domain 0 需要在其它的業務虛擬機啟動之前啟動,并用于提供業務虛擬機的外設模擬仿真功能。
在那時,Xen 之父 Ian Pratt 也曾表示:“這個項目是由我本人和劍橋大學計算機科學實驗室的一些學生共同做的。我們當時就意識到要想使得虛擬化的工作越來越好,必須需要得到硬件方面的幫助,而且要不斷地改變 CPU,改變芯片組,以及改變一些 I/O 的裝置,使得他們能夠適應虛擬化的需要。”
Intel CPU 硬件虛擬化
2003 年,Intel 對外宣布將在 x86 CPU 上支持硬件虛擬化技術。
2005 年 8 月,Intel 公布了 Vanderpool 的技術細節。Vanderpool 是 Intel VT 技術的前身,通過增加了新的針對虛擬化場景的 CPU 指令,使得 Intel CPU 能夠從硬件層面支持虛擬化。
2005 年 11 月,Intel 發布了 Xeon MP 7000 系列 CPU,并宣布將 Vanderpool 更名為 VT(Virtualization Technology)。
2006 年,Intel 和 AMD 等芯片廠商相繼推出對虛擬化技術的硬件支持(AMD-V,Intel VT-x),使得原本完全軟件實現的各項功能可以用借助硬件的力量來實現提速。
CPU 硬件輔助的虛擬化技術,通過引入新的 CPU 運行模式(root mode、not root mode)和新的指令集,使得 HostOS 和 GuestOS 分別占用一個運行模式,并且都支持所有的 Ring。GuestOS 運行于 non-Root Mode(受控模式),原來的一些敏感指令在受控模式下會全部陷入 VMM,由 VMM 來實現模擬,這樣就解決了部分非內核態敏感指令的陷入(模擬難題)。而且模式切換時,上下文的保存恢復由硬件來完成,這樣就大大提高了陷入(模擬時上下文切換)的效率。
比如用戶態的程序需要執行一個 I/O 操作:
int nread = read (fd, buffer, 1024);
當 CPU 執行到此段代碼時,首先查找到系統調用號并保存到寄存器 eax,然后會將對應的參數壓棧,再產生一個系統調用中斷,對應的是 int $0x80。產生了系統調用中斷后,CPU 將切換到 Ring0 模式,內核通過寄存器讀取到參數,并完成 I/O 后續操作,操作完成后返回 Ring3 模式。
movel $3,% eax
movel fd,% ebx
movel buffer,% ecx
movel 1024,% edx
int $0x80
而在具有硬件虛擬化特性的 CPU 中,VMM 自己運行在 VMX root operation 模式,VMX non-root operation 模式則由 Guest OS 使用。兩種操作模式都支持 Ring 0 及以上特權級,因此 VMM 和 Guest OS 都可以自由選擇它們所期望的運行級別(0~3),以此解決了純軟件實現的全虛擬化的 Host OS 和 Guest OS 運行特權級交叉的難題,不再需要使用軟件(VMM)來模擬硬件指令集,VM 的指令集可以直接運行在宿主機處理器上。
2006 年,Xen 3.0.0 發布,該版本可以在 32 位服務器上運行,作為第一個支持 Intel VT-x 技術的虛擬機監控程序。從而使得 Xen 虛擬機可以運行完全沒有被修改過的操作系統,該版本是 Xen 真正意義上可用的版本。同年,紅帽將 Xen 虛擬機作為企業版 RHEL 的默認特性。
2007 年,Novell 在推出的企業級 SLES(Suse Linux Enterprise Server)10 中添加了 Xen 虛擬化軟件。
2007 年 6 月,RedHat 在所有平臺和管理工具中包含了 Xen 虛擬化功能。
2007 年 10 月,Citrix 公司出資 5 億美金收購了 XenSource,變成了 Xen 虛擬機項目的東家。之后推出了虛擬化產品 “Citrix 交付中心”。
Windows Hyper-V 虛擬化
1997 年,蘋果發布了 Virtual PC 產品,后來又賣給了 Connectix 公司。
2003 年,Microsoft 收購 Connectix 獲得 Virtual PC 虛擬化技術進入桌面虛擬化領域,之后很快推出了 Virtual Server 免費版。
2004 年,微軟發布 Virtual Server 2005 計劃,業界評價為:“虛擬化正從一個小市場向主流市場轉變”。
2008 年第一季度,微軟同時發布了 Windows Server 2008 R2 及虛擬化產品 Hyper-V。
QEMU-KVM 虛擬化
2001,Fabrice Bellard 發布了目前最流行的、采用了動態二進制翻譯技術的開源虛擬化軟件 QEMU(Quick EMUlator)。QEMU 可以模擬 x86、x86_64、ARM、MIPS、SPARC、PowerPC 等多種 CPU 架構,支持無修改地運行這些架構上的操作系統。18 年后的 2019 年,QEMU 4.0.0 發布并對外宣稱幾乎可以模擬所有的物理設備,這簡直就是個奇跡般的偉大軟件。
- Fabrice Bellard
2006 年 10 月,以色列的創業公司 Qumranet 在完成了虛擬化 Hypervisor 基本功能、動態遷移以及主要的性能優化之后,正式對外宣布了 KVM(Kernel-based Virtual Machine,基于內核的虛擬機)的誕生。
2007 年 2 月,Linux Kernel 2.6.20 合入了 KVM 內核模塊,使用 KVM 的前提是 CPU 必須要支持 VT-x 或 AMD-V 硬件虛擬化技術。
2008 年 9 月 4 日,RedHat 收購了 Qumranet,并著手使用 KVM 替換在 RedHat 中的使用的 Xen。
2009 年 9 月,RedHat 發布 RHEL 5.4,在保存 Xen 虛擬化基礎上,將 KVM 虛擬化添加進來。
2010 年 11 月,紅帽發布 RHEL 6.0,這個版本將默認安裝的 Xen 虛擬化機制徹底去除,僅提供 KVM 虛擬化機制。
當年,Xen 雖然作為一項廣泛應用于 Linux 發行版中的虛擬化技術,但卻遲遲沒有集成到 Linux Kernel 中,紅帽也許是出于對這種脫離內核的維護方式感到不爽,加之當時思杰和微軟表現的很非常親密,導致紅帽萌生了放棄 Xen 的想法,并在正式采用 KVM 的一年后,就宣布徹底放棄 Xen。硬件輔助虛擬化的到來,Xen 引以為傲的半虛擬化技術也隨之在主流 Linux 發行廠商中衰落了。
2011 年初,IBM 找上老搭檔紅帽,表示 KVM 這個東西值得加大力度去做。于是到了 5 月,IBM 和紅帽,聯合惠普和英特爾一起,成立了開放虛擬化聯盟(Open Virtualization Alliance),加速 KVM 投入市場的速度,由此避免 VMware 一家獨大的情況出現。
聯盟成立之時,紅帽的發言人表示:“大家都希望除 VMware 之外還有一種開源選擇。未來的云基礎設施一定會基于開源。我們想要營造一個小廠商們可以輕松加入的生態環境。”
操作系統虛擬化(容器)
1979 年,UNIX 的第 7 個版本引入了 chroot 機制,被認為是第一個操作系統虛擬化(OS-level virtualization)技術。chroot 是直到現在我們依然在使用的一個 System call,這個系統調用會讓一個進程把指定的目錄作為根目錄,它的所有文件系統操作都只能在這個指定目錄中進行,本質是一種文件系統層的隔離。操作系統虛擬化這個說法你或許會感到陌生,但容器(Container)這一稱呼你應該非常熟悉。
2000 年,FreeBSD jail,真正意義上的第一個功能完整的操作系統虛擬化技術。利用這個技術,FreeBSD 的系統管理者,可以創造出幾個小型的軟件系統,這些軟件系統被稱為 Chroot Jails(監獄)。
2004 年,谷歌開始使用容器技術,到 2006 年,谷歌發布了 Process Container(進程容器)技術。Process Container 的目的是希望能夠像虛擬化技術一樣,給進程提供操作系統級別的資源限制、優先級控制、資源審計能力和進程控制能力。
2005 年,OpenVZ 發布,這是 Linux 操作系統的容器化技術實現,同時也是 LXC 的核心實現。
2007 年,Process Container 技術進入 Linux Kernel。因為在 Linux Kernel 中,Container(容器)這一名詞具有許多不同的意義,所以為了避免混亂,Process Container 就更名為了 Control Groups,簡稱:Cgroups。
2008 年,Linux 發布了 LXC(Linux Container,包括:Cgroups、Namespace、Chroot 技術)0.1.0 版本,將 Cgroups 的資源配額管理能力和 Namespace 的資源視圖隔離能力組合在一起,實現了輕量級的進程隔離。
2013 年 3 月 15 日,在加利福尼亞州圣克拉拉召開的 Python 開發者大會上,DotCloud 的創始人兼首席執行官 Solomon Hvkes 在一場僅五分鐘的微型演講中,首次發布了 Docker Container,并于會后將其源碼開源并托管到 Github。最初的 Docker 就是使用了 LXC 再封裝了其他的一些功能。可以看出,Docker 的成功,與其說是技術的創新,還不如說是一次組合式的創新。
2014 年 6 月,Docker 發布了第一個正式版本 v1.0。同年,Redhat 和 AWS 就宣布了為 Docker 提供官方支持。
2006,云計算與大數據時代
1984,第一次提出了網格計算的概念
1984 年,SUN 公司聯合創始人 John Gage(約翰?蓋奇)提出 “網絡就是計算機(The Network is the Computer)” 這個重要的猜想,用于描述分布式計算技術帶來的新世界。分布式計算正是云計算和大數據的基本架構形式。
然而那時的人們仍然沒有對這一說法引起足夠的關注。直到 90 年代,相關的理念重新回到了人們的視野。不過這次它換了一個更簡單的名字,叫做網格計算(Grid Computing)。
網格(Grid)的叫法,和我們日常理解的 “網格化管理” 有很大不同,它是直接照搬自電網的概念(Electric Power Grid)。它的本質目的,還是把大量機器整合成一個虛擬的超級機器,給分布在世界各地的人們使用,也就是公共計算服務。
- 約翰?蓋奇。
1996,第一次提出云計算的概念
1996 年,Compaq(康柏)公司的一群技術主管在討論計算業務的發展時,首次使用了 Cloud Computing 這個詞,他們認為商業計算會向 Cloud Computing 的方向轉移。這是 Cloud Computing(云計算)概念的真正首次出現。
1997 年,美國教授 Ramnath K. Chellappa(拉姆納特?K?切拉帕)對 Cloud Computing 這個名次做出了首個學術定義:“計算邊界由經濟而并非完全由技術決定的計算模式”。
這一學術定義,揭示了云計算的本質是一種新型的商業模式,其次才是技術創新。
- 拉姆納特?K?切拉帕(印度裔)。
1999,Salesforce 成立
1999 年,當時 37 歲的甲骨文(Oracle)高級副總裁,俄羅斯裔美國人馬克?貝尼奧夫(Marc Benioff)創辦了 Salesforce 公司,是第一家通過網站提供企業級應用程序的公司。通過租賃式網頁 CRM(Customer Relationship Management,客戶關系管理)軟件服務,開啟了 SaaS(Software as a service)交付模式。初創企業只要每月按月支付租賃費用,不用再購買任何軟件硬件,也不用花費人力成本在軟件運營上。
Marc Benioff 后來回憶到:“在那個時期,任何商業天才都難以想象會有公司愿意把它的 CRM,這個關系到公司生命線的系統,從坐落在自己精密機房內的一排排嗡嗡作響的 IBM 主機服務器上,然后挪到一個小小的瀏覽器內,況且這個瀏覽器訪問的數據中心還完全不在這家公司的掌控之中。但是 Salesforce 做到了,并且做得非常成功。”
Salesforce 的 Customers 包括了通用、荷蘭航空、付過銀行、Comcast,NBC 等公司,這些公司選擇 saleforce.com 的原因一點都不像是買不起服務器而是用廉價的在線方案。這也充分說明了基于云的服務不僅僅是大型業務系統的廉價替代品,更重要的是它真正提高了企業運營效率、促進業務發展的解決方案,同時可以在可靠性上維持一個極高的標準。
2006,AWS 成立
2000 年,當時的 Amazon 正在開發電商服務平臺 Merchant.com,旨在幫助第三方公司在 Amazon 上構建自己的在線購物網站。不過,因為架構設計能力和管理流程等方面的問題,這個項目進展緩慢。于是,亞馬遜的管理層開始考慮,是不是可以將已有的代碼進行解耦,設計成獨立的 API 服務,然后讓內部或外部應用進行服務調用。這樣,既可以節約后續的開發工作量,也可以增強系統的靈活性和復用度。
2002 年,出版商 O’Reilly 向 Amazon CEO 貝佐斯展示了一個叫做 Amarank 的工具,它可以每隔數小時訪問一次 Amazon.com,并復制 O’Reilly 的銷售數據及其競爭對手數據排名。O’Reilly 建議亞馬遜開發一個 API,讓第三方公司可以通過這個接口獲取其產品、價格和銷售排名。
一方面,基于出版商客戶的需求,Amazon 構建 Web Service 的想法開始萌芽。另一方面,Amazon 乃至全球知名的在線零售商規模不斷發展,但是同時也發現 Amazon 的數據中心在大部分時間只有不到 10% 的利用率,而超過 90% 的資源除了緩沖圣誕購物季這種高峰時段的流量外都在空轉和閑置中度過。于是 Amazon 開始行動,將資源從單一的、特定的業務中解放出來,在空閑時提供給其他用戶使用。
貝佐斯覺得這個想法不錯,或許可以借此轉型成技術公司。巧合的是,亞馬遜內部已經在進行這項研究,并設計了一些 API。在貝佐斯的推動下,更豐富的 APIs 被陸續推出。天才的貝佐斯發現:這些服務器的運作能力,能夠當成虛擬貨品賣給開發者和初創企業,這和當時毛利率百分之二的主業務電子商務比起來,簡直就是一筆 “橫財”。
同年,亞馬遜啟用了 Amazon Web Services(AWS)平臺。當時該免費服務可以讓企業將 Amazon.com 的功能整合到自家網站上。
2003 年,安迪?杰西(Andy Jassy),當時杰夫?貝索斯(Jeff Bezos,亞馬遜創始人)的秘書長,現在 AWS 的 CEO,在貝索斯的家里召開了一次管理層會議。會上,大家決定要把應用開發的通用部分抽離出來,做一個公共基礎設施服務平臺,讓內外部開發者可以基于這個平臺開發自己的應用。
隨后,他們整理了一系列可以成為公共服務的候選模塊,并從中挑了服務器、存儲和數據庫三個部分開始。不僅因為這三個需求最多,還因為 Amazon 最擅長這部分,畢竟低利潤率商業模式讓他在如何降低數據中心的運營成本上頗有積累。
- 安迪?杰西。
2006 年,Amazon Web Services(AWS)推出了兩款重磅產品,開始以 Web 服務的形式,將其彈性計算能力作為云服務進行售賣時,標志著云計算這種新的商業模式的誕生。AWS 向企業提供 IT 基礎設施服務,包括:彈性計算網云(Elastic Compute Cloud,EC2)、簡單儲存服務(Sample Storage Service,S3)、簡單數據庫(SimpleDB)等,現在通常稱為云計算服務。
其中 EC2 推出了第一個采用 Xen 虛擬化的實例類型 m1.small。
2010 年,Netflix 宣布全量上 AWS 云 ,就給市場注入了強心劑。后來者紛紛加碼,2016 年微軟耗費 260 億美元收購 LinkedIn,拓展企業用戶,2018 年 6 月微軟又以 75 億美元收購 GitHub,進一步提升企業服務能力。
2013 年,美國中央情報局(CIA)價值 6 億美元的高利潤私有云合同最終選擇了 AWS 而放棄了 IBM,AWS 作為企業級云供應商的資質,進一步獲得了政府的認可。
2015 年,AWS 以 46 億美元的營收數據,不僅讓外界知道了亞馬遜的實力,也讓大眾清楚地認識到了云計算廣闊的發展前景,當然也推動了亞馬遜市值的水漲船高。
2017 年 10 月,AWS 已經宣布已經創建了新的基于 KVM 的虛擬化引擎,新的 C5 實例和未來的虛擬機將不使用 XEN,而是核心的 KVM 技術。
2017 年 11 月,AWS 推出 C5,首次采用了 KVM 虛擬化。
2006,Hadoop 成立
2002 年,Apache 推出了 Nutch,一個使用 Java 實現的開源搜索引擎,其包括了全文搜索和 Web 爬蟲工具。
2003 年,Google 發布了引爆大數據時代的三駕馬車之一《The Google File System》,講述了一種可擴展的分布式文件系統,其運行于廉價的普通硬件上,具有很好的容錯能力等特性,可應用于大型的、分布式的、對大量數據進行訪問的應用。
2004 年,Nutch 創始人 Doug Cutting 基于 Google 的 GFS 論文實現了分布式文件存儲系統名為 NDFS。
2004 年,Google 發布了引爆大數據時代的三駕馬車之二《MapReduce: Simplified Data Processing on Large Clusters》,講述了大數據的分布式計算方式,即將任務分解然后在多臺處理能力較弱的計算節點中同時處理,然后將結果合并從而完成大數據處理。
2005 年,Doug Cutting 又基于 MapReduce,在 Nutch 搜索引擎實現了該功能。
2006 年,Google 發布了引爆大數據時代的三駕馬車之三《Bigtable: A Distributed Storage System for Structured Data》,講述了用于存儲和管理結構化數據的分布式存儲系統,其建立在 GFS、MapReduce 等基礎之上。該論文啟發了后期的很多的 NoSQL 數據庫,包括 Cassandra、HBase 等。
2006 年,Yahoo 雇用了 Doug Cutting,Doug Cutting 將 NDFS 和 MapReduce 升級命名為 Hadoop,Yahoo 開建了一個獨立的團隊給 Doug Cutting 專門研究發展 Hadoop。
2008,GCP 成立
2006 年,27 歲的 Google 高級工程師克里斯托夫?比希利亞第一次向 Google 董事長兼 CEO 施密特提出 “云端計算” 的想法。在施密特的支持下,Google 推出了 “Google 101 計劃”。Google 首席執行官埃里克?施密特(Eric Schmidt)在搜索引擎大會(SES San Jose 2006)再次提出 “云計算(Cloud Computing)” 的概念。
2008 年 4 月,Google “起個大早,趕個晚集”,終于發布了 Google App Engine(GAE),是 Google 管理的數據中心中用于 WEB 應用程序的開發和托管的平臺。這是一種 PaaS 類型的云服務產品。GAE 通過專有 Web 框架,搭建了一個完整的 Web 開發環境,用戶可以在瀏覽器里面開發和調試自己的代碼,并部署在 Google 的基礎設施之上。
2008 年 9 月,Google 推出 Google Chrome,以谷歌應用程序為代表的基于瀏覽器的應用軟件發布,將瀏覽器融入了云計算時代。
2009 年 7 月,Google 宣布將推出 Chrome OS。
- 克里斯托夫?比希利亞
2008,Microsoft Azure 成立
2008 年 10 月,微軟發布公有云計算戰略和平臺 Windows Azure Platform,嘗試將技術和服務托管化、線上化。主要目標是為開發者提供一個平臺,幫助開發可運行在云服務器、數據中心、Web 和 PC 上的應用程序。
2010 年 1 月,Microsoft 正式發布 Microsoft Azure 云平臺服務。
2014 年 3 月,微軟正式宣布 Microsoft Azure 在中國正式商用,由世紀互聯運營,名為 Windows Azure;同年 4 月,微軟 Office 365 正式落地中國。
2016 年 1 月,微軟公司首席執行官薩提亞?納德拉在達沃斯論壇上宣布了一項全新的計劃 — Microsoft Philanthropies。作為計劃的其中一部分,微軟將在未來三年為 7 萬家非營利組織以及高校科研機構提供價值 10 億美元的微軟云計算服務,借助云計算提供的數據存儲、分析及預測等技術,幫助公益事業構建長期發展能力。
2018 年,微軟收購 Github,無論好壞,開源的歷史會記住這一天。
2009,阿里云成立
2009 年,阿里云寫下第一行代碼,采用的是 Xen 虛擬化技術。
2014 年,阿里云切換為 KVM 虛擬化技術,并進行了深度的定制化。
2015 年開始探索,2016 年開始立項,2017 年首次發布 X-Dragon 神龍架構,真正使用軟硬融合、軟硬件協同設計的模式,改變了傳統虛擬化技術和當前的計算架構不友好的地方。
- 經典的第一行代碼。
2009,VMware vCloud 成立
2003 年,存儲設備廠商 EMC 宣布以 6.35 億美元的價格收購了創立僅 5 年的虛擬技術公司 VMware,成為 EMC 迄今最成功的一筆收購。
2007 年 7 月,Intel 向 VMware 投資 2.185 億美元。
2007 年 8 月,Cisco 向 VMware 投資 1.5 億美元。
2009 年 4 月,Cisco 與 EMC、VMware 建立虛擬計算環境聯盟。不久后 VMware 推出業界首款私有云操作系統 VMware vSphere。Cisco 與 VMware 在 VMworld 大會上宣布聯合推出下一代軟件交換機 Nexus 1000v,幾乎是一個一比一的復刻版 OpenFlow 軟件交換機,替代了 vSphere 本身的 vSwitch 軟件交換機,通過 vSphere 的開放 API 管理虛擬化平臺的流量。
2009 年 9 月,VMware 啟動 vCloud 計劃構建全新的云服務。
2012 年,VMware 以 12.6 億美元收購了 OpenFlow SDN 初創公司 Nicira(由 SDN 開創者 Martin Casado、Nick McKeown 和 Scott Shenker 合伙成立),隨后 VMware 基于 Nicira 的核心產品 NVP(Network Virtualization Platform,網絡虛擬化平臺)推出了 NSX 網絡虛擬化解決方案,結合 vSAN 存儲虛擬化解決方案,提出了軟件定義數據中心 SDDC 的構想。
2015 年 10 月,Dell 宣布將以 670 億美元收購 EMC,從而成為全球科技市場最大規模的并購交易。
2016 年 10 月,VMware 和亞馬遜旗下公司 Amazon Web Services 達成戰略聯盟,將 VMware 軟件定義數據中心(SDDC)帶入 AWS Cloud,支持客戶在基于 VMware vSphere 私有云、公有云以及混合云環境下運行各種應用,并獲得對 AWS 服務的最佳訪問。
2017 年 8 月,在 VMworld 2017 大會上,VMware 和 Amazon Web Services 共同宣布 VMware Cloud on AWS 初步可用。
2010,OpenStack 開源項目成立
2010 年 7 月,NASA 貢獻了云計算管理平臺 Nova 代碼,Rackspace 云存儲(對象存儲)代碼,發起了 OpenStack 云操作系統開源項目。同年 10 月 21 日,發布了首個版本 Austin(奧斯丁)。OpenStack 挽手自主可控的口號,推動了云計算在國內的全面爆發。
2012 年 4 月,OpenStack 發布了 Essex 版本,其在試用組件中提供了 Quantum 網絡組件,用于實現類似于 VMware NSX 的網絡虛擬化功能。該組件在 2012.10 OpenStack Folsom 版本中進行了正式發布;后因為商標侵權的原因,OpenStack 在 Havana 版本上將 Quantum 更名為 Neutron。
2019 年,Open Infrastructure Summit 相繼在上海舉辦。中國的開源會銘記這一天。
2015,云原生時代
2014,Kubernetes 開源項目成立
2013 年,Pivotal 公司(敏捷開發領域的領導者)的 Matt Stine 首次提出云原生(CloudNative)的概念。
2014 年,Kubernetes 容器編排平臺也正式發布。Kubernetes 項目的初衷,就是為了提供一種方便、快速、優雅地 Containers 管理平臺。
2015 年,為了對抗當時大紅大紫的 Docker 公司在容器圈一家獨大的局面,同時也是出于對容器技術將會對傳統 IT 生產運營模式帶來變革的深刻理解。由 Google、Redhat 以及 Microsoft 等大型云計算廠商牽頭成立了 CNCF(Cloud Native Computing Foundation,云原生計算基金會),隸屬于 Linux 基金會旗下,致力于培育和維護一個廠商中立的開源生態社區,并以此來推廣云原生技術。而 Kubernetes 則是 CNCF 托管的第一個開源項目。
CNCF 中托管的一系列項目,都致力于云原生應用整個生命周期的管理,從部署平臺、日志收集、Service Mesh(服務網格)、服務發現、分布式追蹤、監控以及安全等各個領域通過開源軟件為我們提供一整套解決方案。CNCF 的成立標志著進入云原生時代。
早期,關于云原生的定義一直處于百家爭鳴的狀況。
2015 年,Matt Stine 在《遷移到云原生架構》一書中定義了符合云原生架構的幾個特征:12 因素(12-factors)、微服務、自敏捷架構、基于 API 協作、扛脆弱性。其中 12-factors 為:
-
基準代碼:一份基準代碼,多份部署。
-
依賴:顯式聲明依賴關系。
-
配置:在環境中存儲配置。
-
后端服務:把后端服務當作附加資源。
-
構建,發布,運行:嚴格分離構建和運行。
-
進程:以一個或多個無狀態進程運行應用。
-
端口綁定:通過端口綁定提供服務。
-
并發:通過進程模型進行擴展。
-
易處理:快速啟動和優雅終止可最大化健壯性。
-
開發環境與線上環境等價:盡可能的保持開發,預發布,線上環境相同。
-
日志:把日志當作事件流。
-
管理進程:后臺管理任務當作一次性進程運行
2017 年,Matt Stine 將云原生架構歸納為 6 大特質:
-
模塊化(Modularity)
-
可觀測性(Observability)
-
可部署性(Deployability)
-
可測試性(Testability)
-
可處理性(Disposability)
-
可替換性(Replaceability)
Matt Stine 認為云原生它是一個思想的集合,包括:
-
DevOps
-
持續交付(Continuous Delivery)
-
微服務(MicroServices)
-
敏捷基礎設施(Agile Infrastructure)
-
康威定律(Conways Law)
Pivotal 官方則對云原生概括為 4 個要點:1)容器;2)微服務;3)持續交付;4)DevOps。
不同的公司、不同的人對云原生都有著不同的定義,同一家公司在不同的時間階段定義也不一樣,可以預見未來對于云原生的定義還會不斷變化。
-
Pivotal 定位于 PaaS 層端到端的解決方案及數字化轉型,從文化、流程、方法論、藍圖規劃、軟件開發方式等,都有一套模式,主要用戶是傳統大中型企業 CIO,整體策略是自頂向下。
-
CNCF 立足于整個云計算生態和技術創新、變革者,偏重于技術、工具鏈和底層基礎設施,主要用戶是開源社區的開發者、互聯網及新興企業,影響力可想而知,整體策略是自底向上。
所以,可以肯定的是,Pivotal 是 Cloud Native 概念和方法論的先行者, CNCF 是 Cloud Native 的最佳實踐者。
筆者則認為,云原生是一套方法論(Pivotal)和一系列技術堆棧(CNCF)的有機組合,指導進行新型 IT 軟件架構設計與研發,使其 “生在云上、長在云上”,能夠最大化地發揮云的價值,并賦能企業高速成長。所以云原生的時代,得開發者得天下。
2019 年,全球最大的開源盛會 KubeCon + CloudNativeCon + Open Source Summit 在上海舉辦。
截止 2020 年 2 月,CNCF 已有 433 個會員,其中不乏國內各個行業的的龍頭企業。
2023 年,云化 AIGC 時代
至此,即使筆者的腦力已經幾近枯竭,但還是不能不提到現在已經來到眼前的 AIGC 時代,或者我更愿意稱之為 “云化 AIGC 時代 “,相信朋友們能夠理解其中的含義。
AIGC 技術將會以集約式算力中心為基礎,站在云計算商業和服務模式的肩膀上,作為一種新型的 LLMaaS,深刻影響個人及社會等各方面的生產活動。從個人的角度出發,人們有望借助 AIGC 從個體進化為一個超級個體。
個體:人作為一個個體是獨立存在的,具有獨特的身份、特征和意識。
-
獨立性:擁有自己的身份和個性,不同于其他人。
-
身份特征:擁有自己的外貌、性格、興趣和經歷,這些特征形成了個體的身份認知。
-
自我意識:擁有自己的意識,能夠感知、思考、表達和決策。
-
自我實現:擁有自己的理想和目標,追求自我實現和發展。
-
社會性:擁有自己的社會地位,能夠與他人產生聯系、互相依存、互相協作。社會環境對個人的發展具有重要影響。
超級個體:可以定義為具有高度發展的身體、智力和精神能力的獨立存在,能夠在現代社會中迅速適應和創新,并對社會、經濟、科技和文化等方面產生深遠的影響。一個超級個體應該具備以下特征:
1.具有健康的身體和強健的體魄:以應對高強度的工作和挑戰,保持高度的工作效率和創造力。
2.具有多樣化的技能和知識:包括技術、管理、創新、溝通和領導等方面,以應對不同領域的挑戰和機遇。
3.具有全球化的視野和跨文化交流能力:能夠理解和適應不同文化、語言、價值觀和習慣,有效地進行跨國合作和交流。
4.具有強大的創新能力和敏銳的市場洞察力:能夠預見未來趨勢、發現機遇、創造價值,并在市場競爭中保持領先地位。
5.具有高度的社會責任感和領袖魅力:能夠在社會中發揮重要的作用,推動社會進步和創造社會價值。
深度學習和云計算的關系
深度學習和云計算相互融合、相互促進,共同推動人工智能和信息技術的發展,在實際應用中,兩者緊密結合,為各行業帶來創新解決方案。
1. 云計算為深度學習提供支撐
強大的計算能力
深度學習模型訓練需要海量計算資源,如處理圖像識別的卷積神經網絡(CNN)、自然語言處理的循環神經網絡(RNN)。云計算通過集群計算和并行處理技術,提供強大的計算能力。例如,亞馬遜云科技的彈性計算云(EC2)允許用戶按需獲取計算資源,靈活調整配置,滿足深度學習模型訓練對計算力的高要求,加速訓練過程,縮短研發周期。
存儲資源
深度學習涉及大量數據存儲,如訓練圖像、文本等。云計算的分布式存儲系統,如阿里云的對象存儲 OSS,可提供高擴展性和可靠性的存儲服務,方便存儲和管理大規模數據,保障數據安全,便于數據共享和協作。
降低成本
企業和研究機構采用云計算,無需自行構建和維護昂貴的硬件設施,按使用量付費,降低前期投入和運營成本,使更多組織能開展深度學習研究和應用開發。
便捷的開發環境
云計算平臺提供深度學習框架和工具,如 Google 的 TensorFlow、微軟的 Azure Machine Learning,用戶可直接使用,無需復雜安裝和配置,提高開發效率。
2. 深度學習提升云計算服務能力
優化資源調度
通過深度學習算法,如強化學習和時間序列預測,可以對云計算資源使用情況進行分析和預測,實現智能資源調度。根據用戶需求和任務優先級,合理分配計算、存儲和網絡資源,提高資源利用率,降低能耗。
提升服務質量
利用深度學習進行故障預測和智能運維,提前發現云計算系統潛在故障,及時采取措施,提高系統穩定性和可靠性。例如,通過分析系統日志和指標,識別異常模式,實現異常檢測。還能優化網絡流量管理,提升用戶體驗。
拓展云計算應用場景
深度學習推動云計算在智能客服、圖像和視頻處理、智能推薦等領域的應用。智能客服借助深度學習理解用戶問題并提供準確回答;圖像和視頻處理利用深度學習實現智能剪輯、內容識別;智能推薦系統基于深度學習分析用戶行為和偏好,實現精準推薦。
3. 前沿發展趨勢
邊緣計算
將深度學習模型部署到邊緣設備,在本地進行數據處理,減少數據傳輸延遲,提高響應速度。例如,在智能交通系統中,邊緣設備可以實時處理交通數據,提高交通管理效率。
聯邦學習
在保護用戶數據隱私的前提下,利用多個客戶端的數據進行模型訓練。聯邦學習允許不同的數據源共同訓練模型,而不需要將數據集中到一個地方,從而提高數據隱私和安全性。
無服務器深度學習
利用無服務器計算平臺(如 AWS Lambda)運行深度學習模型,無需管理服務器,降低運維成本。無服務器架構可以自動擴展,根據需求動態調整資源,提高系統的靈活性和可靠性。
4. 對比分析
使用云計算和深度學習的優勢
在使用云計算和深度學習之前,企業可能需要花費大量時間和金錢來構建和維護自己的數據中心。通過云計算,企業可以按需獲取計算資源,降低前期投入和運營成本。深度學習則可以通過智能資源調度和故障預測,提高系統的效率和穩定性。
不使用云計算和深度學習的挑戰
沒有云計算和深度學習的支持,企業可能面臨以下挑戰:
- 高昂的硬件成本:需要自行構建和維護昂貴的硬件設施。
- 低效的資源利用:無法實現智能資源調度,導致資源利用率低。
- 高運維成本:需要大量的人力資源進行系統維護和故障排除。
- 低效的開發環境:開發人員需要花費大量時間進行復雜的安裝和配置。
via:
-
云計算技術 — 云計算技術發展編年史_1846 穿孔指令帶 - CSDN 博客
https://is-cloud.blog.csdn.net/article/details/99675664 -
深度學習發展史(1943-2024 編年體)(The History of Deep Learning)-CSDN 博客
https://blog.csdn.net/dirolamo/article/details/139053653 -
【雜談】萬字長文回顧深度學習的崛起背景,近10年在各行各業中的典型應用-CSDN博客
https://blog.csdn.net/hacker_long/article/details/114006159