天天看點

Serverless 對研發效能的變革和創新

Serverless 對研發效能的變革和創新

作者 | 楊皓然(不瞋)

對企業而言,Serverless 架構有着巨大的應用潛力。随着雲産品的完善,産品的內建和被內建能力的加強,軟體傳遞流程自動化能力的提高,我們相信在 Serverless 架構下,企業的靈活性有 10 倍提升的潛力。本次分享我主要分為以下四個方面:

一、DevOps 的挑戰以及如何降低 DevOps 實施代價?

二、為什麼 Serverless 是雲發展的必然結果?

三、Serverless + DevOps =?

四、實戰案例分享

DevOps 的挑戰

1. DevOps 的挑戰

對于應用傳遞的整個流程而言,通常會涉及三個環節,即開發、測試和運維,而在傳統的組織架構中,他們對應的也往往是三個不同的團隊。這三個環節各自有自己的側重點,但是在實際上,想要讓整個應用傳遞過程變得順滑高效,并且讓應用在上線後保持高可用的狀态,往往需要三個團隊将互相之間存在的牆打破掉。

這裡的牆不隻是組織架構隔閡所帶來的障礙,還包括三個領域關注點的不同。比如開發需要關注可測試性和可運維性,這些東西将會深刻地影響應用的架構設計和開發實作,如果開發同學沒有充分考慮到代碼的可測試性,那麼交給測試同學就會造成很大的問題,比如如何實作故障注入和精細流控,這都需要在開發時就考慮清楚。

對于運維而言也是一樣的,開發的時候也需要考慮到可運維性,比如在開發的時候就需要考慮如何在服務實際上下線的時候做到平滑且不丢失資料,同時這樣的設計也需要和運維系統進行深刻的對接,這樣才能非常可靠、非常安全地連接配接起來,提升運維的效率。

阿裡内部之前很多故障也都是因為開發和運維之間在設計上面存在資訊不一緻導緻的,比如在開發設計時會做三副本的高可靠保證,但是在運維側則可能會認為副本所在的機器沒有提供服務是以被錯誤下線掉。

是以,DevOps 實際上包含了兩層含義,首先是将開發、測試、運維變成一個團隊;其次,還需要讓整個團隊的心智統一,這也是 DevOps 真正的挑戰。

Serverless 對研發效能的變革和創新

2. DevOps 的挑戰 - 開發

快速回顧一下 DevOps 每個環節所需要考慮的東西。在開發階段,首先需要梳理業務的需求和場景,并且将需求轉換為系統設計,同時需要考慮資料模型如何設計,才能夠讓資料庫不成為單點和瓶頸。因為在阿裡巴巴這樣的網際網路企業中,應用承載了大量的使用者通路,是以需要考慮複雜均衡、容錯設計、流量控制等。

如果采用了微服務架構,應用将由多個服務組成,那麼還需要考慮服務管理。以上全部考慮到之後,将其轉化為系統設計,最後進行開發調試以及單元測試,完成了這些之後才可以将應用交給測試環節。

Serverless 對研發效能的變革和創新

3. DevOps 的挑戰 - 測試

在測試時需要考慮很多方面和次元,保證軟體各方面的品質。測試包括了內建測試、端到端的 E2E 測試、性能測試、壓力測試、容錯測試、相容測試、破壞測試等。

Serverless 對研發效能的變革和創新

4. DevOps 的挑戰 - 運維

當應用通過測試之後,就産出了一個傳遞物,這個傳遞物被認為具備了可以釋出的能力,後續就需要進行運維工作了,比如應用灰階釋出、更新復原、伺服器上下線、監控報警、安全更新檔更新、網路配置、操作審計、生産環境引流等。

Serverless 對研發效能的變革和創新

5. DevOps 的挑戰 - 如何降低 DevOps 實施代價?

當我們深入地看 DevOps 中所包含的這些工作項之後,其實能夠感受到如果想要做一個具有彈性的、高可靠的應用,需要考慮的點是非常多的,而這些在實施了 DevOps 之後就變成了同一個團隊在整個應用生命周期中需要考慮的事情了。這對于團隊心智和能力的要求是非常高的。

DevOps 應用傳遞流水線裡面包含了很多環節,如何将這些環節非常流暢地串聯起來,實作自動化也是非常重要的方面。

Serverless 對研發效能的變革和創新

回顧了 DevOps 的挑戰之後,通過阿裡内部和整個業界的實踐可以看到,需要通過平台和工具降低 DevOps 的複雜度。

Serverless 對研發效能的變革和創新

Serverless 簡介

1. 雲的趨勢

在介紹 Serverless 之前,首先回顧一下雲的發展趨勢,再來探讨為什麼 Serverless 是雲發展的必然結果。

在過去的十年間,雲計算獲得了很大的發展,其使得使用者能夠通過 API 的方式非常輕松地獲得近乎無限的算力,而這些算力是通過虛拟機來呈現的,這樣的模式存在很多的優點,它和應用原來的開發和運作環境是相容的,這種模式能夠使得傳統遺留應用非常平滑地遷移到雲上。

雲的第一個階段就是基礎設施雲化,這裡就是雲托管模式。基于雲上的存儲、網絡等基礎設施來建構應用,這種模式的核心價值在于資源的彈性和成本。下一個階段中,雲的體系已經遠遠超越了基礎設施,能夠看到在各個領域都出現了很多的雲服務。是以,在今天需要考慮如何利用雲服務的能力,以搭積木的方式來更快速地建構應用,而不是重複造輪子,這就是雲原生的模式。

Serverless 對研發效能的變革和創新

2. 雲的産品體系正在迅速 Serverless 化

目前,主流的雲計算産商的産品體系也正在迅速地 Serverless 化,這并非是對于未來的預測,而是實際正在發生的事實。下圖中的資料是基于對于 AWS、微軟和阿裡雲的産品所釋出的新功能或者新服務形式的統計,可以看到絕大多數的新服務都在呈現 Serverless 化。

Serverless 對研發效能的變革和創新

3. 雲程式設計模型

雲計算産生了大量的服務,在效能的角度來看,這些雲服務是在更高層次抽象的 Serverless 形态,這就變得非常有意義了。如果從雲程式設計模型的角度重新來審視雲産品體系,能夠看到最底層是基礎設施層,這一層包含兩部分,分别是 IaaS 和容器。在基礎設施之上就是雲原生應用作業系統,K8s 是這一層的事實标準,它能夠把底層 IaaS 基礎設施很好地管理起來。在作業系統之上出現了非常豐富的 API,也就是全托管的雲服務體系。如果看阿裡雲的産品體系,就會發現了阿裡雲提供了豐富的産品體系,包括資料庫、大資料、中間件,這些都是以 Serverless 全托管模式提供服務的。

在這樣具有大量雲 API 的情況下,今天的問題是如何設計一個通用的計算架構能夠與這些 Serverless 的雲服務、雲 API 産生非常緊密的連接配接來幫助客戶快速建構彈性、高可用應用。是以在架構層就出現了 Serverless 計算,其産生的原因最主要是需要和雲 API 發生緊密的化學反應,幫助使用者提升應用建構和運維效率,幫助客戶建構分布式、資料化、智能化的新一代的雲原生應用。

Serverless 對研發效能的變革和創新

4. 雲托管和 Serverless 應用差異

這裡對比一下采用雲托管的應用和采用 Serverless 的應用最本質的差異在哪裡。對于應用而言,可以将其構模組化式拆分為三層,分别是底層基礎設施管理、中間的外部服務內建和上層的應用邏輯。如果采用雲托管模式,實際上是在基礎設施層去建構應用,應用建構的抽象層次是比較低的,是以會帶來大量工作,使用者自己需要整合不同的元件和服務,需要進行大量的決策和實作,傳遞的速度會比較慢,需要考慮很多的事情,而且在運維方面有大量的重複工作。

如果使用者采用 Serverless 的模式建構應用,也就是相當于在上層 API 的方式建構應用,粘合的邏輯和基礎設施管理的工作都由雲服務商來承擔,使用者所需要整合和決策的代價比較低,所需要考慮的主要就是如何将業務邏輯和需求與雲服務進行适配來建構應用。基于非常高效的雲 API 來建構應用的好處在于建構的成本很低,并且能夠實作按天、按小時進行傳遞,并且大大降低未來運維的負擔。

Serverless 對研發效能的變革和創新

5. 什麼是 Serverless 計算?

Serverless 計算具有四個特點:首先,不需要維護雲計算基礎設施,應用建構的抽象層次上升,變得更加高效;其次,能夠實作實時的彈性伸縮,這樣能夠通過未來的資料驅動的負載感覺算法能夠實作既滿足很低的延時,也能夠實作很高的資源使用率;再次,計量模式提供了非常細粒度的按需的模式,可以實作按秒級計量,能夠實作完全按需的付費模式,對于使用者而言,資源使用率是 100%;最後,能夠實作高可用,将這種能力内置在平台層。

Serverless 對研發效能的變革和創新

6. 阿裡雲 Serverless 産品體系

這裡做一個說明,Serverless 計算隻是阿裡雲 Serverless 産品中的一部分,除此之外還包括存儲、API、分析、中間件等。是以,從這個角度來看,Serverless 也不是一個非常新的概念,最早的 OSS 對象存儲就是一個 Serverless 産品,可以看出雲産品體系正在 Serverless 化,隻不過最近幾年出現了函數計算這樣通用的 Serverless 計算平台,進而能夠将 Serverless 體系産品連接配接起來,建構一個 Serverless 應用。

Serverless 對研發效能的變革和創新

Serverless DevOps

當有了這些 Serverless 的能力,那麼如何将這些能力與 DevOps 結合起來呢?

1. 簡化基礎設施的管理和運維

下圖更多地是從如何建構高可用應用的角度來展現。這裡将應用的子產品分為四個方面:包括基礎設施、運作時、資料和應用。基礎設施層就是需要處理與機器相關的操作,比如故障處理。運作時則需要做應用資源隔離、流控等。資料層主要需要和資料庫、緩存相關,比如如何設計資料庫表結構,如何設計緩存政策,如何實作負載均衡,如何保證不會出現橫向擴充瓶頸。

在應用層,則需要處理與應用相關的操作,比如代碼包的錯誤、配置錯誤、心跳異常的處理。下圖中藍色虛框中的部分可以完全由平台負責,使用者可以無感覺;藍色實框則是平台幫助使用者做了大量工作,但是還是需要使用者感覺和作出一定決策;紅色框則代表還是需要使用者自己管理的部分。可以看到,在容錯方面,平台提供了非常強的能力,包括多 AZ 的容災能力、快速的彈性能力、内置的流控能力以及多層次、多元度的監控報警能力。借助于這些能力,使用者管理基礎設施的複雜度就大大降低了。

Serverless 對研發效能的變革和創新

2. 靈活的應用角度流程

下圖展示了應用傳遞的流程,代碼通過統一管理的代碼庫存儲和管理起來,再通過持續內建将其變成一個傳遞物,再将其存儲到傳遞物倉庫裡面。傳遞物可以是容器鏡像,也可以是代碼包的模式。産出了傳遞物之後,可以自動地将其部署到測試、生産環境中去做版本部署,最後實作到生産環境的自動部署。是以這樣應用傳遞流程的關鍵點在于實作高度自動化,而自動化的關鍵環節有兩點:分别是基礎設施即代碼和環節間的自動化串聯。

Serverless 對研發效能的變革和創新

3. 自動化應用傳遞流水線

下圖展現的是自動化應用傳遞流水線,可以看到在下面的每一個環節都需要實作很多的功能,而很多都是重複性工作,是以需要做到基礎設施即代碼。

Serverless 對研發效能的變革和創新

4. 基礎設施即代碼

下圖是基礎設施即代碼的展示。Serverless 應用模型通過聲明來定義應用資源,能夠實作标準化、自動化和可視化。

Serverless 對研發效能的變革和創新

可以為模闆傳入不同參數,可以動态生成應用運作環境。

Serverless 對研發效能的變革和創新

5. 服務版本和灰階釋出

在函數計算裡面,應用有版本的概念,版本是一個不可變實體,是以杜絕了版本因為非預期的修改造成線上應用受損,阿裡雲通過服務版本和灰階釋出避免了這樣的問題,用戶端通路應用通過别名來通路。

Serverless 對研發效能的變革和創新

6. Serverless 工作流

阿裡雲提供了 Serverless 工作流友善使用者将 DevOps 串聯起來,使用者可以通過配套的服務能力、工具能力快速地建立工作流,并且以可視化的方式展現出來,能夠清楚地看到工作流的效果。

Serverless 對研發效能的變革和創新

7. 自動化應用傳遞流水線

回顧一下當有了這些能力之後,如何實作自動化應用傳遞流水線。在源碼階段,可以實作代碼品質靜态檢查,保證 CheckIn 的代碼品質。當 CheckIn 到代碼庫之後,會自動運作單元測試,并且産出傳遞物。在測試的環節,通過與阿裡雲 ROS 的無縫內建能夠實作自動化部署到測試環境,并且運作測試用例。這些完成之後,通過 ReleaseManager 可以确認部署,通過工作流将這些任務串聯起來,釋出到預釋出環境中,并且進一步部署到生産環境中,每一個步驟都實作了自動化,研發效能得到了極大提升。

Serverless 對研發效能的變革和創新

8. 日志收集和查詢

在 Serverless 計算平台之上,原生提供了很多的日志收集和 Metric 收集能力,比如簡單日志查詢以及進階日志查詢,能夠通過日志方式為使用者提供進階資料分析能力。

Serverless 對研發效能的變革和創新

9. 名額收集和可視化能力

Serverless 計算平台除了提供了基本的名額視圖之外,還支援自定義名額視圖,使用者可以通過自定義的關鍵詞名額搜尋實作與業務相關的資料分析。

Serverless 對研發效能的變革和創新

當 Serverless 和 DevOps 結合之後,能夠大大提升研發效能,一方面大大降低了開發團隊的心智負擔;另外一方面,通過工具使得整個 DevOps 流水線能夠實作高度自動化。

案例分享

最後分享一些比較成功的案例。阿裡 Serverless 計算支撐了阿裡經濟體小程式平台,節省了 40% 研發資源。阿裡雲 Serverless 支撐語雀使用函數計算實作文檔等計算密集型業務,大幅度地降低了運維成本,還為石墨文檔降低了 58% 的運維成本,幫助微網誌提升了研發效能,使得功能上線時間從原本的 2 周變為幾小時。

可以看到,2020 年業界對于 Serverless 的接受度有了極大提升,同時,Serverless 的能力也變得更加普适。

作者介紹:楊皓然(不瞋),Serverless 計算負責人,2010 年加入阿裡雲,深度參與了阿裡雲飛天分布式系統研發和産品疊代的全過程。對大規模分布式計算,大規模資料存儲和處理有非常深入的了解。

最适合中國 Serverless 開發者的線下沙龍首次亮相北京

本次線下活動将邀請來自阿裡雲、淘寶、閑魚、百富旅行等國内一線 Serverless 技術專家,為開發者帶來:

  • 淘寶/天貓應對 雙11 流量洪峰如何規模化實踐 Serverless。
  • 切中開發者痛點,講述閑魚、百富旅行等中國企業的 Serverless 落地及“踩坑”經驗。
  • 首次披露阿裡雲最新開源工具鍊 Serverless Devs 設計詳情及未來走向。

現場将有好玩的 Serverless 實驗室首次開放,點選連結立刻報名:

https://www.huodongxing.com/event/9570184556300

,和技術大咖一起 Serverless,讓創新變得更簡單。

Serverless 公衆号 ,釋出 Serverless 技術最新資訊,彙集 Serverless 技術最全内容,關注 Serverless 趨勢,更關注你落地實踐中的遇到的困惑和問題。