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