Serverless 对研发效能的变革和创新
作者 |?楊皓然(不瞋)
對企業(yè)而言,Serverless 架構(gòu)有著巨大的應(yīng)用潛力。隨著云產(chǎn)品的完善,產(chǎn)品的集成和被集成能力的加強(qiáng),軟件交付流程自動(dòng)化能力的提高,我們相信在 Serverless 架構(gòu)下,企業(yè)的敏捷性有 10 倍提升的潛力。本次分享我主要分為以下四個(gè)方面:
一、DevOps 的挑戰(zhàn)以及如何降低 DevOps 實(shí)施代價(jià)?
二、為什么 Serverless 是云發(fā)展的必然結(jié)果?
三、Serverless + DevOps =?
四、實(shí)戰(zhàn)案例分享
DevOps 的挑戰(zhàn)
1. DevOps 的挑戰(zhàn)
對于應(yīng)用交付的整個(gè)流程而言,通常會(huì)涉及三個(gè)環(huán)節(jié),即開發(fā)、測試和運(yùn)維,而在傳統(tǒng)的組織架構(gòu)中,他們對應(yīng)的也往往是三個(gè)不同的團(tuán)隊(duì)。這三個(gè)環(huán)節(jié)各自有自己的側(cè)重點(diǎn),但是在實(shí)際上,想要讓整個(gè)應(yīng)用交付過程變得順滑高效,并且讓應(yīng)用在上線后保持高可用的狀態(tài),往往需要三個(gè)團(tuán)隊(duì)將相互之間存在的墻打破掉。
這里的墻不只是組織架構(gòu)隔閡所帶來的障礙,還包括三個(gè)領(lǐng)域關(guān)注點(diǎn)的不同。比如開發(fā)需要關(guān)注可測試性和可運(yùn)維性,這些東西將會(huì)深刻地影響應(yīng)用的架構(gòu)設(shè)計(jì)和開發(fā)實(shí)現(xiàn),如果開發(fā)同學(xué)沒有充分考慮到代碼的可測試性,那么交給測試同學(xué)就會(huì)造成很大的問題,比如如何實(shí)現(xiàn)故障注入和精細(xì)流控,這都需要在開發(fā)時(shí)就考慮清楚。
對于運(yùn)維而言也是一樣的,開發(fā)的時(shí)候也需要考慮到可運(yùn)維性,比如在開發(fā)的時(shí)候就需要考慮如何在服務(wù)實(shí)際上下線的時(shí)候做到平滑且不丟失數(shù)據(jù),同時(shí)這樣的設(shè)計(jì)也需要和運(yùn)維系統(tǒng)進(jìn)行深刻的對接,這樣才能非常可靠、非常安全地連接起來,提升運(yùn)維的效率。
阿里內(nèi)部之前很多故障也都是因?yàn)殚_發(fā)和運(yùn)維之間在設(shè)計(jì)上面存在信息不一致導(dǎo)致的,比如在開發(fā)設(shè)計(jì)時(shí)會(huì)做三副本的高可靠保證,但是在運(yùn)維側(cè)則可能會(huì)認(rèn)為副本所在的機(jī)器沒有提供服務(wù)因此被錯(cuò)誤下線掉。
所以,DevOps 實(shí)際上包含了兩層含義,首先是將開發(fā)、測試、運(yùn)維變成一個(gè)團(tuán)隊(duì);其次,還需要讓整個(gè)團(tuán)隊(duì)的心智統(tǒng)一,這也是 DevOps 真正的挑戰(zhàn)。
2. DevOps 的挑戰(zhàn) - 開發(fā)
快速回顧一下 DevOps 每個(gè)環(huán)節(jié)所需要考慮的東西。在開發(fā)階段,首先需要梳理業(yè)務(wù)的需求和場景,并且將需求轉(zhuǎn)換為系統(tǒng)設(shè)計(jì),同時(shí)需要考慮數(shù)據(jù)模型如何設(shè)計(jì),才能夠讓數(shù)據(jù)庫不成為單點(diǎn)和瓶頸。因?yàn)樵诎⒗锇桶瓦@樣的互聯(lián)網(wǎng)企業(yè)中,應(yīng)用承載了大量的用戶訪問,因此需要考慮復(fù)雜均衡、容錯(cuò)設(shè)計(jì)、流量控制等。
如果采用了微服務(wù)架構(gòu),應(yīng)用將由多個(gè)服務(wù)組成,那么還需要考慮服務(wù)管理。以上全部考慮到之后,將其轉(zhuǎn)化為系統(tǒng)設(shè)計(jì),最后進(jìn)行開發(fā)調(diào)試以及單元測試,完成了這些之后才可以將應(yīng)用交給測試環(huán)節(jié)。
3. DevOps 的挑戰(zhàn) - 測試
在測試時(shí)需要考慮很多方面和維度,保證軟件各方面的質(zhì)量。測試包括了集成測試、端到端的 E2E 測試、性能測試、壓力測試、容錯(cuò)測試、兼容測試、破壞測試等。
4. DevOps 的挑戰(zhàn) - 運(yùn)維
當(dāng)應(yīng)用通過測試之后,就產(chǎn)出了一個(gè)交付物,這個(gè)交付物被認(rèn)為具備了可以發(fā)布的能力,后續(xù)就需要進(jìn)行運(yùn)維工作了,比如應(yīng)用灰度發(fā)布、升級回滾、服務(wù)器上下線、監(jiān)控報(bào)警、安全補(bǔ)丁升級、網(wǎng)路配置、操作審計(jì)、生產(chǎn)環(huán)境引流等。
5. DevOps 的挑戰(zhàn) - 如何降低 DevOps 實(shí)施代價(jià)?
當(dāng)我們深入地看 DevOps 中所包含的這些工作項(xiàng)之后,其實(shí)能夠感受到如果想要做一個(gè)具有彈性的、高可靠的應(yīng)用,需要考慮的點(diǎn)是非常多的,而這些在實(shí)施了 DevOps 之后就變成了同一個(gè)團(tuán)隊(duì)在整個(gè)應(yīng)用生命周期中需要考慮的事情了。這對于團(tuán)隊(duì)心智和能力的要求是非常高的。
DevOps 應(yīng)用交付流水線里面包含了很多環(huán)節(jié),如何將這些環(huán)節(jié)非常流暢地串聯(lián)起來,實(shí)現(xiàn)自動(dòng)化也是非常重要的方面。
回顧了 DevOps 的挑戰(zhàn)之后,通過阿里內(nèi)部和整個(gè)業(yè)界的實(shí)踐可以看到,需要通過平臺(tái)和工具降低 DevOps 的復(fù)雜度。
Serverless 簡介
1. 云的趨勢
在介紹 Serverless 之前,首先回顧一下云的發(fā)展趨勢,再來探討為什么 Serverless 是云發(fā)展的必然結(jié)果。
在過去的十年間,云計(jì)算獲得了很大的發(fā)展,其使得用戶能夠通過 API 的方式非常輕松地獲得近乎無限的算力,而這些算力是通過虛擬機(jī)來呈現(xiàn)的,這樣的模式存在很多的優(yōu)點(diǎn),它和應(yīng)用原來的開發(fā)和運(yùn)行環(huán)境是兼容的,這種模式能夠使得傳統(tǒng)遺留應(yīng)用非常平滑地遷移到云上。
云的第一個(gè)階段就是基礎(chǔ)設(shè)施云化,這里就是云托管模式。基于云上的存儲(chǔ)、網(wǎng)絡(luò)等基礎(chǔ)設(shè)施來構(gòu)建應(yīng)用,這種模式的核心價(jià)值在于資源的彈性和成本。下一個(gè)階段中,云的體系已經(jīng)遠(yuǎn)遠(yuǎn)超越了基礎(chǔ)設(shè)施,能夠看到在各個(gè)領(lǐng)域都出現(xiàn)了很多的云服務(wù)。因此,在今天需要考慮如何利用云服務(wù)的能力,以搭積木的方式來更快速地構(gòu)建應(yīng)用,而不是重復(fù)造輪子,這就是云原生的模式。
2. 云的產(chǎn)品體系正在迅速 Serverless 化
目前,主流的云計(jì)算產(chǎn)商的產(chǎn)品體系也正在迅速地 Serverless 化,這并非是對于未來的預(yù)測,而是實(shí)際正在發(fā)生的事實(shí)。下圖中的數(shù)據(jù)是基于對于 AWS、微軟和阿里云的產(chǎn)品所發(fā)布的新功能或者新服務(wù)形式的統(tǒng)計(jì),可以看到絕大多數(shù)的新服務(wù)都在呈現(xiàn) Serverless 化。
3. 云編程模型
云計(jì)算產(chǎn)生了大量的服務(wù),在效能的角度來看,這些云服務(wù)是在更高層次抽象的 Serverless 形態(tài),這就變得非常有意義了。如果從云編程模型的角度重新來審視云產(chǎn)品體系,能夠看到最底層是基礎(chǔ)設(shè)施層,這一層包含兩部分,分別是 IaaS 和容器。在基礎(chǔ)設(shè)施之上就是云原生應(yīng)用操作系統(tǒng),K8s 是這一層的事實(shí)標(biāo)準(zhǔn),它能夠把底層 IaaS 基礎(chǔ)設(shè)施很好地管理起來。在操作系統(tǒng)之上出現(xiàn)了非常豐富的 API,也就是全托管的云服務(wù)體系。如果看阿里云的產(chǎn)品體系,就會(huì)發(fā)現(xiàn)了阿里云提供了豐富的產(chǎn)品體系,包括數(shù)據(jù)庫、大數(shù)據(jù)、中間件,這些都是以 Serverless 全托管模式提供服務(wù)的。
在這樣具有大量云 API 的情況下,今天的問題是如何設(shè)計(jì)一個(gè)通用的計(jì)算框架能夠與這些 Serverless 的云服務(wù)、云 API 產(chǎn)生非常緊密的連接來幫助客戶快速構(gòu)建彈性、高可用應(yīng)用。因此在框架層就出現(xiàn)了 Serverless 計(jì)算,其產(chǎn)生的原因最主要是需要和云 API 發(fā)生緊密的化學(xué)反應(yīng),幫助用戶提升應(yīng)用構(gòu)建和運(yùn)維效率,幫助客戶構(gòu)建分布式、數(shù)據(jù)化、智能化的新一代的云原生應(yīng)用。
4. 云托管和 Serverless 應(yīng)用差異
這里對比一下采用云托管的應(yīng)用和采用 Serverless 的應(yīng)用最本質(zhì)的差異在哪里。對于應(yīng)用而言,可以將其構(gòu)建模式拆分為三層,分別是底層基礎(chǔ)設(shè)施管理、中間的外部服務(wù)集成和上層的應(yīng)用邏輯。如果采用云托管模式,實(shí)際上是在基礎(chǔ)設(shè)施層去構(gòu)建應(yīng)用,應(yīng)用構(gòu)建的抽象層次是比較低的,因此會(huì)帶來大量工作,用戶自己需要整合不同的組件和服務(wù),需要進(jìn)行大量的決策和實(shí)現(xiàn),交付的速度會(huì)比較慢,需要考慮很多的事情,而且在運(yùn)維方面有大量的重復(fù)工作。
如果用戶采用 Serverless 的模式構(gòu)建應(yīng)用,也就是相當(dāng)于在上層 API 的方式構(gòu)建應(yīng)用,粘合的邏輯和基礎(chǔ)設(shè)施管理的工作都由云服務(wù)商來承擔(dān),用戶所需要整合和決策的代價(jià)比較低,所需要考慮的主要就是如何將業(yè)務(wù)邏輯和需求與云服務(wù)進(jìn)行適配來構(gòu)建應(yīng)用。基于非常高效的云 API 來構(gòu)建應(yīng)用的好處在于構(gòu)建的成本很低,并且能夠?qū)崿F(xiàn)按天、按小時(shí)進(jìn)行交付,并且大大降低未來運(yùn)維的負(fù)擔(dān)。
5. 什么是 Serverless 計(jì)算?
Serverless 計(jì)算具有四個(gè)特點(diǎn):首先,不需要維護(hù)云計(jì)算基礎(chǔ)設(shè)施,應(yīng)用構(gòu)建的抽象層次上升,變得更加高效;其次,能夠?qū)崿F(xiàn)實(shí)時(shí)的彈性伸縮,這樣能夠通過未來的數(shù)據(jù)驅(qū)動(dòng)的負(fù)載感知算法能夠?qū)崿F(xiàn)既滿足很低的延時(shí),也能夠?qū)崿F(xiàn)很高的資源利用率;再次,計(jì)量模式提供了非常細(xì)粒度的按需的模式,可以實(shí)現(xiàn)按秒級計(jì)量,能夠?qū)崿F(xiàn)完全按需的付費(fèi)模式,對于用戶而言,資源利用率是 100%;最后,能夠?qū)崿F(xiàn)高可用,將這種能力內(nèi)置在平臺(tái)層。
6. 阿里云 Serverless 產(chǎn)品體系
這里做一個(gè)說明,Serverless 計(jì)算只是阿里云 Serverless 產(chǎn)品中的一部分,除此之外還包括存儲(chǔ)、API、分析、中間件等。因此,從這個(gè)角度來看,Serverless 也不是一個(gè)非常新的概念,最早的 OSS 對象存儲(chǔ)就是一個(gè) Serverless 產(chǎn)品,可以看出云產(chǎn)品體系正在 Serverless 化,只不過最近幾年出現(xiàn)了函數(shù)計(jì)算這樣通用的 Serverless 計(jì)算平臺(tái),進(jìn)而能夠?qū)?Serverless 體系產(chǎn)品連接起來,構(gòu)建一個(gè) Serverless 應(yīng)用。
Serverless DevOps
當(dāng)有了這些 Serverless 的能力,那么如何將這些能力與 DevOps 結(jié)合起來呢?
1. 簡化基礎(chǔ)設(shè)施的管理和運(yùn)維
下圖更多地是從如何構(gòu)建高可用應(yīng)用的角度來展現(xiàn)。這里將應(yīng)用的模塊分為四個(gè)方面:包括基礎(chǔ)設(shè)施、運(yùn)行時(shí)、數(shù)據(jù)和應(yīng)用。基礎(chǔ)設(shè)施層就是需要處理與機(jī)器相關(guān)的操作,比如故障處理。運(yùn)行時(shí)則需要做應(yīng)用資源隔離、流控等。數(shù)據(jù)層主要需要和數(shù)據(jù)庫、緩存相關(guān),比如如何設(shè)計(jì)數(shù)據(jù)庫表結(jié)構(gòu),如何設(shè)計(jì)緩存策略,如何實(shí)現(xiàn)負(fù)載均衡,如何保證不會(huì)出現(xiàn)橫向擴(kuò)展瓶頸。
在應(yīng)用層,則需要處理與應(yīng)用相關(guān)的操作,比如代碼包的錯(cuò)誤、配置錯(cuò)誤、心跳異常的處理。下圖中藍(lán)色虛框中的部分可以完全由平臺(tái)負(fù)責(zé),用戶可以無感知;藍(lán)色實(shí)框則是平臺(tái)幫助用戶做了大量工作,但是還是需要用戶感知和作出一定決策;紅色框則代表還是需要用戶自己管理的部分。可以看到,在容錯(cuò)方面,平臺(tái)提供了非常強(qiáng)的能力,包括多 AZ 的容災(zāi)能力、快速的彈性能力、內(nèi)置的流控能力以及多層次、多維度的監(jiān)控報(bào)警能力。借助于這些能力,用戶管理基礎(chǔ)設(shè)施的復(fù)雜度就大大降低了。
2. 敏捷的應(yīng)用角度流程
下圖展示了應(yīng)用交付的流程,代碼通過統(tǒng)一管理的代碼庫存儲(chǔ)和管理起來,再通過持續(xù)集成將其變成一個(gè)交付物,再將其存儲(chǔ)到交付物倉庫里面。交付物可以是容器鏡像,也可以是代碼包的模式。產(chǎn)出了交付物之后,可以自動(dòng)地將其部署到測試、生產(chǎn)環(huán)境中去做版本部署,最后實(shí)現(xiàn)到生產(chǎn)環(huán)境的自動(dòng)部署。因此這樣應(yīng)用交付流程的關(guān)鍵點(diǎn)在于實(shí)現(xiàn)高度自動(dòng)化,而自動(dòng)化的關(guān)鍵環(huán)節(jié)有兩點(diǎn):分別是基礎(chǔ)設(shè)施即代碼和環(huán)節(jié)間的自動(dòng)化串聯(lián)。
3. 自動(dòng)化應(yīng)用交付流水線
下圖展現(xiàn)的是自動(dòng)化應(yīng)用交付流水線,可以看到在下面的每一個(gè)環(huán)節(jié)都需要實(shí)現(xiàn)很多的功能,而很多都是重復(fù)性工作,因此需要做到基礎(chǔ)設(shè)施即代碼。
4. 基礎(chǔ)設(shè)施即代碼
下圖是基礎(chǔ)設(shè)施即代碼的展示。Serverless 應(yīng)用模型通過聲明來定義應(yīng)用資源,能夠?qū)崿F(xiàn)標(biāo)準(zhǔn)化、自動(dòng)化和可視化。
可以為模板傳入不同參數(shù),可以動(dòng)態(tài)生成應(yīng)用運(yùn)行環(huán)境。
5. 服務(wù)版本和灰度發(fā)布
在函數(shù)計(jì)算里面,應(yīng)用有版本的概念,版本是一個(gè)不可變實(shí)體,因此杜絕了版本因?yàn)榉穷A(yù)期的修改造成線上應(yīng)用受損,阿里云通過服務(wù)版本和灰度發(fā)布避免了這樣的問題,客戶端訪問應(yīng)用通過別名來訪問。
6. Serverless 工作流
阿里云提供了 Serverless 工作流方便用戶將 DevOps 串聯(lián)起來,用戶可以通過配套的服務(wù)能力、工具能力快速地創(chuàng)建工作流,并且以可視化的方式展現(xiàn)出來,能夠清楚地看到工作流的效果。
7. 自動(dòng)化應(yīng)用交付流水線
回顧一下當(dāng)有了這些能力之后,如何實(shí)現(xiàn)自動(dòng)化應(yīng)用交付流水線。在源碼階段,可以實(shí)現(xiàn)代碼質(zhì)量靜態(tài)檢查,保證 CheckIn 的代碼質(zhì)量。當(dāng) CheckIn 到代碼庫之后,會(huì)自動(dòng)運(yùn)行單元測試,并且產(chǎn)出交付物。在測試的環(huán)節(jié),通過與阿里云 ROS 的無縫集成能夠?qū)崿F(xiàn)自動(dòng)化部署到測試環(huán)境,并且運(yùn)行測試用例。這些完成之后,通過 ReleaseManager 可以確認(rèn)部署,通過工作流將這些任務(wù)串聯(lián)起來,發(fā)布到預(yù)發(fā)布環(huán)境中,并且進(jìn)一步部署到生產(chǎn)環(huán)境中,每一個(gè)步驟都實(shí)現(xiàn)了自動(dòng)化,研發(fā)效能得到了極大提升。
8. 日志收集和查詢
在 Serverless 計(jì)算平臺(tái)之上,原生提供了很多的日志收集和 Metric 收集能力,比如簡單日志查詢以及高級日志查詢,能夠通過日志方式為用戶提供高級數(shù)據(jù)分析能力。
9. 指標(biāo)收集和可視化能力
Serverless 計(jì)算平臺(tái)除了提供了基本的指標(biāo)視圖之外,還支持自定義指標(biāo)視圖,用戶可以通過自定義的關(guān)鍵詞指標(biāo)搜索實(shí)現(xiàn)與業(yè)務(wù)相關(guān)的數(shù)據(jù)分析。
當(dāng) Serverless 和 DevOps 結(jié)合之后,能夠大大提升研發(fā)效能,一方面大大降低了開發(fā)團(tuán)隊(duì)的心智負(fù)擔(dān);另外一方面,通過工具使得整個(gè) DevOps 流水線能夠?qū)崿F(xiàn)高度自動(dòng)化。
案例分享
最后分享一些比較成功的案例。阿里 Serverless 計(jì)算支撐了阿里經(jīng)濟(jì)體小程序平臺(tái),節(jié)省了 40% 研發(fā)資源。阿里云 Serverless 支撐語雀使用函數(shù)計(jì)算實(shí)現(xiàn)文檔等計(jì)算密集型業(yè)務(wù),大幅度地降低了運(yùn)維成本,還為石墨文檔降低了 58% 的運(yùn)維成本,幫助微博提升了研發(fā)效能,使得功能上線時(shí)間從原本的 2 周變?yōu)閹仔r(shí)。
可以看到,2020 年業(yè)界對于 Serverless 的接受度有了極大提升,同時(shí),Serverless 的能力也變得更加普適。
**作者介紹:**楊皓然(不瞋),Serverless 計(jì)算負(fù)責(zé)人,2010 年加入阿里云,深度參與了阿里云飛天分布式系統(tǒng)研發(fā)和產(chǎn)品迭代的全過程。對大規(guī)模分布式計(jì)算,大規(guī)模數(shù)據(jù)存儲(chǔ)和處理有非常深入的理解。
課程推薦
為了更多開發(fā)者能夠享受到 Serverless 帶來的紅利,這一次,我們集結(jié)了 10+ 位阿里巴巴 Serverless 領(lǐng)域技術(shù)專家,打造出最適合開發(fā)者入門的 Serverless 公開課,讓你即學(xué)即用,輕松擁抱云計(jì)算的新范式——Serverless。點(diǎn)擊鏈接即可免費(fèi)學(xué)習(xí)課程:https://developer.aliyun.com/learning/roadmap/serverless
Serverless 公眾號,發(fā)布 Serverless 技術(shù)最新資訊,匯集 Serverless 技術(shù)最全內(nèi)容,關(guān)注 Serverless 趨勢,更關(guān)注你落地實(shí)踐中的遇到的困惑和問題。
總結(jié)
以上是生活随笔為你收集整理的Serverless 对研发效能的变革和创新的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云原生时代,应用架构将如何演进?
- 下一篇: Serverless X OpenKru