目前如果提到招聘中問(wèn)到最多的技術(shù)點(diǎn),那么一定就是大數(shù)據(jù)和微服務(wù)。隨著分布式計(jì)算的普及,微服務(wù)也越來(lái)越走進(jìn)了我們的生活?,F(xiàn)在如果作為一個(gè)后端程序員,如果你不了解微服務(wù),恐怕你自己都不好意去面試吧。下面我們就來(lái)簡(jiǎn)單了解下微服務(wù)中的函數(shù)計(jì)算。
函數(shù)計(jì)算起源
作為程序員,我們一直希望的就是專注寫代碼,不管是產(chǎn)品經(jīng)理,還是運(yùn)維人員,都不要打擾我們。但是在過(guò)去這是不現(xiàn)實(shí)的,特別是一些小公司,作為一個(gè)程序員,我們不僅要能夠自己寫后臺(tái)代碼,還要會(huì)寫前端,同時(shí)也要會(huì)切圖,更要懂服務(wù)器的部署,可以說(shuō)過(guò)去的程序員都是全棧工程師,他們每個(gè)人都能頂一個(gè)團(tuán)隊(duì)。但是隨著時(shí)間發(fā)展,現(xiàn)在軟件功能越來(lái)越復(fù)雜,程序員更傾向于專注。每個(gè)人甚至只能開(kāi)發(fā)軟件的一個(gè)模塊功能。服務(wù)器的部署和運(yùn)維有了專業(yè)的人員來(lái)處理。如果一個(gè)團(tuán)隊(duì)只想專注業(yè)務(wù)開(kāi)發(fā),不想處理服務(wù)器運(yùn)維相關(guān)的事項(xiàng),那么serverless是最好的解決辦法。這也是函數(shù)計(jì)算的由來(lái)。
什么是函數(shù)計(jì)算
FAAS(function as a service),它往往和無(wú)服務(wù)架構(gòu)(Serverless Architecture)一同被提起。
Serverless可以看作是比微服務(wù)架構(gòu)更細(xì)粒度的架構(gòu)模式,即FaaS。Lambda也是FaaS的典型代表,它允許用戶僅僅上傳代碼而無(wú)需提供和管理服務(wù)器,由它負(fù)責(zé)代碼的執(zhí)行、高可用擴(kuò)展,支持從別的服務(wù)器或其他Web應(yīng)用直接調(diào)用等。
比如下面的代碼,就是一個(gè)函數(shù)計(jì)算的例子:
module.exports = function(context, callback) { callback(200, "Hello, world!
"); }
我們只要把代碼上傳到服務(wù)器,然后我們就可以訪問(wèn)執(zhí)行了,我們不需要管理web服務(wù)器(nginx或者apache),我們不需要處理服務(wù)器負(fù)載高怎么辦,因?yàn)橐磺袑?duì)于我們開(kāi)發(fā)者來(lái)說(shuō)都是透明的,我們只需要專注功能的編寫,其它交給云服務(wù)器處理即可。函數(shù)計(jì)算就是我們?nèi)恳龅氖虑椤?/p>
函數(shù)計(jì)算優(yōu)點(diǎn)
那么函數(shù)計(jì)算有哪些好處呢?
首先,最重要的就是節(jié)約成本,我們只需要把人力花費(fèi)在具體業(yè)務(wù)的編寫上,不需要花費(fèi)精力去運(yùn)維和管理服務(wù)器。
其次,函數(shù)即服務(wù)的引入,然我們的代碼更加清晰,調(diào)用更加方便。
然后,擴(kuò)展方便,我們需要多少的資源完全由使用決定,當(dāng)訪問(wèn)量大的時(shí)候, 它會(huì)自動(dòng)擴(kuò)容。
再者,部署方便,現(xiàn)在我們部署的工作只是上傳代碼就可以了,不管是通過(guò)git,還是ftp等,反正只要把代碼傳上去,我們就完成了全部的任務(wù)。
Fission是一款基于Kubernetes的FaaS框架。通過(guò)Fission可以輕而易舉地將函數(shù)發(fā)布成HTTP服務(wù)。它通過(guò)讀取用戶的源代碼,抽象出容器鏡像并執(zhí)行。同時(shí)它幫助減輕了Kubernetes的學(xué)習(xí)負(fù)擔(dān),開(kāi)發(fā)者無(wú)需了解太多K8s也可以搭建出實(shí)用的服務(wù)。Fission目前主要支持NodeJS和Python,預(yù)支持C# .NET,對(duì)Golang的支持也在進(jìn)行中。Fission可以與HTTP路由、Kubernetes Events和其他的事件觸發(fā)器結(jié)合,所有這些函數(shù)都只有在運(yùn)行的時(shí)候才會(huì)消耗CPU和內(nèi)存。
FAAS只是開(kāi)始,但絕不是終點(diǎn)
未來(lái)肯定會(huì)有更多的企業(yè)和用戶使用FAAS來(lái)搭建應(yīng)用,因?yàn)樗蟠鬁p少了成本,同時(shí),它也是符合軟件分工的。以后的軟件開(kāi)發(fā)更加工廠化,大廠們提供基礎(chǔ)的API服務(wù),我們只需要調(diào)用這樣的服務(wù)即可。軟件的架構(gòu)讓我們更加專注業(yè)務(wù)層,也許,多年以后,可能作為一個(gè)軟件開(kāi)發(fā)人員已經(jīng)不需要再懂服務(wù)器了,因?yàn)榉?wù)器層面的東西都是固定服務(wù)了。我們的主要精力都花在了具體的業(yè)務(wù)上了。但是,F(xiàn)AAS目前還有很多不足之處,比如語(yǔ)言環(huán)境不是很全,比如不是很好用,比如集成還不是很完善,但是我相信這些將來(lái)一定會(huì)改善。而且,我們相信一定還會(huì)有比FAAS更好的技術(shù)出現(xiàn)。