云計(jì)算時(shí)代出現(xiàn)了大量XaaS形式的概念,從IaaS、PaaS、SaaS 到容器云引領(lǐng)的CaaS,再到火熱的微服務(wù)架構(gòu),它們都在試著將各種軟、硬件資源等抽象為一種服務(wù)提供給開發(fā)者使用,讓他們不再擔(dān)心基礎(chǔ)設(shè)施、資源需求、中間件等等,在減輕心智負(fù)擔(dān)的同時(shí)更好地專注于業(yè)務(wù)。
無服務(wù)器架構(gòu)(Serverless)和 Functions-as-a-Service(FaaS)是云計(jì)算的熱點(diǎn)趨勢。除了微軟和亞馬遜,還有許多其他供應(yīng)商也提供 FaaS。已經(jīng)有不少文章介紹了無服務(wù)器架構(gòu)這項(xiàng)技術(shù)典型的應(yīng)用場景是在流式任務(wù)處理,目前已經(jīng)受到了越來越廣泛的關(guān)注。本文將為大家介紹什么是無服務(wù)器架構(gòu)會成為下一代IT基礎(chǔ)架構(gòu)。
去年秋天,由于大流量涌入,澳大利亞統(tǒng)計(jì)網(wǎng)在幾個(gè)小時(shí)內(nèi)便崩潰。 接下來的一個(gè)周末,兩名大學(xué)生在一次黑客馬拉松中搭建了一個(gè)非官方的澳洲統(tǒng)網(wǎng),能夠承受的流量是官方網(wǎng)站的四倍,而且這個(gè)非官方的網(wǎng)站成本只有約400美元,而澳大利亞政府在官方網(wǎng)站上卻花了約1000萬美元!
這里的重點(diǎn)不是關(guān)于政府的浪費(fèi),而是一個(gè)小團(tuán)隊(duì)、即使具備云方面的知識很少,只要提供了正確的基礎(chǔ)設(shè)施技術(shù),例如亞馬遜的無服務(wù)器產(chǎn)品AWS Lambda。在短時(shí)間內(nèi)就能完成較為復(fù)雜的網(wǎng)站。
提供業(yè)務(wù)價(jià)值,而不是軟件
隨著軟件蠶食著世界,我們經(jīng)常陷入一種忘記企業(yè)的使命是向客戶提供價(jià)值的陷阱。為客戶提供的價(jià)值絕對不是軟件,軟件只是一種手段,我們應(yīng)盡可能少地寫軟件??杀氖俏覀兘?jīng)常忘記這一點(diǎn)。
幸運(yùn)的是,軟件開發(fā)業(yè)正在經(jīng)歷一些根本性的反思 ,大而全的應(yīng)用,長時(shí)間的構(gòu)建測試發(fā)布周期,以及無法快速整合用戶反饋。以下幾個(gè)趨勢,推動了這種轉(zhuǎn)變:
微服務(wù)邁向主流。曾經(jīng)專屬于具備網(wǎng)絡(luò)規(guī)模的公司,微服務(wù)架構(gòu)如今收到主要的開發(fā)商廣泛采用。 由于能夠帶來更快的部署周期,微服務(wù)帶來更高的資源利用率和更好的設(shè)計(jì)自主性,應(yīng)用程序開發(fā)正在迅速從大容量轉(zhuǎn)移到分布式、面向服務(wù)的結(jié)構(gòu)體系。
開源的興起。開源軟件和共享代碼存儲庫(如GitHub)的迅速普及已經(jīng)將軟件開發(fā)轉(zhuǎn)變?yōu)橐环N社區(qū)活動。今天的開發(fā)人員廣泛地利用開放源代碼和第三方服務(wù)來整合一流的技術(shù),并大大縮短產(chǎn)品推向市場的時(shí)間。
成功的產(chǎn)品需要快速迭代。與幾年前不同,曾經(jīng)的軟件產(chǎn)品經(jīng)過長達(dá)一年的設(shè)計(jì),實(shí)施和測試周期而無需與用戶發(fā)生聯(lián)系,今天最好的產(chǎn)品建立在快速構(gòu)建、了解用戶反饋回路的基礎(chǔ)之上。 對初創(chuàng)企業(yè)來說如此,也適用于大型企業(yè)。
當(dāng)然,為了更好的利用上述趨勢,需要恰當(dāng)?shù)幕A(chǔ)設(shè)施。到目前為止,我們?nèi)匀皇艿交A(chǔ)設(shè)施IT堆棧的限制,在過去十幾年中,我們非常努力地構(gòu)建了應(yīng)用程序,以適應(yīng)基礎(chǔ)設(shè)施,而不是基礎(chǔ)設(shè)施來適應(yīng)應(yīng)用。雖然我們當(dāng)然試圖通過容器和DevOps等創(chuàng)新的形式來進(jìn)行改進(jìn),但是這已經(jīng)造成了更多的復(fù)雜性。如果未來我們有數(shù)十億臺設(shè)備需要進(jìn)行實(shí)時(shí)或關(guān)閉的數(shù)據(jù)傳輸,需要進(jìn)行分析和處理,顯然,我們現(xiàn)有的基礎(chǔ)設(shè)施無法滿足需求,我們需要的是一個(gè)根本上全新的基礎(chǔ)設(shè)施堆棧,它應(yīng)該是應(yīng)用程序優(yōu)先,讓開發(fā)人員專注于提供業(yè)務(wù)價(jià)值。
進(jìn)入無服務(wù)器世界
無服務(wù)器架構(gòu)(又稱功能即服務(wù)或FaaS)正是我們需要的下一代基礎(chǔ)架構(gòu)。
無服務(wù)器架構(gòu)允許開發(fā)人員運(yùn)行后端代碼,而無需管理自己的服務(wù)器系統(tǒng)或服務(wù)器端應(yīng)用程序。 開發(fā)人員可以將他們自己的代碼與其他最佳的服務(wù)相結(jié)合,創(chuàng)建應(yīng)用程序,以便他們可以通過用戶測試,進(jìn)行快速發(fā)布和迭代。
無服務(wù)器架構(gòu)有幾個(gè)好處。 首先,不考慮基礎(chǔ)設(shè)施可以減輕開發(fā)人員運(yùn)行的應(yīng)用程序的運(yùn)行復(fù)雜性。 第二,橫向擴(kuò)展是完全自動化和具有彈性的。 第三,減少封裝和部署復(fù)雜性使開發(fā)人員能夠通過多個(gè)實(shí)現(xiàn)(implementation)來快速迭代。 第四,隨著計(jì)算單位縮小到一個(gè)功能(與VM或容器相反),資源利用水平是前所未有的,允許用戶為按照使用量準(zhǔn)確付費(fèi)。
因此,無服務(wù)器的普及程度的增長一直是很驚人的。 到目前為止的用例包括集成(將應(yīng)用程序內(nèi)的函數(shù)暴露給外部調(diào)用者)、事件驅(qū)動用例(根據(jù)事件觸發(fā)從一個(gè)位置移動日志到另一個(gè))、DevOps(CI / CD chron jobs)和數(shù)據(jù)處理。 但是,正如我們在虛擬機(jī)和容器中看到的(兩者最初都被限制用于開發(fā)測試用例),我們預(yù)計(jì)無縫服務(wù)器將很快演變成更通用的工作負(fù)載。 事實(shí)上,頂級的公共云提供商估計(jì),在3 到5年內(nèi),50-60%的云工作負(fù)載將無服務(wù)器。 三大云提供商之一已經(jīng)在其無服務(wù)器工作量方面實(shí)現(xiàn)了100%以上的環(huán)比增長。 最后,Google趨勢(一個(gè)很好指向標(biāo))顯示,過去18個(gè)月內(nèi)無服務(wù)器的搜索流行度增長了20倍!
無服務(wù)器架構(gòu)的缺陷
盡管無服務(wù)器架構(gòu)非常有前景,但無服務(wù)器是一種非常年輕的技術(shù),離成為主流還有一段距離,認(rèn)識到這一點(diǎn)非常重要。
無服務(wù)器架構(gòu)有兩個(gè)最突出的局限性。第一,到今天為止,無服務(wù)器功能都是無狀態(tài)的(stateless )。 狀態(tài)信息不能從一個(gè)函數(shù)的調(diào)用傳遞給下一個(gè)。這限制了在無服務(wù)器的基礎(chǔ)架構(gòu)上構(gòu)建的各種應(yīng)用程序。
第二,和任何新技術(shù)一樣,無服務(wù)器缺少成熟的工具生態(tài)系統(tǒng)。由于高度分布式的架構(gòu)監(jiān)控和調(diào)試無服務(wù)器的應(yīng)用程序真的很棘手,還有安全性。 另外,無服務(wù)器還具有一些獨(dú)特的困難,例如發(fā)現(xiàn)可用的功能并將它們拼接在一起構(gòu)建應(yīng)用程序 ,這需要額外的編程來完成。
話雖如此,但考慮到用戶對大型云服務(wù)提供商和小型創(chuàng)業(yè)公司感興趣,以及相關(guān)領(lǐng)域越來越多的投資,我們?nèi)匀黄谕ぞ呱鷳B(tài)系統(tǒng)能夠快速成熟,
凝視水晶球
基礎(chǔ)設(shè)施抽象,自動擴(kuò)展和更好的資源利用率應(yīng)該使得無服務(wù)器取得成功。但僅僅認(rèn)為無服務(wù)器只是下一代的基礎(chǔ)設(shè)施是非常短視的,無服務(wù)器的真正機(jī)會要大得多。 實(shí)際上,無服務(wù)器可以從根本上重新定義企業(yè)軟件如何分配,商品化和貨幣化。
今天,企業(yè)軟件主要有兩種類型:本地部署安裝和SaaS。運(yùn)行和管理相應(yīng)基礎(chǔ)設(shè)施的責(zé)任在于前者的軟件消費(fèi)者。相比之下,無需服務(wù)器的用戶或提供商無需運(yùn)行或管理任何基礎(chǔ)架構(gòu)。這是非常重大的,它開辟了通過市場分銷和消費(fèi)企業(yè)軟件的新可能性。例如,安全供應(yīng)商可以將其惡意軟件檢測軟件作為無服務(wù)器平臺的功能進(jìn)行打包和部署,并將其銷售給多個(gè)不同的消費(fèi)者,如移動應(yīng)用開發(fā)人員、IoT設(shè)備制造商和無人機(jī)操作公司。那些消費(fèi)者可以只是調(diào)用這個(gè)功能,只支付他們使用的功能。類似地,可以以類似的方式打包和貨幣化其他專門服務(wù)(例如,機(jī)器學(xué)習(xí),認(rèn)證,支付處理等)。
此外,無服務(wù)器可以促進(jìn)企業(yè)軟件的分類定價(jià),從而創(chuàng)造更大的獲利機(jī)會。 例如,聊天操作的業(yè)務(wù)可以將其自然語言處理能力作為上述市場上的服務(wù)來實(shí)現(xiàn),而不用擔(dān)心管理基礎(chǔ)設(shè)施的頭麻煩。 如果發(fā)生這種情況,企業(yè)將能夠以比以往任何時(shí)候更細(xì)致地的提供軟件服務(wù)。
最后,正如我們之前所說,應(yīng)用程序正在變形成為服務(wù)掛毯,應(yīng)用邏輯將這些服務(wù)粘在一起。其中一些服務(wù)將在內(nèi)部建立,有些將來自同一家公司的另一個(gè)團(tuán)隊(duì),另外一些來自一個(gè)完全外部的第三方。此外,這些服務(wù)可以在一個(gè)或多個(gè)公有云上或者混合云組合的前提下運(yùn)行。當(dāng)這種情況發(fā)生時(shí)(已經(jīng)發(fā)生),我們將需要一個(gè)基礎(chǔ)架構(gòu)框架,它們位于所有IaaS提供商(公共或私有)之上,以提供服務(wù)發(fā)現(xiàn)功能,呼叫路由和計(jì)費(fèi),而不管每個(gè)單獨(dú)的服務(wù)是運(yùn)行在哪個(gè)IaaS上,想象一下,運(yùn)行在該框架上的應(yīng)用程序,它來自GCP(來自AWS(或Azure)的數(shù)據(jù)庫服務(wù))和一組來自私有云的內(nèi)部服務(wù)的GCP調(diào)用機(jī)器學(xué)習(xí)服務(wù)。當(dāng)這種情況發(fā)生時(shí),權(quán)力將開始從全天候的IaaS提供商轉(zhuǎn)移到該框架。也就是說,無服務(wù)器最終真的會蠶食基礎(chǔ)設(shè)施!