Serverless 是雲時代軟件架構的未來麼?

Serverless 是雲時代軟件架構的未來麼?

© Ross Findon

本文來源「Hello Java」,原文標題《Serverless:雲時代的軟件架構核心思想》。

Serverless絕對是這兩三年來業界最火的詞(UC Berkley寫的一篇新的Serverless的觀點的文章裡提到:Serverless的搜索熱度和當年MapReduce最熱的時候一樣),在AWS這幾年的reInvent大會上也是絕對的主角,各種掛著Serverless xx的產品也層出不窮,但是估計你問十個人,會有十種解讀,我認為目前Serverless更主要的是一種思想,但具體怎麼實踐還在探索期,這篇文章就來講講我認為的Serverless。

AWS 眼裡的 Serverless

講自己的觀點之前先引用一些AWS的觀點,畢竟目前Serverless主要是AWS在引領:

"大概12年之前,我們深知雲將給軟件帶來翻天覆地的變化,我們創造了AWS。一直以來AWS希望與軟件開發者密切合作,打造出一個現代化的軟件開發框架。而不是告訴客戶,你們需要什麼工具。在AWS的信念中,我們認為真正知道軟件應該如何開發的只有一個人,就是客戶本人。"

“現代化的架構是使用AWS的服務、Lambda的功能,把它們連接在一起。沒有中間層、沒有應用層,也沒有數據庫層,它是一系列web服務連接在一起,由功能連接在一起,無需服務器,而安全、可靠性、規模、性能、成本管理這些事項由AWS做好”。

這兩段話是AWS的CTO在2018年8月中國的AWS Summit上講的,在AWS的觀點裡,我認為Serverless不是指FaaS,而是指上面講的這個現代化架構。

"Everyone wants just to focus on business logic."

這句話是在剛過去不久的AWS reInvent 2018大會上講到的,這句話其實對應了前面的現代化架構的價值點。

從上面這些引用的觀點,我們能看到對於AWS而言,並不是FaaS或者說Lambda==Serverless,而是很多的東西組合在一起才是Serverless,它的最大價值則是讓使用者能夠just to focus on business logic,而要做到這樣的效果其實是需要業務系統的架構演進到AWS所說的現代化架構。

UC Berkley 一篇關於 Serverless 觀點的文章

除了主導者AWS外,UC Berkley最近也發表了一篇關於Serverless觀點的文章:"Serverless Computing: One Step Forward, Two Steps Back",大家可以點擊閱讀原文來看這篇文章,文章裡首先闡述了下Serverless:

"As a result, cloud providers are quick to emphasize that serverless is not only FaaS. It is FaaS supported by a 'standard library': the various multitenanted, autoscaling services provided by the vendor. In the case of AWS, this includes S3 (large object storage), DynamoDB (key-value storage), SQS (queuing services), SNS (noti- fication services), and more. This entire infrastructure is managed and operated by AWS; developers simply register FaaS code that uses these services and receive 'pay-as-you-go' bills that scale up and down according to their storage and compute usage."

這個觀點和前面說的FaaS!=Serverless是一個意思。

關於One Step Forward的觀點為:

“By providing autoscaling, today’s FaaS offerings take a big step forward for cloud programming, offering a practically manageable, seemingly unlimited compute platform.”

可以看到這裡的觀點是Serverless帶來的主要是雲資源的彈性的使用。

關於Two Steps Back的觀點為:

“First, they painfully ignore the importance of efficient data processing.”

這個觀點指的主要是他們認為Function的情況下,每個Function是獨立的,Function之間的交互是通過持久或臨時的存儲、事件驅動來完成,導致了完成交互的時間比以前慢了很多很多。

“Second, they stymie the development of distributed systems.”

這個觀點指的主要是通常分佈式系統會依賴很多的類似leader election協議、數據一致性、事務機制等,而這些在目前的FaaS類型的平臺裡是很難去實現的。

我眼裡的Serverless

看到Serverless現在的狀況,太像當年的SOA時代了,我在07年加入淘寶做服務化,那幾年SOA思想滿天飛,但真的要開始做服務化的時候,會發現完全不知道該怎麼做,因為壓根就沒有地方定義清楚什麼是服務化,用什麼框架來開發服務化的業務系統,於是當年淘寶完全是自己摸索,做了HSF來作為服務化的開發框架,演進形成了經典的Service Provider/Service Consumer、Soft Load Balance服務框架結構,再後來又做了各種工具來滿足服務化後的Tracing、排查問題、服務治理等訴求,服務化現在基本成為了大部分業務系統的核心架構思想,它解決了超百人規模的研發團隊協作效率問題、以及單體系統的水平伸縮問題。

對於Serverless,我也認為是新時代的一個核心架構思想,業務系統的架構要演進,需要非常強的動力,例如服務化架構演進的動力通常就是超百人規模的研發團隊或者是單體系統的水平伸縮問題,那麼業務系統演進為Serverless架構的動力是什麼呢?

軟件發展到今天,多數企業的業務系統開始越來越複雜,開發一個業務系統需要掌握和關注的知識點越來越多,並且系統中出現了越來越多的非業務的基礎技術系統,例如分佈式Cache等,在這種情況下,研發的門檻在上升,效率在下降,而Serverless思想我覺得很重要的就是可以解決研發門檻和效率的問題,讓業務系統研發能更專注的關注在業務邏輯上(和AWS說的現代化架構的觀點一致),而不僅僅是按量付費。

那麼Serverless思想怎麼來解決研發門檻和效率的問題,我覺得核心的點就在於把業務系統開發時需要用到的各種基礎技術產品都隱藏起來,並將要用到的一些基礎技術進行歸納抽象,例如存儲、服務交互,這樣,開發人員要學習的東西可以大幅減少,並且也不用管一堆項目依賴的基礎技術產品的運行狀況了,如果能做到這樣,意味著在開發業務系統時可以更加聚焦的關注業務邏輯,目前看到的各類FaaS平臺思想上很像這種,但我覺得做的很不夠。

為什麼我說這是雲時代的軟件架構思想呢,因為Serverless這種思想我覺得只適用於雲時代,要把一堆的基礎技術產品隱藏,並提供豐富的選擇,這個基本只有在雲時代才有可能做到,在以前各自部署業務系統的情況下,這個模式很難去做到規模化。但在雲時代,這就完全有可能了,其實可以認為現在已經在使用一些雲存儲服務、中間件服務、數據庫服務的業務系統或多或少已經進入Serverless時代了,只是由於目前一方面還很難做到高度抽象,另一方面很難做到完全不用管依賴的基礎雲服務,以及雲服務的選擇還是不夠豐富,導致離Serverless的價值實現還有距離。

我非常看好Serverless這樣的思想最終能落地成一個開發框架,並將目前的業務系統演進到Serverless架構,基於這個框架可以很容易的去實現一個基於Serverless架構的業務系統。這將意味著大多數的企業,以後不用自己組建基礎技術的團隊,可以依靠強大的雲廠商的基礎技術團隊(當然,這個框架一定不能是lock-in某家雲廠商的,並且要能非常容易的切換,這個只要框架夠強大,就可以倒逼各雲廠商支持事實標準),所有的研發只需專注在企業的業務邏輯上。從事實情況上看,目前的各類FaaS平臺差距還很大。

Serverless為什麼到現在還沒怎麼流行起來呢,我覺得非常大的原因是:目前,複雜的企業業務系統完全還無法基於一個簡單的FaaS平臺方式來實現,這個觀點和UC Berkley那篇文章裡的The Second Step Back很一致,目前使用Serverless的多數用戶只是把它用於一些非關鍵場景。一個架構級的思想、框架要成為主流,必須是應用到企業業務系統的主流程中,所以怎麼結合Serverless的思想、目標落地到企業業務的核心繫統中,展現價值,並沉澱出Serverless開發框架(就像阿里當年做服務化,沉澱的HSF、Dubbo、SOFA),Serverless才能成為新一代的業務系統的主流架構,我很堅信這一天不會太遠,所以我是強烈推薦各位開發者們從現在開始就應該多學習和試用Serverless,按照這個標準,能看出目前市場上其實完全沒有類似的東西(iron.io在做的open source serverless computing在探索支持request/response這種類似在線業務系統的典型結構方式),架構級的演進機會可不是年年都有,甚至是5年/10年都不一定能碰到一次,所以這也同樣意味著這是個巨大的機會,幾年後再來看看這篇文章,這個市場是誰家的,一定會很有意思。

結合歷史經驗來看,軟件架構的發展很多時候都是在圍繞研發門檻和研發效率(最典型的就是各種基礎技術產品:TensorFlow等等,讓業務研發更聚焦業務邏輯),並推進形成更大規模的社會協作和分工而進行的,所以技術創新能持續圍繞這個本質問題,將一定能推進軟件架構的發展。

亞馬遜CTO 沃納·威格爾:AWS不是技術導向而是客戶導向" https://www.iyiou.com/p/79020.html

"Serverless Computing: One Step Forward, Two Steps Back" https://arxiv.org/pdf/1812.03651.pdf


分享到:


相關文章: