從單體邁向 Serverless 的避坑指南

2022-06-25 11:57:08 字數 4707 閱讀 4114

作者 | 不瞋

企業進行數位化轉型,從生產資料、生產關係、戰略規劃、增長曲線四個層面來看:

從雲服務商的角度來看雲的演進趨勢,在 cloud 1.0 時代,基礎設施的雲化是其主題,採用雲託管模式,雲上雲下的應用保持相容,傳統的應用可以直接遷移到雲上,這種方式的核心價值在於資源的彈性和成本的低廉;在基礎設施提供了海量算力之後,怎麼幫助使用者更好地利用算力,加速企業創新的速度,就成為雲的核心能力。

如果仍在伺服器上構建基礎應用,那麼研發成本就會很高,管理難度也很大,因此有了 cloud 2.0,也就是雲原生時代。在雲原生時代,雲服務商提供了豐富的託管服務,助力企業數位化轉型和創新,使用者可以像搭積木一樣基於各種雲服務來構建應用,大大降低了研發成本。

雲原生應用有三個非常關鍵的要素:微服務架構,應用容器化和 serverless 化,敏捷的軟體交付流程。

單體架構和微服務架構各有各的特點,其主要特點對比如下圖所示。總的來說,單體架構上手快,但是維護難,微服務架構部署較難,但是獨立性和敏捷性更好,更適合雲原生應用。

▲ 單體架構 vs 微服務架構

容器是當前最流行的**封裝方式,借助 k8s 及其生態的能力,大大降低了整個基礎設施的管理難度,而且容器在程式的支撐性方面提供非常出色的靈活性和可移植性,越來越多的使用者開始使用容器來封裝整個應用。 serverless 計算是另外一種形態,做了大量的端到端整合和雲服務的整合,大大提高了研發效率,但是對傳統應用的相容性沒有容器那麼靈活,但是也帶來了很大的整潔性,使用者只需要專注於業務邏輯的編碼,聚焦於業務邏輯的創新即可。

敏捷的應用交付流程是非常重要的乙個要素,主要包括流程自動化,專注於功能開發,快速發現問題,快速發布上線。

serverless 是乙個新的概念,但是其內涵早就已經存在。阿里雲或者 aws 的第乙個雲服務都是物件儲存,物件儲存實際上就是乙個儲存領域的 serverless 服務;另外,serverless 指的是乙個產品體系,而不是單個產品。當前業界雲服務商推出的新功能或者新產品絕大多數都是 serverless 形態的。阿里雲 serverless 產品體系包括計算、儲存、api、分析和中介軟體等,目前雲的產品體系正在 serverless 化。

阿里雲 serverless 計算平台函式計算,有 4 個特點:

那麼,阿里雲函式計算是如何做到以上 4 點呢?阿里雲函式計算的產品能力大圖如下圖所示,首先函式計算產品是建立在阿里巴巴的基礎設施服務之上的產品,對在其之上的計算層進行了大量優化。接著在應用層開發了大量能力和工具,基於以上產品能力,為使用者提供多種場景下完整的解決方案,才有了整個優秀的函式計算產品。函式計算是阿里雲的乙個非常基礎的雲產品,阿里雲的許多產品和功能均是建立在函式計算的基礎上。目前阿里雲函式計算已經在全球 19 個區域提供服務。

▲ 阿里雲函式計算產品能力大圖

雲原生應用的高可用是乙個系統的工程,包括眾多方面,完整的高可用體系構建需要很多時間和精力。那麼 serverless 計算是如何幫助使用者簡化雲原生應用高可用設計、實施的複雜度呢? 如下圖所示,高可用體系建設要考慮的點包括基礎設施層、執行時層、資料層以及應用層,且每一層都有大量的工作要做才可以實現高可用。函式計算主要是從容錯、彈性、流控、監控四方面做了大量工作來實現高可用,下圖中藍色虛線框所對應的功能均由平台來實現,使用者是不需要考慮的。藍色實線框雖然平台做了一些工作來簡化使用者的工作難度,但是仍需要使用者來進行關注,而橘紅色的實線框代表需要使用者去負責的部分功能。結合平台提供的功能和使用者的部分精力投入,可以極大地減輕使用者進行高可用體系建設的難度。

▲ 函式計算高可用

函式計算在很多方面做了優化來幫助使用者建設高可用體系。下圖展示了函式計算在可用區容災方面的能力。從圖中可知,函式計算做了相應的負載均衡,使得容災能力大大提公升。

▲ 函式計算多可用區容災

下圖展示的是函式計算對事件的非同步處理,其處理流水線主要包括事件佇列、事件分發、事件消費三個環節,在每乙個環節上都可以進行水平伸縮,其中乙個比較關鍵的點是事件的分發需要匹配下游的消費能力。另外,通過為不同函式指定不同數量的計算資源,使用者能方便地動態調整不同型別事件的消費速度。此外,還可以自定義錯誤重試邏輯,並且有背壓反饋和流控,不會在短時間內產生大量請求時壓垮下乙個服務。

▲ 函式計算事件非同步處理

在函式計算的可觀測性上面,提供了日誌收集和查詢功能,除了預設的簡單日誌查詢功能外,還提供了高階日誌查詢,使用者可以更方便地進行日誌分析。在指標收集和視覺化方面,函式計算提供了豐富的指標收集能力,並且提供了標準指標、概覽資訊等檢視,可以更方便使用者進行運維工作。 下圖是應用交付的乙個示意圖,在整個應用的交付過程中,只有每個環節都做好,才能夠建設乙個敏捷的應用交付流程,其核心是自動化,只有做到了自動化,才能提公升整個流水線的效率和敏捷度。

▲ 敏捷的應用交付流程

下圖展示了自動化應用交付流水線在每個環節的具體任務。其中需要注意的是做到基礎設施即**,才能進行模板定義和自動化設定應用執行環境,進而實現自動化的持續整合等。

▲ 自動化應用交付流水線

做到了應用的自動化交付之後,對整個研發效率的幫助是非常大的。在 serverless 應用上,阿里雲提供了多種工具來幫助使用者實現基礎設施即**。serverless 的模型有乙個很好的能力,就是同乙份模板可以傳入不同的引數,進而生成不同環境的定義,然後通過自動化地管理這些環境。

對於應用本身不同服務版本的交付和灰度發布,函式計算提供了服務版本和服務別名來提供相應的服務,整個應用的灰度發布流程可以簡化成一些 api 的操作,大大提公升業務的效率。通過 serverless 計算平台提供的這些能力,整個軟體應用的交付流水線自動化程度得到了大幅度的提高。

函式計算還有乙個很有用的功能——對存量應用的相容性。通過 custom runtime,能夠適配很多的流行框架,相容傳統應用,使其能夠很容易地適配到 serverless 平台上面,由控制台提**用的建立、部署、關聯資源管理、監控等一系列服務。

除了函式計算,還可以用 serverless 工作流對不同的應用環節、不同的函式進行編排,通過描述性的語言去定義工作流,由其可靠地執行每乙個步驟,這就大幅度降低使用者對於複雜任務的編排難度。

函式計算有幾個典型的應用場景,乙個就是 web/api 後端服務,阿里雲已經有包括石墨文件、微博、世紀華聯在內的多個成功應用案例。

函式計算的另外乙個應用場景就是大規模的資料並行處理,比如往 oss 上面上傳大量的、音訊、文字等資料,可以觸發函式做自定義的處理,比如轉碼、截幀等。這方面的成功案例包括虎撲、分眾傳媒、百家互聯等。

函式計算還有乙個應用場景就是資料實時流式處理,比如不同的裝置產生的訊息、日誌傳送到訊息佇列等管道類似的服務中,就可以觸發函式來進行流式處理。

最後乙個應用場景就是運維的自動化,通過定時觸發、雲監控事件觸發、流程編排等方式呼叫函式完成運維任務,大大降低運維成本和難度,典型的成功案例有圖森未來等。

圖森未來是一家專注於 l4 級別無人駕駛卡車技術研發與應用的人工智慧企業,面向全球提供可大規模商業化運營的無人駕駛卡車技術,為全球物流運輸行業賦能。在路測過程中會有大量資料產生,而對這些資料的處理流程複雜多變,即使對於同一批資料,不同的業務小組也會有不同的使用及處理方式。如何有效管理不同的資料處理流程、降低人為介入頻率能夠大幅的提高生產效率。

路測不定時執行的特點使得流程編排任務執行時間點、執行時長具有極大的不確定性,本地機房獨自建立流程管理系統難以最大優化機器利用率,造成資源浪費。而圖森未來本地已有許多單元化業務處理指令碼及應用程式,但因為各種限制而無法全量的遷移上雲,這也對如何合理化使用雲上服務帶來了挑戰。

針對上述情況,圖森未來開始探索資料處理平台的自動化。阿里雲 serverless 工作流按執行排程的次數計費,具有易用易整合、運維簡單等諸多優點,能夠很好地解決上述場景中所遇到的問題,非常適合這類不定時執行的離線任務場景。

serverless 工作流還支援編排本地或自建機房的任務,圖森未來通過使用 serverless 工作流原生支援的訊息服務 mns 解決了雲上雲下的資料打通問題,使得本地的原有任務得到很好的編排及管理。

除了排程外,serverless 工作流也支援對任務的狀態及執行過程中所產生的資料進行維護。圖森未來通過使用任務的輸入輸出對映及狀態匯報機制,高效地管理了流程中各任務的生命週期及相互間的資料傳遞。

在未來,隨著業務規模的擴大,圖森未來將持續優化離線大資料處理流程的執行效率及自動化水平。通過各種探索,圖森未來將進一步提公升工程團隊的效率,將更多的精力和資金投入到業務創新中去。

serverless 工作流是阿里雲 serverless 產品體系中的關鍵一環。通過 serverless 工作流,使用者能夠將函式計算、視覺智慧型平台等多個阿里雲服務,或者自建的服務,以簡單直觀的方式編排為工作流,迅速構建彈性高可用的雲原生應用。

自 2017 年推出函式計算起,該服務根據應用負載變化實時智慧型地彈性擴縮容,1 分鐘完成上萬例項的伸縮並保證穩定的延時。目前已經支撐微博、芒果 tv、華大基因、圖森未來、石墨科技等使用者的關鍵應用,輕鬆應對業務洪峰。

從單體應用走向服務化

之前講解了什麼是微服務 微服務的核心在於服務治理,微服務架構是將複雜臃腫的單體應用進行細粒度的服務化拆分,每個拆分出來的服務各自獨立打包部署,並交由小團隊進行開發和運維,從而極大地提高了應用交付的效率。什麼時候進行服務化拆分?拆分單體應用有哪些標準呢?這個時候就需要大規模地擴張開發人員,以支撐多個功...

從誠懇出發,邁向自我實現

單元 it書訊 欄目 書評 副標 內文 如果完滿的人生是我們要建構的系統,則李開復博士的這本書嘗試提供分析與設計。在書中,作者提供了如何讓自己更好的方 旁徵博引地闡述中心思想的實質意義。他畫出了以價值觀為中心,自省 胸懷 同理心 自信 勇氣 積極位於內圈,是人生態度。有效執行 合作溝通 人際交流 發...

從誠懇出發,邁向自我實現

單元 it書訊 欄目 書評 副標 內文 如果完滿的人生是我們要建構的系統,則李開復博士的這本書嘗試提供分析與設計。在書中,作者提供了如何讓自己更好的方 旁徵博引地闡述中心思想的實質意義。他畫出了以價值觀為中心,自省 胸懷 同理心 自信 勇氣 積極位於內圈,是人生態度。有效執行 合作溝通 人際交流 發...