伯克利談Serverless:服務器的存在,是雲計算的大問題

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/6d\/6d702c8074b736cd1bcb30c73f0855bd.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"大家好,我是Johann Schleier-Smith,今天我非常期待向你們分享 Serverless計算以及我關於Serverless對雲計算未來影響的看法 —— 它的影響將非常深遠。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/d0\/d0abbb0fd4f42c655228cb3ed4f28f95.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先,我將從一個簡短的自我介紹開始,包括我的背景、我的經驗以及 Serverless 計算相關的工作。然後,我將深入講解,Serverless計算從何而來,其中體現了哪些核心概念和理念?我將會從有點學術的角度來講,但我真的希望你能從中學到一些東西。隨後,我將討論當前的一些研究趨勢,最後是總結。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/d1\/d1c566a22fb20e5a84782de555fe46ba.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先,簡單介紹一下我自己。在相當長的時間裏我都是一名企業家,我曾在硅谷的社交網絡行業工作。我從2003年開始,就在想辦法解決註冊用戶的使用產品的各種問題,以及在非常競爭激烈的環境中,保持高可用性,保持快速創新步伐。我曾經是Tagged的創始人兼CTO。後來,我們收購了一家名爲hi5的公司,合併成了一家公司。最後,公司被一家上市公司Meet集團收購。在我多年從業經歷中面臨如此多的挑戰,讓我真的很想從更根本的層面深入探究。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"於是,我轉向了學術領域,目前我在加州大學伯克利分校從事機器學習博士項目的研究。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在 riselib 從事研究,是一個非常棒的機會,可以和很多非常棒的人一起工作,向他們學習。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/b1\/b101ef163a90ec89c9bbbb998070afb2.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"所以,我今天要講述的內容,很大程度上受到了很多的合作伙伴的影響。我們已經發表了一些論文,我推薦大家去看看這裏展示的作品,你可以讀到更多的信息。有很多人對此領域做出貢獻,例如 Ion Stoica、Joseph Hellerstein、Joseph Gonzalez、Rocha Popa (音譯)等優秀的教員。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我想說,今天我將代表我自己的立場來分享。也就是說,我可能會說一些有爭議的話題,我將會爲自己的觀點負責。我也要感謝 riselib 的贊助商,riselib 的研究是通過政府和企業資助實現的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/cf\/cf261287864710b09df884174db3a296.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Now Serverless ."}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Serverless 廣受關注,這張圖表展示了人們對它的興趣有多大,增長的速度有多快 —— 這是人們在 Google 上搜索 Serverless次數的變化趨勢。你可以看到,自從AWS lambda在2015年面世以來,出現了飛快的增長。當你看到這些圖表時,可能你會說,這裏一定發生了一些非常有趣的事情,讓我更多地瞭解一下爲什麼會這樣。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/c3\/c3bc3df35f3e9f71feb9942ebedb9be5.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在 Serverless 產品方面,我想你可能有了一些瞭解。比如騰訊雲已經提供的 FaaS 產品服務,Serverless 雲函數(SCF)。這些產品允許你在雲中運行代碼和計算任務,而不需要考慮基礎架構,也不需要考慮運維,這確實是促使人們對 Serverless 感興趣的原因。稍後我會詳細介紹這一點,但我想強調一下, Serverless 不僅僅與計算有關,還有 Serverless 存儲,例如騰訊的雲對象存儲(COS),還有 Serverless 數據庫服務,比如 TcaplusDB。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/95\/95a3a4dd2c89e0d4f8683d3222908ced.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Serverless的共性,是你使用它的方式 —— 這正是我喜歡它的地方。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你編寫代碼時,你可以選擇任何你喜歡的編程語言。然後你將代碼上傳到雲,接下來你會說:“雲服務商,請去運行這個代碼”。在這之後,一切都正常運行了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"運維方面的事情也爲你安排好了。如果需要更多的底層基礎設施容量,那麼它將自動爲你擴容,反之也會自動縮容。假如發生任何故障,也會很快得到解決。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你唯一需要關心的問題,是實際使用了多少資源,雲服務商爲你分配了多少計算和存儲,以滿足您的服務和產品 —— 而這就是你的付費方式,超級簡單、實用的按用量計費方式。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/e1\/e1e9851a832467aacdd22d66602b160d.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這簡直不要太美好 —— 所以我們認爲,Serverless Land 是個神奇的地方,到處都是你能喫到的糖果,到處都是彩虹和獨角獸,可真棒啊!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/32\/32b71b152f3f09e314d02b24df792990.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是我想你一定要問的是:這麼美好的東西可能是真的嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/21\/213608e2de66e6d2af53f60028778b9c.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"事實上,會存在一些搗蛋的“怪獸”,Serverless 也會遇到各種各樣的挑戰。這些是對 Serverless 計算的一些常見反對觀點:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有一些人說,你所運行雲函數它們實際上是無狀態的,所以當你的程序運行結束時,數據就會被清除;還有一些人抱怨它有點貴;還有反對的觀點說這可能造成效率降低,因爲你正在將計算和狀態分開;另一個挑戰的點是,有時會被認爲缺乏對 GPU 等硬件加速器的支持;還有人會說,我搞的這些應用程序,他們都無法使用Serverless的方式運行;還有人說,也許 Serverless 聽起來很簡單,但實際落地起來卻很困難。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果從學術界的角度,我可以給你們一些成果的展示,幾乎所有這些反對觀點描述的問題,都取得了重大進展。但仍有一個還在堅持 ... Serverless 這個名字不好。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/57\/571e8c9aeff83c6601f74e1ebd06bcd2.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於這個名字有一些普遍的反對意見。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“服務器還在那裏,你怎麼能稱它爲無服務器呢?”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“另一個問題是,如果沒有服務器,那有什麼呢?”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這聽起來不像是用詞不當嗎?既然如此,人們爲什麼還要這麼命名它呢。但我要告訴你,這實際上非常重要。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/2e\/2ed2185c2417eb2c8bff03275fbacdd0.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"還有人可能會說,爲什麼不給它起個別的名字?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"比如就叫它雲函數吧?我想說,它不僅僅是雲函數;或者稱之爲託管服務?這概念已經有很長一段時間了;雲原生?是另外一個很好的新名詞,也許我們應該稱之爲超級自動伸縮。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"隨便叫什麼,你可以給 serverless 想出各種各樣的其他名字來。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/0b\/0b8b42fea1767b516e9cb9f2d843e456.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在我的觀點是,Serverless 其實是一個很有意義的名字,最關鍵的點是你沒有服務器。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"它描述了雲計算目前正在發生的最關鍵的事情,這一巨大的變遷即將到來。如果我們理解爲什麼這是一個好名字,我們就會理解趨勢,也會理解雲計算的發展方向。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/66\/667943cbf39037c1c71f62637eba9bef.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們開始下一節,Why Serverless?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/ac\/ac8032809cf3967ed8f53926fc802aa5.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我要帶你們回到大概2,400年前,這是偉大的哲學家亞里士多德所在的希臘時代,哲學家們傾向於深入思考事物,一些觀念在歸納總結後仍與當今社會十分相關。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/40\/40e76fcf6937a4c62c4bda7755dbf293.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"讓我來問你這是什麼?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你可以說它是一把椅子,或一把紅色椅子。如果請你稍微描述一下?你會說它是圓的,你會看到一個圓圈有四條腿,也許是用木頭做的。好的,你已經告訴了我很多關於那個東西的屬性。現在我可以問:關於你的描述的物體,它的本質屬性是什麼呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"所以在這個問題下,我們可以說:它們的表面是平坦的,適合坐着。這就是它真正成爲凳子的原因。當然它還有很多偶然屬性——它是紅色的、它有座椅、椅腿、它的材質等等,這些都不是本質屬性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/72\/724a5b5ecffa4c970cc12ae85427b0b3.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一把凳子可能有不同的屬性。我們可以看到我這裏有很多例子,很多不同類型的凳子,有些有三條腿,有些只有一條腿。但它們都是凳子,它們有相同的用途和功能,但它們的工作機制各不相同。所以你可以看到每個凳子,本質屬性都被保留了下來,而那些偶然屬性則有所不同。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/d1\/d12eff6754de1974c0d14d64b261c1d4.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在,請允許我再講解得深入些 —— 我保證這些都跟計算機領域相關。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"請看這是什麼,這是一座橋樑。它是一座橫跨溪流的橋樑,它有相當多的屬性。這是架在水上的乾燥路面,它連接着兩岸上面鋪裝了原木,它有四根支撐,兩端都有斜坡,中間的部分很平整。"},{"type":"text","marks":[{"type":"strong"}],"text":"這些是用來創造橋樑的技術,你明白它的作用是什麼"},{"type":"text","text":",連接河岸兩端的能力也有很多屬性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/3b\/3b9d2e254dcb9ef0061147e6426be9f8.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們再看一座橋的不同案例,可能是一套不同的造橋技術,我們會發現有一套不同的屬性來實現這座橋。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/42\/42d18dd085e7671bb06b1a94607d388b.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"繼續下一個案例,這個是懸掛繩子的橋樑。它不是平坦的,它有點下沉,它由岸上的四根柱子支撐着。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/b9\/b93d2cd0024deb837e8af8d41438f8e8.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"再看看這座橋。這個橋在中間稍高了一些,有這十根柱子連接上下導軌。這個可能是金屬做的,所以它採用了不同的技術,但歸根結底都是一樣的,它們都提供的了橋的功能。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/f4\/f438cd0d227778a98097ac1439011722.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果我們仔細研究每個問題,就需要研究哪些屬性是本質的,哪些屬性是偶然的,我們可以繼續探究一下。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/e9\/e9b8d792ed51ad65e5dcb576b59d622c.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們把它們都列出來,可以看到在屏幕上所有屬性放在一起:哇,這是多麼難懂的一團亂七八糟的東西!接下來,我們把所有偶然屬性都拿走,把重點放在提供一座橋樑的本質屬性上。就像你現在看到的,一切都變得簡單得多。記住,這是理解 Serverless 計算的關鍵,這要求我們要排除大量的偶然複雜度。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/84\/842c9afd73019e1bd572069043c76513.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雲計算工作方式的實質,讓我們專注於應用程序中最本質的部分——核心業務邏輯,這是每個應用中必不可少的、差異化的部分。所以你看着那臺服務器,你可能會問:服務器是雲計算的本質屬性,還是偶然屬性?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/12\/12793a4c40dffbf0da246d3e55a60da5.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了讓大家更好的理解,我將再次倒轉時光,不是回到幾千年前,而是回到1967年。這是IBM System 360大型計算機,它是一臺非常令人印象深刻的機器。當時爲這些機器寫的代碼,如今仍在很多公司運行。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/91\/91f610a26214eee1125217149ccaffd3.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"它是一個大型計算機,意味着是一個支持許多用戶的集中式資源。在1960年代,這是一項巨大的進步,能夠真正有效地將公司一臺大型計算機的資源和時間進行共享,分配給各個團隊使用。現在你看到這個大型計算機,實際上會意識到,在20世紀60年代,在這些大型計算機上正在實現的許多東西,與我們今天在雲計算和 Serverless 計算中追求的價值非常相似。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/d3\/d391a6a2d4e302a9ded811b119e7f502.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Fred Brooks 是 System 360 的主要領導者之一,他領導了操作系統和許多硬件團隊,後來他成爲一位非常傑出的教授和圖靈獎獲得者。1980年代後期,他撰寫了開創性的文章,在其中他區分了計算機程序的複雜度,並且提出了與你的應用業務有關的是本質複雜度。也許業務本質複雜度是很有限的,但是計算機帶來了複雜度,這就是業務功能的技術實現細節。就像那座橋,取決於我們用的是繩子、鋼材還是木頭,我們會有很多不同的技術實現細節。這些技術細節實際上非常重要,正是因爲這些技術讓事情變得可行,但它們與你應用程序的業務邏輯並沒有關係,與解決方案的最終結果也無關。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在我所目睹的技術裏,使用匯編語言編寫程序的過程中,就有太多的偶然複雜度。而現在的高級編程語言已經變得如此之好,以至於可以使用它們做任何的事情。這樣對於我們可以用計算機做什麼來說,這是一次巨大的變革。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本質複雜度和偶然複雜度的理論,真的是一種偉大的見解,是我們從幾千年前哲學家得到的啓發,最近幾十年裏確實是具有非凡的意義。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/6a\/6ae1e362292156390bb0d6bf9bb685bf.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了更深入地瞭解這一點,再瞭解幾種通常與 System 360 一起使用的編程語言。Fortran 用於數值計算,Cobol 用於商業應用程序,PL\/1 作爲一種通用的編程語言。而對於那些真正需要高性能的應用程序,需要通過 System 360 彙編語言實現。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/49\/49e92c4a7300b9b85c56738ae0f9112c.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我想,任何一個曾經使用過各種不同語言和系統的人都會很熟悉這種權衡,一方面是編程的體驗,另一方面是性能和開銷。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/f0\/f0dd42cba70ecf49dc4f69b1532d5c06.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在此我想展開講一下,給你們一個具體的例子,以便對 System 360 有更清晰的認識。這是校驗信用卡號碼的 Luhn 算法,一個簡單但古老的算法。如果想要查看該信用卡號碼是否有效,可以採用一個簡單的方法 —— 實際就是一種校驗和。從卡號的末尾開始偶數位都乘以2,如果結果是大於10的數字,則將個位和十位相加即得到一位數字,把所有數字相加得到總和。如果可以被10整除,就是一張有效的信用卡。超級簡單的算法,對吧?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/3b\/3b5922d9ac641c7455edf88a17178ff6.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"事實上,如果我們使用像PL\/1這樣的編程語言。這代碼看起來可能你們大多數人都不認識,當你看到它,可能你會說這可能是2020年最新最偉大的新語言,就這麼簡單。右讀一些輸入,得到該數字,顛倒它,然後對奇數位和求和,然後對一些偶數和求和,並根據需要執行判斷邏輯,看看它是否被10整除,如果是則通過測試,否則就不通過。這個很十分簡單。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/ec\/ec3b1bb6b7f5fa248906cc89d6cd1a94.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在讓我們來看一下彙編語言實現。代碼去掉了註釋 —— 即使註釋在其中,也真的很難分析。我花了一些時間來分析,瞭解這段程序在做什麼。我會省去大部分的細節,會給你們一個高度概括的介紹。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/0d\/0d1d1c6576fa061564ed42213b8d151c.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此處從寄存器的操作開始。什麼是寄存器呢?我們知道在CPU內部有固定數量的存儲單元,這些存儲單元用於基本操作、算術運算、訪問內存單元、加載和存儲等。如果你準備編程,必須弄清楚你要如何使用這些寄存器。這只是複雜度的一部分,你還必須在編程時考慮,如何確保你空間足夠使用。這些操作與計算信用卡號碼的校驗和無關,這只是當你用匯編語言編程時,必須要發生的一些工作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/f5\/f55ce11e7a32ceb4e265e685d30e143a.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是字符串長度。你會注意到,上面沒有名字,沒有卡號,以及諸如此類的東西。它只是一堆寄存器,你必須跟蹤你的程序中交叉引用,你還必須做出決定將使用哪個寄存器來計算字符串的內存地址,並將字符串所有內容存儲在那個內存地址。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/fb\/fb1a1698d390b30b73869a1f4294e66c.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"反轉字符串也是類似操作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/e6\/e6d131fcddbfe7974dd8a6c1633d4d73.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我不會再深入討論了,這是一堆詳細的指令、邏輯和判斷,和你要做的事情沒有任何關係。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/88\/882dea950bddef75d617012a466c2398.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過這個高度概述的介紹,不難發現用匯編語言的代碼要比 PL\/ 1長得多,寄存器名稱也不含什麼信息,直接暴露了這臺機器的很多工作原理。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/0f\/0f1135ecf93e21bdcc66fd885d91b694.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是那臺機器的示意圖,有浮點寄存器、定點寄存器、16位通用寄存器,需要對特定內存單元、特定存儲地址進行讀寫操作。我並不是對彙編持完全否定的態度,彙編語言編程的好處是,你可以用很少的資源獲得非常好的性能。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/08\/085b93c8dd985fcb483e63ddd58dec12.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是 Margaret Hamilton 的照片,還有一堆阿波羅制導計算機的彙編語言代碼的打印件,我認爲這真的是個很酷的東西。她是該項目的首席軟件開發人員,在1969年編寫了火箭載着宇航員導航到月球的程序,使用的技術比我們今天要原始得多。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/91\/91efeee5ce8919afd17b6b7feddb30fe.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是一張阿波羅制導計算機的照片,它的運行頻率是 2MHz,可能比你今天擁有的最慢的計算機或手機慢一千倍。不僅如此,這裏還有一件非常有意思的事——資源是如此的有限!真的,這導致用匯編語言編程的人們需要詳細地思考,如何去使用這 2,048 個字節的內存,這就是你能使用的全部內存,需要以非常謹慎地使用內存的每一個字節。記住,我們要去月球的時候,火箭上有一百五十種不同的裝置需要去控制,而我們只需要使用這麼一點點內存就可以做到。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/fe\/fe03bb589a728cd02115daa92e0aafed.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"彙編語言編程需要考慮的事情,包括如何使用每個寄存器?如何安排內存中的數據?如果我要切換程序,我該怎麼做?等等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/e1\/e1539f50a1f918e62f2786673a1aba8b.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在我們來到2020年,當你想到雲計算的時候,您會遇到很多類似的問題!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"那麼,我應該如何使用每一個服務器呢?"},{"type":"text","text":" 我需要多大的一個服務器實例?如何知道何時需要分配更多服務器?其中一個服務器是否出現故障時,我該如何應對這種情況?即便我知道需要備份我的數據,但是我應該備份多少次?如何保證數據的一致性?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"所以這些都是挑戰,真正的挑戰,艱難的挑戰,它們與你正在交付的應用程序沒有任何關係。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/1b\/1b38d3c6c15d02d8231ecf49e47706af.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那麼彙編語言的複雜度,是如何解決的呢?解決辦法其實很簡單,編譯器會做生成機器代碼的工作。編譯器是如此出色,以至基本沒人再需要使用匯編語言進行編程,除非是非常特殊應用程序。"},{"type":"text","marks":[{"type":"strong"}],"text":"我認爲依賴服務器的編程,就是當今的彙編語言編程。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/d3\/d31e2c8a6432cb754843d14bf6bd540c.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了說的更加具體,我就像這樣對比一下。用匯編語言編程,要處理寄存器的名稱,要處理特定的內存單元和地址。當你使用高級編程語言時,這些東西就消失了對嗎?你永遠也看不到寄存器,編譯器會完全處理它,將其隱藏起來,包括內存地址。在一些不那麼高級的語言 (如C語言) 中你還會看到這些。但可以肯定的是,一旦你使用了像 Java 這樣的語言,內存地址就完全消失了。如果談及雲服務,也會有服務器地址,我的觀點是這不屬於雲,它將消失!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/7c\/7ca109fabbc8a42d8620a5d5a26691cf.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"所以我的觀點是,Serverless 是一個精確的命名,它表明了當今基於雲編程的問題所在,暴露在編程模型中的服務器,就像暴露寄存器或特定內存單元一樣有問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在最關鍵的是將過去對我們有效控制編程複雜度的方法,應用到雲服務中,將它們應用於消除服務器、固定地點、固定資源、固定地址,改變我們基於雲編程的方式。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/6d\/6d5e8655f29980e13808d1261fe076be.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/b2\/b265a56eca19c97c16f6358d7414ff52.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"接下來,我想對目前的一些研究做一個簡要的概述。我會偏向伯克利分校的視角,目前整個學術界都在進行Serverless研究,並且一直在加速發展。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/69\/69804251f39e620c8954bb7929807efb.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"讓我們來逐一過一下已經完成的一些工作吧, 來針對性的解決這些對Serverless的反對觀點。至於名字不好這件事,我們已經聊過了,不再多說。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/1e\/1e9038c2fe23710b79f1bf46cd8f0f17.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"第一個是無狀態計算的限制。在伯克利我們開發了一個名爲cloudburst的系統,它將高性能K-V存儲與FaaS運行時集成在一起,允許數據緩存與主機放在一起,在 Serverless的環境中實現了高性能計算。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/6c\/6ccc93aa7814ea860af00408b5abc387.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"還有其他的反對意見認爲, Serverless 太貴,或效率低下。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/c9\/c9d0b48caabff5cf1df8b027bff07b17.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如你所見,CloudBurst 解決了延遲,這裏我們對比了一個函數調用另一個函數的場景,只是進行一系列簡單的操作。我們看到與目前公共雲的相比,這裏的延遲大大減少了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/66\/663ceb8fd544f2a665c1953831707790.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們還在努力將GPU等硬件加速集成到Serverless計算中,這實際上非常有意思,因爲可以想出不同的方法來做到這一點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/21\/211aa57eae7a69721300ab89e7a75683.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"例如,一種選擇是讓每個雲函數都附帶一個GPU。所以如果你有很多雲函數在運行,你會得到很多的GPU和CPU。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/03\/030e64b75a4b10d2801944bf553d6417.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一種選擇是將計算單元進行拆分,這樣你就可以有一個 GPU-only 的函數(或許也用到一點 CPU),這樣在擴展該資源方面會獲得更大的靈活性。你可以獨立於CPU資源和內存資源,來擴展GPU資源,這也是我們一直在研究的。另外,在傳輸數據等方面也存在一些挑戰,但這是一個非常令人興奮的研究領域。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/fc\/fce5c8a79b20d4eeff59b903869ce0b6.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對Serverless的另一個反對意見是:人們會說,它不支持我現有的一些應用程序,比如一些遺留應用程序。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/5e\/5e504a7a085eeed4a6c2414e433868e3.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"例如,直到最近還沒有共享文件系統的支持,沒有 FaaSFS 這樣的文件系統可以與雲函數一起使用。AWS 已在幾個月前發佈了一款產品,但與傳統本地文件系統相比,在性能方面還存在一些瓶頸。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/15\/15aafae2d6c225b666ed2bc805e9bea0.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了解決這個問題,我們構建了一個共享文件系統,稱之爲 FaaSFS 。提供了集成事務機制的緩存,能夠確保數據非常靠近算力,可以非常快地訪問,並且保持了數據的全局一致性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/9a\/9af94de16e7ab30cb8fc60c28b443a10.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最後,人們有時會有的另一種抱怨:Serverless 聽起來很簡單,但實踐起來卻很難。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/10\/10436af125a619f840b593d0886d5069.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我只想回到我之前提出的論點,也就是說,在過去的五六十年裏,我們有大量的複雜度計算。可以看到在語言領域已經發生了很多事情,產生了巨大的變化,例如一些編譯工具。對於雲計算來講,現在還爲時尚早,伯克利的人們已經在此領域開展了很多基礎性的工作,我非常興奮能在我們前進的過程中與他們一起工作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/8f\/8fc6fcac191a0a0faf276cd5b813850e.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/3b\/3b24f9306137131a1ed1e47194ff5f53.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雖然對 Serverless 計算仍有不少反對聲音。我不會說我今天在這裏已經解決了所有這些問題,但我要說的是,這些問題正在一個接一個的被解決。學術界和人力資源行業的研究人員,都在非常積極地攻克幾乎所有的障礙。所以我們對Serverless計算很有信心,這個夢想真的可以應用於廣泛的應用程序中。我們所有人很快就能真正享受到這一點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/86\/86943f65d82b11c1e203d0f67fc732c3.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Serverless 計算的本質是:雲計算的 Serverless 階段,馴服了基於雲編程的偶然複雜度,讓您專注於本質複雜度(業務本身)—— 那些你的業務應用中真正有價值的部分。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/cb\/cb92b540da0441f8d7dbe375d6afc2d7.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"就像一開始在那個橋的例子中,把所有其他讓你分心的東西拿走,擺脫它們,然後專注於最最重要的事情。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/0b\/0bb46c02d75dcefa7b3b538e40e01b1d.png","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"總結一下,服務器是造成雲應用程序偶然複雜度的根本原因,不接受反駁。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"思考一下,只需想想一下今天我們編程模型所不存在的那些東西,寄存器名稱、內存單元、以及服務器地址,這些也很快就會消失不見。要使 Serverless 應用於每一個應用場景,仍然面臨着各種各樣的挑戰,同時研究人員正在積極地向前邁進,解決所有這些挑戰。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/07\/07fafecf28e4d775d54fd954acb5ce12.webp","alt":"Image","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章