來源:北大青鳥總部 2023年02月09日 16:31
當前在互聯網圈最如火如荼、大家干的熱火朝天、呼聲最高的事情莫過于微服務、上云了。
傳統的企業在嘟囔著數字化轉型,要將以前的單體式應用進行微服務化,要將自建的數據中心遷移到云廠商提供的云服務上(私有云或混合云)。然而這波未平、下波技術熱潮又來了,現在各大云廠商如AWS、阿里云、騰訊云都在投入重大精力去做serverless(無服務器)服務,云計算正在經歷從IAAS—>PAAS—>SAAS—>BAAS&FAAS的過渡。
那么什么是serverless?它的核心技術包含什么?具體又如何使用呢?今天小編帶大家體驗一波新技術。
什么是serverless?
關于serverless的定義,目前主要是引用MartinFowler在《serverlessArchitectures》中的定義,即充分與第三方協同、基于云的服務與應用,serverlesswas first used to describe applications that significantly or fullyincorporate third-party, cloud— hosted applications and services,to manage server-side logic andstate。簡單一點,望文生義,就是無服務器。這樣的解釋可能難以理解與消化,那么我們結合一個用戶請求如何運行的來給大家講解一下。
常見的web服務架構如下,由用戶在客戶端發起一個請求,經過服務器處理,期間調用數據庫等進行數據的存儲與運算,最后返回給客戶端結果,呈現給用戶。
如果我們拆分的再細一些,客戶端往服務器發送請求時,會需要身份認證、安全校驗、負載均衡等,最后才是業務函數進行業務邏輯的處理,那么上圖就有了新的方式。
在這個結構下我們看到的是一堆函數,已經看不到服務器了,研發人員只需要關心應用程序本身的邏輯實現和狀態,對于服務器的管理、服務之間的通信等全交由云廠商來完成。這就是serverless無服務器的由來。
serverless是在容器技術(docker)、微服務技術(servermesh)的技術上發展起來的,強調的是后端服務與服務器函數服務的結合與提供,它有兩大核心技術:BAAS(backendas a service)、FAAS(functionas a service)。
核心技術講解
FAAS函數即服務,即不需要管理服務器系統,不需要自己編寫服務器應用程序,就可以直接運行后端代碼。比如文件存儲、數據存儲、推送服務等,可通過API驅動、郵件驅動、消息隊列驅動。
BAAS后端即服務,即不用編寫、管理服務端軟件(如負載均衡、服務注冊等),使用通用的遠程組件來提供服務。相當于在微服務架構中的常用組件如服務注冊中心eureka、服務網關zuul、服務配置中心zookeeper等的功能全由云廠商打包在一起提供了,不需要開發者再去維護這些組件與服務之間的調用關系。
使用serveless實現helloworld?
學習任何一門語言的第一課永遠都是helloworld,今天我們在騰訊云提供的云函數上來進行servelss的第一個課—helloworld。注冊登錄騰訊云后,選擇新建函數,輸入名為helloworld的PHP函數,選擇使用模板函數即可。
點擊下一步即可看到整個函數的index.php代碼
點擊運行,即可看到整個函數的執行結果、執行時間、運行內存、運行時間、整個的執行日志。
在這個過程中,除了業務代碼hello.world的執行之外,其余的事情我們什么都沒有做,對不對?與后端的通信、服務器資源的管理等全都不用我們管,真正的實現了無服務器。我們也可通過看時機中的PHP函數是如何運行的來感知serverless的無服務器服務。
對于一個PHP應用來說,當用戶在前端發起請求之后,請求會傳遞到web服務器apache或nginx來接收用戶請求,接收用戶請求之后再傳遞給PHP-FGM解析器進行業務邏輯的處理,獲取結果后生成html數據返回給用戶。
而采用了serverless服務之后,對于服務器的管理這塊全交由云廠商來進行維護了,云函數的執行環境實例就是Apache/Nginx。
在本次helloworld的執行代碼中,main_handler函數的傳入參數context便是提供了執行環境的上下文,而event就是驅動的事件。
雖然serverless簡化了整體的開發流程,但是也會存在一些問題,典型的問題有兩個。
1)調試不方便,因為太多的基礎服務都是云廠商提供的,在本地可能會因為內網限制等原因導致調試不方便,太過于依賴云廠商也導致想做遷移時也不方便。
2)冷啟動,剛剛提到serverless都是事件驅動型的,也就是說一般情況下都處于睡眠狀態,啟動時間至少也要幾百毫秒或幾秒。對于有些業務來說,是不可忍受的。不過云廠商也在想辦法解決這些問題。
回過頭來看看,技術架構的演變經歷了從早期的單體式架構、SOA架構、微服務架構,再到serverless無服務架構的階段,整個發展和人類經濟的發展史也很像。
早期的時候生存生活的每件事情都自己做,比如小編今年想吃土豆,那必須從春天開始耕種,然后施肥、鋤草,再到秋天收獲,存儲糧倉,到年末時做成土豆大餐,這和單體式架構完全承擔了應用程序的每個功能是一樣的。
隨著社會的發展,小編發現這樣的模式太累了,想吃玉米或者紅薯了也還得自己去播種耕耘,于是他就和隔壁種玉米的小A、種紅薯的小B商量,等到秋收成熟時,通過土豆去換他們的玉米、紅薯,到年末時,一頓美味的大餐就做成了,土豆玉米紅薯全都有,這和SOA架構的核心原理是一樣的。整個業務拆分成了多個服務,服務之間彼此合作,提升了業務的可用性和效率。
經過了改革開放后,整個國家的經濟像火箭一般的發展,小編也不再滿足于年末的土豆玉米紅薯了,他想吃螃蟹大蝦雞鴨魚肉,這時候整個社會的分工也開始進化了,有專門生產海鮮類,有專門提供果蔬類,有專門提供生禽類,這時候小編的年末大餐就變的豐富了,雞鴨魚肉海鮮螃蟹全都有了,這和微服務架構把整個業務拆分成多個服務,每個服務由不同的人來進行維護,各自開發迭代是一樣的道理。
在全國人民的共同努力下,國家的經濟越來越好了,互聯網技術也發展的如火如荼,大數據、云計算、人工智能等技術應用在了零售行業,小編年末想要吃大餐時,再也不用把所有的生鮮食材全買回來自己做了,而是可以到比如盒馬鮮生這樣的新零售店,選擇好了食材之后,只需要應用自己的核心技術來去烹飪就好了,這就和無服務器的核心原理是一樣的,只需要提供運行函數,其余的服務器購買維護升級都全都不用管。
毫無疑問,serverless無服務架構必將是下一波技術浪潮,整個社會進化的目的是為了提供生產生活效率,技術架構的發展也必將如此,越底層的內容就交給專業的云廠商去做,而開發者們只聚焦于業務價值的實現即可。