溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Serverless在大規(guī)模數(shù)據(jù)處理的實(shí)踐是怎樣的

發(fā)布時(shí)間:2021-11-18 16:45:50 來(lái)源:億速云 閱讀:105 作者:柒染 欄目:云計(jì)算

本篇文章給大家分享的是有關(guān)Serverless在大規(guī)模數(shù)據(jù)處理的實(shí)踐是怎樣的,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

前言

當(dāng)您第一次接觸 Serverless 的時(shí)候,有一個(gè)不那么明顯的新使用方式:與傳統(tǒng)的基于服務(wù)器的方法相比,Serverless 服務(wù)平臺(tái)可以使您的應(yīng)用快速水平擴(kuò)展,并行處理的工作更加有效。這主要是因?yàn)?Serverless 可以不必為閑置的資源付費(fèi),不用擔(dān)心預(yù)留的資源不夠。而在傳統(tǒng)的使用范式中,用戶必須預(yù)留成百上千的服務(wù)器來(lái)做一些高度并行化但執(zhí)行時(shí)長(zhǎng)較短的任務(wù),而且必須為每一臺(tái)服務(wù)器買單,即使有的服務(wù)器已經(jīng)不再工作了。

以阿里云 Serverless 產(chǎn)品——函數(shù)計(jì)算為例,便可以完美解決您上述所有顧慮:

  • 如果您的任務(wù)本身計(jì)算量不是很大,但是有大量的并發(fā)任務(wù)請(qǐng)求需要并行處理, 比如多媒體文件處理、文檔轉(zhuǎn)換等;

  • 一個(gè)任務(wù)本身計(jì)算量很大,要求單個(gè)任務(wù)很快處理完,并且還能支持并行處理多個(gè)任務(wù)。

在這種場(chǎng)景下,用戶唯一關(guān)注的就是:您的任務(wù)是可以分治拆解并且子任務(wù)是可以并行處理的,一個(gè)需要一個(gè)小時(shí)才能處理完的長(zhǎng)任務(wù),可以分解成 360 個(gè)獨(dú)立的 10 秒長(zhǎng)的子任務(wù)并行處理,這樣,以前您要花一個(gè)小時(shí)才能處理完的任務(wù),現(xiàn)在只需要 10 秒就可以搞定。由于采用的是按量計(jì)費(fèi)的模型,完成的計(jì)算量和成本是大致相當(dāng)?shù)模鴤鹘y(tǒng)模型則因?yàn)轭A(yù)留資源肯定會(huì)存在浪費(fèi),浪費(fèi)的費(fèi)用也是需要您去承擔(dān)的。

接下來(lái),將詳細(xì)闡述 Serverless 在大規(guī)模數(shù)據(jù)處理上的實(shí)踐。

極致彈性擴(kuò)縮容應(yīng)對(duì)計(jì)算波動(dòng)

在介紹相關(guān)的大規(guī)模數(shù)據(jù)處理示例之前, 這里先簡(jiǎn)單介紹一下函數(shù)計(jì)算。

1. 函數(shù)計(jì)算簡(jiǎn)介

Serverless在大規(guī)模數(shù)據(jù)處理的實(shí)踐是怎樣的

  • 開(kāi)發(fā)者使用編程語(yǔ)言編寫應(yīng)用和服務(wù),函數(shù)計(jì)算支持的開(kāi)發(fā)語(yǔ)言請(qǐng)參見(jiàn)開(kāi)發(fā)語(yǔ)言列表;

  • 開(kāi)發(fā)者上傳應(yīng)用到函數(shù)計(jì)算;

  • 觸發(fā)函數(shù)執(zhí)行:觸發(fā)方式包括 OSS、API 網(wǎng)關(guān)、日志服務(wù)、表格存儲(chǔ)以及函數(shù)計(jì)算 API、SDK 等;

  • 動(dòng)態(tài)擴(kuò)容以響應(yīng)請(qǐng)求:函數(shù)計(jì)算可以根據(jù)用戶請(qǐng)求量自動(dòng)擴(kuò)容,該過(guò)程對(duì)您和您的用戶均透明無(wú)感知;

  • 根據(jù)函數(shù)的實(shí)際執(zhí)行時(shí)間按量計(jì)費(fèi):函數(shù)執(zhí)行結(jié)束后,可以通過(guò)賬單來(lái)查看執(zhí)行費(fèi)用,收費(fèi)粒度精確到 100 毫秒。

詳情: 函數(shù)計(jì)算官網(wǎng)

至此,您大約可以簡(jiǎn)單理解到函數(shù)計(jì)算是怎么運(yùn)作的,接下來(lái)以大量視頻并行轉(zhuǎn)碼的案例來(lái)闡述:假設(shè)一家在家教育或娛樂(lè)相關(guān)的企業(yè),老師授課視頻或者新的片源一般是集中式產(chǎn)生,而您希望這些視頻被快速轉(zhuǎn)碼處理完以便能讓客戶快速看到視頻回放。比如在當(dāng)下疫情中,在線教育產(chǎn)生的課程激增,而出課高峰一般是 10 點(diǎn)、12 點(diǎn)、16 點(diǎn)、18 點(diǎn)等明顯的峰值段,特定的時(shí)間內(nèi)(比如半個(gè)小時(shí))處理完所有新上傳的視頻是一個(gè)通用而且普遍的需求。

2. 彈性高可用的音視頻處理系統(tǒng)

  • OSS 觸發(fā)器

Serverless在大規(guī)模數(shù)據(jù)處理的實(shí)踐是怎樣的

如上圖所示,用戶上傳一個(gè)視頻到 OSS,OSS 觸發(fā)器自動(dòng)觸發(fā)函數(shù)執(zhí)行,函數(shù)計(jì)算自動(dòng)擴(kuò)容,執(zhí)行環(huán)境內(nèi)的函數(shù)邏輯調(diào)用 FFmpeg 進(jìn)行視頻轉(zhuǎn)碼,并且將轉(zhuǎn)碼后的視頻保存回 OSS。

  • 消息觸發(fā)器

Serverless在大規(guī)模數(shù)據(jù)處理的實(shí)踐是怎樣的

如上圖所示,應(yīng)用只需要發(fā)一個(gè)消息,自動(dòng)觸發(fā)函數(shù)執(zhí)行音視頻處理的任務(wù)即可,函數(shù)計(jì)算自動(dòng)擴(kuò)容,執(zhí)行環(huán)境內(nèi)的函數(shù)邏輯調(diào)用 FFmpeg 進(jìn)行視頻轉(zhuǎn)碼, 并且將轉(zhuǎn)碼后的視頻保存回 OSS。

  • 直接手動(dòng)調(diào)用 SDK 執(zhí)行音視頻處理任務(wù)

以 python 為例,大致如下:

python
    # -*- coding: utf-8 -*-
    import fc2
    import json
    client = fc2.Client(endpoint="http://123456.cn-hangzhou.fc.aliyuncs.com",accessKeyID="xxxxxxxx",accessKeySecret="yyyyyy")
    # 可選擇同步/異步調(diào)用
    resp = client.invoke_function("FcOssFFmpeg", "transcode", payload=json.dumps(
    {
        "bucket_name" : "test-bucket",
        "object_key" : "video/inputs/a.flv",
        "output_dir" : "video/output/a_out.mp4"
    })).data
    print(resp)

從上面我們也可以看出,觸發(fā)函數(shù)執(zhí)行的方式也很多,同時(shí)簡(jiǎn)單配置下 SLS 日志,就可以很快實(shí)現(xiàn)一個(gè)彈性高可用、按量付費(fèi)的音視頻處理系統(tǒng),同時(shí)能提供免運(yùn)維、具體業(yè)務(wù)數(shù)據(jù)可視化、強(qiáng)大自定義監(jiān)控報(bào)警等超強(qiáng)功能的 dashboard。

Serverless在大規(guī)模數(shù)據(jù)處理的實(shí)踐是怎樣的

目前已經(jīng)落地的音視頻案例有 UC、語(yǔ)雀、躺平設(shè)計(jì)之家、虎撲以及幾家在線教育的頭部客戶等,其中有些客戶高峰期間,彈性使用到了萬(wàn)核以上 CPU 計(jì)算資源,并行處理的視頻達(dá)到 1700+,同時(shí)提供了極高的性價(jià)比。

詳情可以參考:

  • simple-video-processing)

  • fc-oss-ffmpeg

任務(wù)分治,并行加速

這種將任務(wù)分而治之的思想應(yīng)用在函數(shù)計(jì)算上是一件有趣的事情,在這里舉一個(gè)例子,比如您有一個(gè)超大的 20G 的 1080P 高清視頻需要轉(zhuǎn)碼,即使您使用一臺(tái)高配機(jī)器,需要的時(shí)間可能還是要按小時(shí)計(jì),如果中途出問(wèn)題中斷轉(zhuǎn)碼,您只能重新開(kāi)始再重復(fù)一遍轉(zhuǎn)碼的過(guò)程,如果您使用分治的思想+函數(shù)計(jì)算,轉(zhuǎn)碼的過(guò)程衍變?yōu)? 分片-> 并行轉(zhuǎn)碼分片-> 合并分片,這樣就可以解決您上述的兩個(gè)痛點(diǎn):

  • 分片和合成分片是內(nèi)存級(jí)別的拷貝,需要的計(jì)算量極小,真正消耗計(jì)算量的轉(zhuǎn)碼,拆分成了很多子任務(wù)并行處理,在這個(gè)模型中,分片轉(zhuǎn)碼的最大時(shí)間基本等同于整個(gè)大視頻的轉(zhuǎn)碼時(shí)間;

  • 即使中途某個(gè)分片轉(zhuǎn)碼出現(xiàn)異常,只需要重試這個(gè)分片的轉(zhuǎn)碼即可,不需要整個(gè)大任務(wù)推倒重來(lái)。

通過(guò)將大任務(wù)合理的分解,配合使用函數(shù)計(jì)算,編寫一點(diǎn) code,就可以快速完成一個(gè)彈性高可用、并行加速、按量付費(fèi)的大型數(shù)據(jù)處理系統(tǒng)。

在介紹這個(gè)方案之前,我們先簡(jiǎn)單介紹一下 Serverless 工作流,Serverless 工作流可以很好地將函數(shù)和其他云服務(wù)和自建服務(wù)有組織地編排起來(lái)。

1. Serverless 工作流簡(jiǎn)介

Serverless 工作流(Serverless Workflow)是一個(gè)用來(lái)協(xié)調(diào)多個(gè)分布式任務(wù)執(zhí)行的全托管云服務(wù)。在 Serverless 工作流中,您可以用順序、分支、并行等方式來(lái)編排分布式任務(wù),Serverless 工作流會(huì)按照設(shè)定好的步驟可靠地協(xié)調(diào)任務(wù)執(zhí)行,跟蹤每個(gè)任務(wù)的狀態(tài)轉(zhuǎn)換,并在必要時(shí)執(zhí)行用戶定義的重試邏輯,以確保工作流順利完成。Serverless 工作流簡(jiǎn)化了開(kāi)發(fā)和運(yùn)行業(yè)務(wù)流程所需要的任務(wù)協(xié)調(diào)、狀態(tài)管理以及錯(cuò)誤處理等繁瑣工作,讓您聚焦業(yè)務(wù)邏輯開(kāi)發(fā)。

詳情: Serverless 工作流官網(wǎng)

接下來(lái)以一個(gè)大視頻快速轉(zhuǎn)碼的案例來(lái)闡述 Serverless 工作編排函數(shù),實(shí)現(xiàn)大計(jì)算任務(wù)的分解,并行處理子任務(wù),最終達(dá)到快速完成單個(gè)大任務(wù)的目的。

2. 大視頻的快速多目標(biāo)格式轉(zhuǎn)碼

Serverless在大規(guī)模數(shù)據(jù)處理的實(shí)踐是怎樣的

如上圖所示,假設(shè)用戶上傳一個(gè) mov 格式的視頻到 OSS,OSS 觸發(fā)器自動(dòng)觸發(fā)函數(shù)執(zhí)行,函數(shù)調(diào)用 FnF 執(zhí)行,F(xiàn)nF 同時(shí)進(jìn)行 1 種或者多種格式的轉(zhuǎn)碼(由 template.yml 中的 DST_FORMATS 參數(shù)控制),假設(shè)配置的是同時(shí)進(jìn)行 mp4 和 flv 格式的轉(zhuǎn)碼。

  • 一個(gè)視頻文件可以同時(shí)被轉(zhuǎn)碼成各種格式以及其他各種自定義處理,比如增加水印處理或者在 after-process 更新信息到數(shù)據(jù)庫(kù)等;

  • 當(dāng)有多個(gè)文件同時(shí)上傳到 OSS,函數(shù)計(jì)算會(huì)自動(dòng)伸縮,并行處理多個(gè)文件,同時(shí)每次文件轉(zhuǎn)碼成多種格式也是并行;

  • 結(jié)合 NAS + 視頻切片,可以解決超大視頻的轉(zhuǎn)碼,對(duì)于每一個(gè)視頻,先進(jìn)行切片處理,然后并行轉(zhuǎn)碼切片,最后合成,通過(guò)設(shè)置合理的切片時(shí)間,可以大大加快較大視頻的轉(zhuǎn)碼速度;

  • fnf 可以跟蹤每一步執(zhí)行情況,并且可以自定義每一個(gè)步驟的重試,提高任務(wù)系統(tǒng)的魯棒性,如: retry-example

詳情可以參考: fc-fnf-video-processing

在任務(wù)分治,并行加速具體的案例中,上面分享的是 CPU 密集型任務(wù)分解,但也可以進(jìn)行 IO 密集型任務(wù)分解,比如這個(gè)需求:上海的 region 的 OSS bucket 中的一個(gè) 20G 大文件,秒級(jí)轉(zhuǎn)存回杭州的 OSS Bucket 中。這里也可以采用分治的思路,Master 函數(shù)在接到轉(zhuǎn)存任務(wù)之后,將超大文件進(jìn)行分片的 range 分配給每個(gè) Worker 子函數(shù),Worker 子函數(shù)并行轉(zhuǎn)存屬于自己那部分的分片,Master 函數(shù)待所有子 Worker 運(yùn)行完畢之后,提交合并分片請(qǐng)求,完成整個(gè)轉(zhuǎn)存任務(wù)。

Serverless在大規(guī)模數(shù)據(jù)處理的實(shí)踐是怎樣的

詳情可以參考: 利用函數(shù)計(jì)算多實(shí)例并發(fā)實(shí)現(xiàn)秒級(jí)轉(zhuǎn)存超大文件

本文探討了 Serverless 服務(wù)平臺(tái)可以使您的應(yīng)用快速水平擴(kuò)展,并行處理的工作更加有效,并給出了具體的實(shí)踐案例,無(wú)論在 CPU 密集型還是 IO 密集型場(chǎng)景,函數(shù)計(jì)算 + Serverless 都能完美解決您以下顧慮:

  • 不必為閑置的資源付費(fèi)

  • 不用擔(dān)心計(jì)算資源預(yù)留不夠

  • 大計(jì)算量的任務(wù)需要快速處理完畢

  • 更好的任務(wù)流程跟蹤

  • 完善的監(jiān)控報(bào)警、免運(yùn)維、業(yè)務(wù)數(shù)據(jù)可視化等

  • ….

本文中對(duì)于 Serverless 音視頻處理只是一個(gè)示例,它展示的是函數(shù)計(jì)算配合 Serverless 工作流在離線計(jì)算場(chǎng)景中的能力和獨(dú)一無(wú)二的優(yōu)勢(shì)。我們可以用發(fā)散的方式去拓展 Serverless 在大規(guī)模數(shù)據(jù)處理實(shí)踐的邊界,比如AI、基因計(jì)算、科學(xué)仿真等。

以上就是Serverless在大規(guī)模數(shù)據(jù)處理的實(shí)踐是怎樣的,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI