從單體邁向 Serverless 的避坑指南
用戶需求和云的發(fā)展兩條線推動(dòng)了云原生技術(shù)的興起、發(fā)展和大規(guī)模應(yīng)用。本文將主要討論什么是云原生應(yīng)用,構(gòu)成云原生應(yīng)用的要素是什么,什么是 Serverless 計(jì)算,以及 Serverless 如何簡(jiǎn)化技術(shù)復(fù)雜度,幫助用戶應(yīng)對(duì)快速變化的需求,實(shí)現(xiàn)彈性、高可用的服務(wù),并通過(guò)具體的案例和場(chǎng)景進(jìn)行說(shuō)明。
如今,各行各業(yè)都在談數(shù)字化轉(zhuǎn)型,尤其是新零售、傳媒、交通等行業(yè)。數(shù)字化的商業(yè)形態(tài)已經(jīng)成為主流,逐漸替代了傳統(tǒng)的商業(yè)形態(tài)。在另外一些行業(yè)里(如工業(yè)制造),雖然企業(yè)的商業(yè)形態(tài)并非以數(shù)字化的形式表現(xiàn),但是在數(shù)字孿生理念下,充分利用數(shù)據(jù)科技進(jìn)行生產(chǎn)運(yùn)營(yíng)優(yōu)化也正在成為研究熱點(diǎn)和行業(yè)共識(shí)。
企業(yè)進(jìn)行數(shù)字化轉(zhuǎn)型,從生產(chǎn)資料、生產(chǎn)關(guān)系、戰(zhàn)略規(guī)劃、增長(zhǎng)曲線四個(gè)層面來(lái)看:
- 生產(chǎn)資料:數(shù)據(jù)成為最重要的生產(chǎn)資料,需求/風(fēng)險(xiǎn)隨時(shí)變化,企業(yè)面臨巨大的不確定性;
- 生產(chǎn)關(guān)系:數(shù)據(jù)為中心,非基于流程和規(guī)則的固定生產(chǎn)關(guān)系,網(wǎng)絡(luò)效應(yīng)令生產(chǎn)關(guān)系跨越時(shí)空限制,多連接方式催生新的業(yè)務(wù)和物種;
- 戰(zhàn)略規(guī)劃:基于數(shù)據(jù)決策,快速應(yīng)對(duì)不確定的商業(yè)環(huán)境;
- 增長(zhǎng)曲線:數(shù)字化技術(shù)帶來(lái)觸達(dá)海量用戶的能力,可帶來(lái)突破性的增長(zhǎng)。
從云服務(wù)商的角度來(lái)看云的演進(jìn)趨勢(shì),在 Cloud 1.0 時(shí)代,基礎(chǔ)設(shè)施的云化是其主題,采用云托管模式,云上云下的應(yīng)用保持兼容,傳統(tǒng)的應(yīng)用可以直接遷移到云上,這種方式的核心價(jià)值在于資源的彈性和成本的低廉;在基礎(chǔ)設(shè)施提供了海量算力之后,怎么幫助用戶更好地利用算力,加速企業(yè)創(chuàng)新的速度,就成為云的核心能力。
如果仍在服務(wù)器上構(gòu)建基礎(chǔ)應(yīng)用,那么研發(fā)成本就會(huì)很高,管理難度也很大,因此有了 Cloud 2.0,也就是云原生時(shí)代。在云原生時(shí)代,云服務(wù)商提供了豐富的托管服務(wù),助力企業(yè)數(shù)字化轉(zhuǎn)型和創(chuàng)新,用戶可以像搭積木一樣基于各種云服務(wù)來(lái)構(gòu)建應(yīng)用,大大降低了研發(fā)成本。
云原生應(yīng)用要素
云原生應(yīng)用有三個(gè)非常關(guān)鍵的要素:微服務(wù)架構(gòu),應(yīng)用容器化和 Serverless 化,敏捷的軟件交付流程。
1. 微服務(wù)架構(gòu)
單體架構(gòu)和微服務(wù)架構(gòu)各有各的特點(diǎn),其主要特點(diǎn)對(duì)比如下圖所示。總的來(lái)說(shuō),單體架構(gòu)上手快,但是維護(hù)難,微服務(wù)架構(gòu)部署較難,但是獨(dú)立性和敏捷性更好,更適合云原生應(yīng)用。
2. 應(yīng)用容器化和 Serverless 化
容器是當(dāng)前最流行的代碼封裝方式,借助 K8s 及其生態(tài)的能力,大大降低了整個(gè)基礎(chǔ)設(shè)施的管理難度,而且容器在程序的支撐性方面提供非常出色的靈活性和可移植性,越來(lái)越多的用戶開始使用容器來(lái)封裝整個(gè)應(yīng)用。 Serverless 計(jì)算是另外一種形態(tài),做了大量的端到端整合和云服務(wù)的集成,大大提高了研發(fā)效率,但是對(duì)傳統(tǒng)應(yīng)用的兼容性沒(méi)有容器那么靈活,但是也帶來(lái)了很大的整潔性,用戶只需要專注于業(yè)務(wù)邏輯的編碼,聚焦于業(yè)務(wù)邏輯的創(chuàng)新即可。
3. 敏捷的應(yīng)用交付流程
敏捷的應(yīng)用交付流程是非常重要的一個(gè)要素,主要包括流程自動(dòng)化,專注于功能開發(fā),快速發(fā)現(xiàn)問(wèn)題,快速發(fā)布上線。
Serverless 計(jì)算
1. 阿里云函數(shù)計(jì)算
Serverless 是一個(gè)新的概念,但是其內(nèi)涵早就已經(jīng)存在。阿里云或者 AWS 的第一個(gè)云服務(wù)都是對(duì)象存儲(chǔ),對(duì)象儲(chǔ)存實(shí)際上就是一個(gè)存儲(chǔ)領(lǐng)域的 Serverless 服務(wù);另外,Serverless 指的是一個(gè)產(chǎn)品體系,而不是單個(gè)產(chǎn)品。當(dāng)前業(yè)界云服務(wù)商推出的新功能或者新產(chǎn)品絕大多數(shù)都是 Serverless 形態(tài)的。阿里云 Serverless 產(chǎn)品體系包括計(jì)算、存儲(chǔ)、API、分析和中間件等,目前云的產(chǎn)品體系正在 Serverless 化。
阿里云 Serverless 計(jì)算平臺(tái)函數(shù)計(jì)算,有 4 個(gè)特點(diǎn):
- 和云端無(wú)縫集成:通過(guò)事件驅(qū)動(dòng)的方式將云端的各種服務(wù)與函數(shù)計(jì)算無(wú)縫集成,用戶只需要關(guān)注函數(shù)的開發(fā),事件的觸發(fā)等均由服務(wù)商來(lái)完成;
- 實(shí)時(shí)彈性伸縮:由系統(tǒng)自動(dòng)完成函數(shù)計(jì)算的彈性伸縮,且速度非常快,用戶可以將這種能力用在在線應(yīng)用上;
- 次秒級(jí)計(jì)量:次秒級(jí)的計(jì)量方式提供了一種完全的按需計(jì)量方式,資源利用率能達(dá)到百分之百;
- 高可用:函數(shù)計(jì)算平臺(tái)做了大量工作幫助用戶構(gòu)建高可用的應(yīng)用。
那么,阿里云函數(shù)計(jì)算是如何做到以上 4 點(diǎn)呢?阿里云函數(shù)計(jì)算的產(chǎn)品能力大圖如下圖所示,首先函數(shù)計(jì)算產(chǎn)品是建立在阿里巴巴的基礎(chǔ)設(shè)施服務(wù)之上的產(chǎn)品,對(duì)在其之上的計(jì)算層進(jìn)行了大量?jī)?yōu)化。接著在應(yīng)用層開發(fā)了大量能力和工具,基于以上產(chǎn)品能力,為用戶提供多種場(chǎng)景下完整的解決方案,才有了整個(gè)優(yōu)秀的函數(shù)計(jì)算產(chǎn)品。函數(shù)計(jì)算是阿里云的一個(gè)非常基礎(chǔ)的云產(chǎn)品,阿里云的許多產(chǎn)品和功能均是建立在函數(shù)計(jì)算的基礎(chǔ)上。目前阿里云函數(shù)計(jì)算已經(jīng)在全球 19 個(gè)區(qū)域提供服務(wù)。
2. Serverless 幫助用戶簡(jiǎn)化云原生應(yīng)用高可用設(shè)計(jì)、實(shí)施的復(fù)雜度
云原生應(yīng)用的高可用是一個(gè)系統(tǒng)的工程,包括眾多方面,完整的高可用體系構(gòu)建需要很多時(shí)間和精力。那么 Serverless 計(jì)算是如何幫助用戶簡(jiǎn)化云原生應(yīng)用高可用設(shè)計(jì)、實(shí)施的復(fù)雜度呢? 如下圖所示,高可用體系建設(shè)要考慮的點(diǎn)包括基礎(chǔ)設(shè)施層、運(yùn)行時(shí)層、數(shù)據(jù)層以及應(yīng)用層,且每一層都有大量的工作要做才可以實(shí)現(xiàn)高可用。函數(shù)計(jì)算主要是從容錯(cuò)、彈性、流控、監(jiān)控四方面做了大量工作來(lái)實(shí)現(xiàn)高可用,下圖中藍(lán)色虛線框所對(duì)應(yīng)的功能均由平臺(tái)來(lái)實(shí)現(xiàn),用戶是不需要考慮的。藍(lán)色實(shí)線框雖然平臺(tái)做了一些工作來(lái)簡(jiǎn)化用戶的工作難度,但是仍需要用戶來(lái)進(jìn)行關(guān)注,而橘紅色的實(shí)線框代表需要用戶去負(fù)責(zé)的部分功能。結(jié)合平臺(tái)提供的功能和用戶的部分精力投入,可以極大地減輕用戶進(jìn)行高可用體系建設(shè)的難度。
函數(shù)計(jì)算在很多方面做了優(yōu)化來(lái)幫助用戶建設(shè)高可用體系。下圖展示了函數(shù)計(jì)算在可用區(qū)容災(zāi)方面的能力。從圖中可知,函數(shù)計(jì)算做了相應(yīng)的負(fù)載均衡,使得容災(zāi)能力大大提升。
下圖展示的是函數(shù)計(jì)算對(duì)事件的異步處理,其處理流水線主要包括事件隊(duì)列、事件分發(fā)、事件消費(fèi)三個(gè)環(huán)節(jié),在每一個(gè)環(huán)節(jié)上都可以進(jìn)行水平伸縮,其中一個(gè)比較關(guān)鍵的點(diǎn)是事件的分發(fā)需要匹配下游的消費(fèi)能力。另外,通過(guò)為不同函數(shù)指定不同數(shù)量的計(jì)算資源,用戶能方便地動(dòng)態(tài)調(diào)整不同類型事件的消費(fèi)速度。此外,還可以自定義錯(cuò)誤重試邏輯,并且有背壓反饋和流控,不會(huì)在短時(shí)間內(nèi)產(chǎn)生大量請(qǐng)求時(shí)壓垮下一個(gè)服務(wù)。
在函數(shù)計(jì)算的可觀測(cè)性上面,提供了日志收集和查詢功能,除了默認(rèn)的簡(jiǎn)單日志查詢功能外,還提供了高級(jí)日志查詢,用戶可以更方便地進(jìn)行日志分析。在指標(biāo)收集和可視化方面,函數(shù)計(jì)算提供了豐富的指標(biāo)收集能力,并且提供了標(biāo)準(zhǔn)指標(biāo)、概覽信息等視圖,可以更方便用戶進(jìn)行運(yùn)維工作。 下圖是應(yīng)用交付的一個(gè)示意圖,在整個(gè)應(yīng)用的交付過(guò)程中,只有每個(gè)環(huán)節(jié)都做好,才能夠建設(shè)一個(gè)敏捷的應(yīng)用交付流程,其核心是自動(dòng)化,只有做到了自動(dòng)化,才能提升整個(gè)流水線的效率和敏捷度。
下圖展示了自動(dòng)化應(yīng)用交付流水線在每個(gè)環(huán)節(jié)的具體任務(wù)。其中需要注意的是做到基礎(chǔ)設(shè)施即代碼,才能進(jìn)行模板定義和自動(dòng)化設(shè)置應(yīng)用運(yùn)行環(huán)境,進(jìn)而實(shí)現(xiàn)自動(dòng)化的持續(xù)集成等。
做到了應(yīng)用的自動(dòng)化交付之后,對(duì)整個(gè)研發(fā)效率的幫助是非常大的。在 Serverless 應(yīng)用上,阿里云提供了多種工具來(lái)幫助用戶實(shí)現(xiàn)基礎(chǔ)設(shè)施即代碼。Serverless 的模型有一個(gè)很好的能力,就是同一份模板可以傳入不同的參數(shù),進(jìn)而生成不同環(huán)境的定義,然后通過(guò)自動(dòng)化地管理這些環(huán)境。
對(duì)于應(yīng)用本身不同服務(wù)版本的交付和灰度發(fā)布,函數(shù)計(jì)算提供了服務(wù)版本和服務(wù)別名來(lái)提供相應(yīng)的服務(wù),整個(gè)應(yīng)用的灰度發(fā)布流程可以簡(jiǎn)化成一些 API 的操作,大大提升業(yè)務(wù)的效率。通過(guò) Serverless 計(jì)算平臺(tái)提供的這些能力,整個(gè)軟件應(yīng)用的交付流水線自動(dòng)化程度得到了大幅度的提高。
函數(shù)計(jì)算還有一個(gè)很有用的功能——對(duì)存量應(yīng)用的兼容性。通過(guò) Custom runtime,能夠適配很多的流行框架,兼容傳統(tǒng)應(yīng)用,使其能夠很容易地適配到 Serverless 平臺(tái)上面,由控制臺(tái)提供應(yīng)用的創(chuàng)建、部署、關(guān)聯(lián)資源管理、監(jiān)控等一系列服務(wù)。
除了函數(shù)計(jì)算,還可以用 Serverless 工作流對(duì)不同的應(yīng)用環(huán)節(jié)、不同的函數(shù)進(jìn)行編排,通過(guò)描述性的語(yǔ)言去定義工作流,由其可靠地執(zhí)行每一個(gè)步驟,這就大幅度降低用戶對(duì)于復(fù)雜任務(wù)的編排難度。
應(yīng)用場(chǎng)景案例
函數(shù)計(jì)算有幾個(gè)典型的應(yīng)用場(chǎng)景,一個(gè)就是 Web/API 后端服務(wù),阿里云已經(jīng)有包括石墨文檔、微博、世紀(jì)華聯(lián)在內(nèi)的多個(gè)成功應(yīng)用案例。
函數(shù)計(jì)算的另外一個(gè)應(yīng)用場(chǎng)景就是大規(guī)模的數(shù)據(jù)并行處理,比如往 OSS 上面上傳大量的圖片、音頻、文本等數(shù)據(jù),可以觸發(fā)函數(shù)做自定義的處理,比如轉(zhuǎn)碼、截幀等。這方面的成功案例包括虎撲、分眾傳媒、百家互聯(lián)等。
函數(shù)計(jì)算還有一個(gè)應(yīng)用場(chǎng)景就是數(shù)據(jù)實(shí)時(shí)流式處理,比如不同的設(shè)備產(chǎn)生的消息、日志發(fā)送到消息隊(duì)列等管道類似的服務(wù)中,就可以觸發(fā)函數(shù)來(lái)進(jìn)行流式處理。
最后一個(gè)應(yīng)用場(chǎng)景就是運(yùn)維的自動(dòng)化,通過(guò)定時(shí)觸發(fā)、云監(jiān)控事件觸發(fā)、流程編排等方式調(diào)用函數(shù)完成運(yùn)維任務(wù),大大降低運(yùn)維成本和難度,典型的成功案例有圖森未來(lái)等。
圖森未來(lái)是一家專注于 L4 級(jí)別無(wú)人駕駛卡車技術(shù)研發(fā)與應(yīng)用的人工智能企業(yè),面向全球提供可大規(guī)模商業(yè)化運(yùn)營(yíng)的無(wú)人駕駛卡車技術(shù),為全球物流運(yùn)輸行業(yè)賦能。在路測(cè)過(guò)程中會(huì)有大量數(shù)據(jù)產(chǎn)生,而對(duì)這些數(shù)據(jù)的處理流程復(fù)雜多變,即使對(duì)于同一批數(shù)據(jù),不同的業(yè)務(wù)小組也會(huì)有不同的使用及處理方式。如何有效管理不同的數(shù)據(jù)處理流程、降低人為介入頻率能夠大幅的提高生產(chǎn)效率。
路測(cè)不定時(shí)運(yùn)行的特點(diǎn)使得流程編排任務(wù)運(yùn)行時(shí)間點(diǎn)、運(yùn)行時(shí)長(zhǎng)具有極大的不確定性,本地機(jī)房獨(dú)自建立流程管理系統(tǒng)難以最大優(yōu)化機(jī)器利用率,造成資源浪費(fèi)。而圖森未來(lái)本地已有許多單元化業(yè)務(wù)處理腳本及應(yīng)用程序,但因?yàn)楦鞣N限制而無(wú)法全量的遷移上云,這也對(duì)如何合理化使用云上服務(wù)帶來(lái)了挑戰(zhàn)。
針對(duì)上述情況,圖森未來(lái)開始探索數(shù)據(jù)處理平臺(tái)的自動(dòng)化。阿里云 Serverless 工作流按執(zhí)行調(diào)度的次數(shù)計(jì)費(fèi),具有易用易集成、運(yùn)維簡(jiǎn)單等諸多優(yōu)點(diǎn),能夠很好地解決上述場(chǎng)景中所遇到的問(wèn)題,非常適合這類不定時(shí)運(yùn)行的離線任務(wù)場(chǎng)景。
Serverless 工作流還支持編排本地或自建機(jī)房的任務(wù),圖森未來(lái)通過(guò)使用 Serverless 工作流原生支持的消息服務(wù) MNS 解決了云上云下的數(shù)據(jù)打通問(wèn)題,使得本地的原有任務(wù)得到很好的編排及管理。
除了調(diào)度外,Serverless 工作流也支持對(duì)任務(wù)的狀態(tài)及執(zhí)行過(guò)程中所產(chǎn)生的數(shù)據(jù)進(jìn)行維護(hù)。圖森未來(lái)通過(guò)使用任務(wù)的輸入輸出映射及狀態(tài)匯報(bào)機(jī)制,高效地管理了流程中各任務(wù)的生命周期及相互間的數(shù)據(jù)傳遞。
在未來(lái),隨著業(yè)務(wù)規(guī)模的擴(kuò)大,圖森未來(lái)將持續(xù)優(yōu)化離線大數(shù)據(jù)處理流程的運(yùn)行效率及自動(dòng)化水平。通過(guò)各種探索,圖森未來(lái)將進(jìn)一步提升工程團(tuán)隊(duì)的效率,將更多的精力和資金投入到業(yè)務(wù)創(chuàng)新中去。
總結(jié)
Serverless 工作流是阿里云 Serverless 產(chǎn)品體系中的關(guān)鍵一環(huán)。通過(guò) Serverless 工作流,用戶能夠?qū)⒑瘮?shù)計(jì)算、視覺(jué)智能平臺(tái)等多個(gè)阿里云服務(wù),或者自建的服務(wù),以簡(jiǎn)單直觀的方式編排為工作流,迅速構(gòu)建彈性高可用的云原生應(yīng)用。
自 2017 年推出函數(shù)計(jì)算起,該服務(wù)根據(jù)應(yīng)用負(fù)載變化實(shí)時(shí)智能地彈性擴(kuò)縮容,1 分鐘完成上萬(wàn)實(shí)例的伸縮并保證穩(wěn)定的延時(shí)。目前已經(jīng)支撐微博、芒果 TV、華大基因、圖森未來(lái)、石墨科技等用戶的關(guān)鍵應(yīng)用,輕松應(yīng)對(duì)業(yè)務(wù)洪峰。