在柏林舉行的microXchg微服務大會上,Adrian Cockcroft做了題為“將微服務濃縮為函數”的演講。演講的關鍵要點包括:網絡速度的提升、二進制協議的使用、配置管理和容器技術等使得部署包含多種微服務的應用程序成為可能;由無服務器架構技術帶來的機會為在數據中心運行快速開發的函數即服務(functions-as-a-service,FaaS)帶來了更多的可能;為了有效地交付業務價值,現代公司必須能夠快速地構建原型和應用程序;現代企業里軟件開發的最大挑戰是與企業內的人和流程緊密相關的。
身為AWS的云架構戰略VP,Cockcroft在演講開始首先討論了十年前的軟件交付狀態,以及它們與現代工程師們具備的能力之間的關系。在九十年代以及21世紀初,手工部署物理硬件的挑戰帶來了運維團隊對部署流程的優化,盡量少地涉及人工產品(也就是單體應用程序)。這就導致了所謂的“大泥球”(big ball of mud)架構反模式的產生。
盡管21世紀初在軟業開發業中面向服務架構(Service Oriented Architecture,SOA)以及相應的WS-*很流行,剛才提到的最小化可部署人工產品的趨勢,再加上局域網內每秒1Gb的網絡傳輸速度限制,這些催生了由粗粒度API提供的大型服務,它們利用一定數量的SOAP/XML消息進行通信。相對應的,現代局域網絡的傳輸速度已經可以達到每秒25Gb,而且對Avro、gRPC、簡單二進制編碼等許多高效的二進制編碼協議的使用,這些改進使得消息通信效率提升了至少兩個數量級。
最新一代的AWS實例相互之間的連通網速為25Gb/s,而不是1Gb/s,這個優勢加上使用Avro和gRPC等二進制通信協議(要是你更聰明的話就直接做簡單的二進制編碼……),這些都使得最新的微服務架構風格成為可能。
大概是五年前出現了第一代DevOps工具,比如Chef和Puppet等,這些讓自動化部署和配置硬件,以及持續部署和升級軟件成為可能。Cockcroft談到當初他還在Netflix工作時,還沒有采用這種“自動化系統管理”的方式,所以Netflix團隊采用的是不可變基礎架構。在Netflix的系統里,像預定制的亞馬遜服務器鏡像(Amazon Machine Images,AMIs)這樣的粗粒度程序,都會通過可編程的模式與一個虛擬機計算實例相關聯,并且部署在負載均衡器后面的可動態擴展的自動擴展組(Auto Scale Group,ASG)里。這樣就可以支持對應用程序功能的“當場替換”,而不是通過操作系統命令來控制部署和升級。
更近一些,以容器一類的技術為代表的第二代DevOps工具更進一步地推動了對不可變架構的應用,這種操作系統級的虛擬化技術讓大家可以更快地創建和實例化軟件系統的各個部分,讓部署時間從幾分鐘降為幾秒鐘。對容器技術的廣泛使用和Docker形成的事實標準也創造了標準化資源。比如說,許多數據庫和中間件供應商都可以提供官方版的Docker鏡像,其中提前打包了他們的產品,并且做了一般性的配置。
Cockcrost表示,最新的“無服務器架構”或者“函數即服務”技術風潮已經開啟了軟件開發業的一次新革命。之前使用虛擬機和容器進行“快速部署和持久運行”的模式已經過時了,現在是要使用無服務器架構技術進行“快速部署和按需(按付費)運行”。
有了AWS Lambda之類的FaaS或無服務器架構等技術帶來的簡化編程模型、彈性部署、可組合性等好處,Cockcroft表示整個系統都可以快速建立原型和構建。而像AWS Greengrass一類的技術,則可以讓AWS Lambda函數離線地運行在基于Linux的物聯網設備上,因此可以進一步擴展無服務器架構技術的適用范圍和可用性,“從數據中心到最前端,也可以是混合型”。
隨著AWS Lambda一類無服務器架構技術的興起,整個系統都可以只需幾天便構建完畢,你該問問你自己:“我該把團隊投入到升級遷移類活動中,還是干脆把現在的應用程序重寫一套呢?”
在演講的最后,Cockcroft表示在許多現代企業中,軟件開發的問題總是與企業中的人和流程密切相關的。反向康威操縱(Inverse Conway Maneuver)之類的方法,以及Pheonix項目和DevOps手冊等資源都可以用于驅動變革性的改變。微服務架構風格就是一個建立跨功能、自治的和緊密配合的業務單元的成功案例。
微服務不適用于組織倉庫。在微服務開發中,要在單個服務的邊界內有對開發活動的高度信任。服務供應商之間的任何低信任度行為都要通過良好設計的API以及服務水平協議(service level agreements,SLA)來解決。
Adrian Cockcroft的microXchg演講“將微服務濃縮為函數”視頻可以在大會的YouTube頻道找到。關于這個話題的更多內容可以參考Cockcroft的一篇最新博客:“業務邏輯從單體到微服務,再到函數的演變”。
閱讀英文原文:Shrinking Microservices to Functions: Adrian Cockcroft Discusses Serverless at microXchg