真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

開發(fā)函數(shù)計(jì)算的正確姿勢(shì)——輕松解決大依賴部署

10年積累的網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有河?xùn)|免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

前言

首先介紹下在本文出現(xiàn)的幾個(gè)比較重要的概念:

函數(shù)計(jì)算(Function Compute): 函數(shù)計(jì)算是一個(gè)事件驅(qū)動(dòng)的服務(wù),通過(guò)函數(shù)計(jì)算,用戶無(wú)需管理服務(wù)器等運(yùn)行情況,只需編寫代碼并上傳。函數(shù)計(jì)算準(zhǔn)備計(jì)算資源,并以彈性伸縮的方式運(yùn)行用戶代碼,而用戶只需根據(jù)實(shí)際代碼運(yùn)行所消耗的資源進(jìn)行付費(fèi)。函數(shù)計(jì)算更多信息 參考。開發(fā)函數(shù)計(jì)算的正確姿勢(shì)——輕松解決大依賴部署
Fun: Fun 是一個(gè)用于支持 Serverless 應(yīng)用部署的工具,能幫助您便捷地管理函數(shù)計(jì)算、API 網(wǎng)關(guān)、日志服務(wù)等資源。它通過(guò)一個(gè)資源配置文件(template.yml),協(xié)助您進(jìn)行開發(fā)、構(gòu)建、部署操作。Fun 的更多文檔 參考。
NAS: 阿里云文件存儲(chǔ)NAS是一個(gè)可共享訪問(wèn),彈性擴(kuò)展,高可靠,高性能的分布式文件系統(tǒng)。在函數(shù)計(jì)算的場(chǎng)景中,由于其有代碼包的限制,可以使用 NAS 存放一些不經(jīng)常變動(dòng)的文件,比如數(shù)據(jù)模型、靜態(tài)資源等。參考。
ROS: 阿里云資源編排服務(wù)(ROS)助您簡(jiǎn)化云計(jì)算資源的管理。您可以遵循ROS定義的模板規(guī)范,在模板中定義所需云計(jì)算資源的集合及資源間依賴關(guān)系。ROS自動(dòng)完成所有資源的創(chuàng)建和配置,實(shí)現(xiàn)自動(dòng)化部署和運(yùn)維。更多文檔參考。

備注: 本文介紹的技巧需要 Fun 版本大于等于 3.4.0。

基本上所有的 faas 平臺(tái)為了優(yōu)化函數(shù)的冷啟動(dòng),都會(huì)加入代碼包的限制。阿里云函數(shù)計(jì)算(FC)也不例外。FC 要求壓縮后的代碼包大小不超過(guò) 50MB。由于用戶的函數(shù)代碼可能需要大量的依賴庫(kù),所以代碼包很容易達(dá)到函數(shù)計(jì)算設(shè)定的閾值。

傳統(tǒng)解決方式

基于平臺(tái)硬性要求下,依然有很多途徑來(lái)解決函數(shù)計(jì)算上傳代碼包大小受限的問(wèn)題。下面列舉 3 種常見(jiàn)的解決方案。 備注: 包括不局限于以下方案。

1. 提交工單

提交函數(shù)計(jì)算工單,由后臺(tái)人員為您賬號(hào)開通上傳限制白名單。但提交工單依然有代碼包的限制。部署時(shí)代碼包上傳時(shí)間長(zhǎng),并且也增加了函數(shù)的冷啟動(dòng)時(shí)間,影響函數(shù)性能。PS:通過(guò)使用預(yù)留模式可以完全去除冷啟動(dòng),由于超出本文范圍,這里不再闡述。

2. 利用 OSS 來(lái)實(shí)現(xiàn)

對(duì)代碼包進(jìn)行分類,除項(xiàng)目代碼和少量依賴庫(kù)可以在創(chuàng)建函數(shù)時(shí)上傳到函數(shù)計(jì)算,用戶將部分依賴庫(kù)預(yù)先上傳到 OSS,并在函數(shù)被觸發(fā)執(zhí)行時(shí)開始從 OSS 上加載依賴, 這類依賴的加載操作均可定義應(yīng)用層冷啟動(dòng),當(dāng)加載依賴結(jié)束后,應(yīng)用層冷啟動(dòng)才結(jié)束,函數(shù)的處理邏輯才開始執(zhí)行,應(yīng)用層冷啟動(dòng)的開銷往往會(huì)導(dǎo)致毛刺的產(chǎn)生,影響函數(shù)的性能。您可以將從 OSS 加載代碼包的代碼邏輯放在 initializer 函數(shù)中。既可以解決函數(shù)計(jì)算對(duì)上傳代碼包的限制問(wèn)題,又不影響函數(shù)的性能。但需要用戶進(jìn)行額外的操作。參考使用 initializer 接口解決函數(shù)計(jì)算上傳代碼包大小受限問(wèn)題。

3. 基于文件系統(tǒng) Nas

我們通過(guò) NAS 存放一些體積比較大且不易變動(dòng)的資源。這使得即使在依賴比較大的場(chǎng)景下依舊適用。NAS 在幫助函數(shù)計(jì)算解決大依賴問(wèn)題的同時(shí),由于其自身的配置也比較復(fù)雜,也增加了函數(shù)計(jì)算的使用難度。如何管理 Nas 資源、上傳本地資源到Nas 以及服務(wù)級(jí)別的 Nas 相關(guān)配置參考開發(fā)函數(shù)計(jì)算的正確姿勢(shì) —— 使用 Fun NAS 管理 NAS 資源。

本文旨在介紹第四種方式 -- 使用 Fun 工具來(lái)解決函數(shù)計(jì)算對(duì)上傳代碼包的限制,使得部署步驟簡(jiǎn)單明了,不需關(guān)心額外的配置。同時(shí)也展現(xiàn) Fun 工具對(duì)大依賴場(chǎng)景的順滑體驗(yàn),Let's go!

:已經(jīng)獲得 fc 支持的 runtime 有 nodejs6,nodejs8,nodejs10,python2.7,python3,java8,php7.2,dotnetcore2.1,custom。目前基于所有 fc 支持的 runtime,大依賴場(chǎng)景下除 php7.2 和?dotnetcore2.1 其他都支持。

環(huán)境準(zhǔn)備

Fun 安裝教程 可以直接在這里下載二進(jìn)制版本的 Fun,解壓后即可使用。
執(zhí)行 fun --version 檢查 Fun 是否安裝成功。

$ fun --version
3.4.0

Fun 判定大依賴的標(biāo)準(zhǔn)是什么?

fun install 是 fun 工具的一個(gè)子命令,用于安裝 pip,apt 依賴等,提供了命令行接口和 Funfile 描述文件兩種形式。對(duì)于 fun install 安裝的依賴,當(dāng) fun deploy 部署時(shí)會(huì)自動(dòng)處理大依賴。

當(dāng) Fun 檢測(cè)打包的代碼壓縮后超過(guò)限制(50M),會(huì)根據(jù)對(duì)應(yīng)的 runtime 分離大依賴和代碼。Fun 會(huì)將大依賴目錄分為:系統(tǒng)依賴和語(yǔ)言依賴。系統(tǒng)依賴的本地路徑為 .fun/root,語(yǔ)言依賴根據(jù)函數(shù) runtime 得到,各個(gè) runtime 對(duì)應(yīng)的大依賴目錄映射如下:

語(yǔ)言(runtime)大依賴目錄(directory)
nodejs6 node_modules
nodejs8 node_modules
nodejs10 node_modules
python2.7 .fun/python
python3 .fun/python
java8 .fun/build/artifacts
custom /

自定義執(zhí)行環(huán)境 custom?大依賴目錄為 /,可以理解為其他 runtime 大依賴目錄的合集。例如:函數(shù) runtime 為 custom,若目錄下存在 node_modules.fun/python 等,F(xiàn)un 在部署向?qū)н^(guò)程中會(huì)把它們都認(rèn)定為大依賴,會(huì)分別對(duì)其處理。

Fun deploy 對(duì)大依賴的支持

函數(shù)計(jì)算的命令行工具 Fun 現(xiàn)在原生支持了這種大依賴部署,不需要任何額外操作。僅僅執(zhí)行 fun deploy

$ fun deploy

整體流程如下圖所示:

開發(fā)函數(shù)計(jì)算的正確姿勢(shì)——輕松解決大依賴部署cdn.nlark.com/yuque/0/2020/png/502931/1579052914872-bf485f36-5771-4075-a764-5d8497624536.png">

fun deploy 會(huì)自動(dòng)完成依賴的部署。而當(dāng)檢測(cè)到打包的函數(shù)目錄超過(guò)了平臺(tái)的限制時(shí),會(huì)進(jìn)入到配置向?qū)В瑤椭脩糇詣?dòng)化地配置。即上圖可以理解為:Fun 通過(guò)內(nèi)置 NAS(阿里云文件存儲(chǔ))解決方案,可以一鍵幫用戶創(chuàng)建、配置 NAS,并上傳依賴到 NAS 上。而函數(shù)計(jì)算在運(yùn)行時(shí),可以自動(dòng)從 NAS 讀取到函數(shù)依賴。

大依賴向?qū)?/h5>

大依賴向?qū)Р糠纸貓D如下:

開發(fā)函數(shù)計(jì)算的正確姿勢(shì)——輕松解決大依賴部署

Fun 部署當(dāng)前函數(shù)時(shí),檢測(cè)到壓縮后(.zip)依賴超過(guò)了 50M,提示配置向?qū)Вê罄m(xù)日志省略...)。只需要輸入回車或 yes 即可。最后 Fun 會(huì)自動(dòng)完成配置,成功部署資源到函數(shù)計(jì)算。

體驗(yàn)升級(jí)

fun deploy 大依賴向?qū)瓿珊?,函?shù)會(huì)部署到函數(shù)計(jì)算并對(duì)外提供服務(wù)。此時(shí)大依賴和代碼通過(guò) NAS 進(jìn)行了分離,再次部署時(shí)打包本地代碼目錄時(shí)由于沒(méi)有了大依賴,所以部署速度會(huì)非常的快。

這里推薦一篇使用 fun deploy 進(jìn)行大依賴部署的實(shí)戰(zhàn)案例,展示了 Fun 工具對(duì)大依賴場(chǎng)景的順滑體驗(yàn)Serverless 實(shí)戰(zhàn) —— 快速開發(fā)一個(gè)分布式 Puppeteer 網(wǎng)頁(yè)截圖服務(wù)。

Fun package 對(duì)大依賴的支持

Fun Package 是用來(lái)將代碼、編譯產(chǎn)物、靜態(tài)資源等本地資源上傳到 OSS 的功能。使用 fun Package 的場(chǎng)景,通常是,想僅僅通過(guò)一個(gè)模板文件進(jìn)行部署的場(chǎng)景。比如,本地開發(fā)完成后,可以通過(guò) fun package,將模板依賴的本地資源上傳到 OSS,這樣,無(wú)論是在其他服務(wù)器上部署,還是使用 ROS 部署時(shí),僅僅通過(guò)一個(gè)文本格式的模板文件,就可以完成了。推薦閱讀?Fun Package 功能介紹。

非大依賴場(chǎng)景

流程如下圖所示:

開發(fā)函數(shù)計(jì)算的正確姿勢(shì)——輕松解決大依賴部署

通過(guò) Fun Package 可以將模板文件包含的本地資源一鍵上傳到 OSS 上,完成資源的打包操作。

模版文件差異

將打包后的模板文件(template.packaged.yml)與原文件相比較,可以發(fā)現(xiàn),差異僅僅在使用了本地資源的場(chǎng)景,比如:

- CodeUri: './'
+ CodeUri: 'oss://bucket/PackageDemo/function/39ce6e9109a23d313bc267b1a5211273'

大依賴場(chǎng)景

流程如下圖所示:

開發(fā)函數(shù)計(jì)算的正確姿勢(shì)——輕松解決大依賴部署

當(dāng)遇到打包的函數(shù)體積過(guò)大時(shí),同樣會(huì)進(jìn)入大依賴向?qū)В現(xiàn)un 內(nèi)置 Ros 的解決方案,幫你完成自動(dòng)配置。同時(shí) Fun 會(huì)分開大依賴和代碼并分別上傳到 OSS。這樣做的目的下文中會(huì)有提到。

模版文件差異

大依賴場(chǎng)景下打包完成后生成的 template.packaged.yml 模版文件會(huì)與非大依賴場(chǎng)景下有所不同,除上述?CodeUri 的差異外,還會(huì)新增許多資源描述作為使用 Ros 部署時(shí)的前置條件,例如 NasCpFunc ,?這里只介紹一種,其它不做贅述。

NasCpFunc:
  Type: 'Aliyun::Serverless::Function'
  Properties:
    Handler: index.cpFromOssToNasHandler
    Runtime: nodejs8
    CodeUri: 'oss://ellison-hongkong/9e610f5540e21ace83d5b742241da6aa'
    MemorySize: 3072
    Timeout: 300

NasCpFunc?為大依賴場(chǎng)景下 Fun 為用戶內(nèi)置的資源函數(shù),可以將它理解為一個(gè)輔助函數(shù)。當(dāng)用 Ros 方式部署時(shí),將自動(dòng)執(zhí)行輔助函數(shù)。它用于實(shí)現(xiàn)從 OSS 上下載大依賴(.zip)以及解壓到 Nas 的功能。這也就是為什么上述 fun pakckage 打包時(shí),要將大依賴和代碼分離開并分別上傳到 OSS 的原因。

Fun Packge + Ros 部署實(shí)戰(zhàn)

Serverless 實(shí)戰(zhàn)——使用 Rendertron 搭建 Headless Chrome 渲染解決方案使用 Rendertron + 函數(shù)計(jì)算快速搭建一個(gè)可以直接用于生產(chǎn)的 Headless Chrome 渲染解決方案,以便于幫助網(wǎng)站更好的進(jìn)行 SEO?;谖恼?,我們將升級(jí)文章中一鍵部署的體驗(yàn)。您可以參照上述文章中步驟,其中依賴安裝,項(xiàng)目編譯等均無(wú)需額外操作。

Rendertron 項(xiàng)目代碼依賴過(guò)大,基于 Fun 工具對(duì)大依賴項(xiàng)目的支持,現(xiàn)將其原 Fun deploy 部署改造為 Fun Packge + Ros 部署方式。Fun package 自動(dòng)處理大依賴上傳到 OSS,Ros 部署將大依賴從 OSS 解壓到 Nas,同時(shí)模版中描述的資源自動(dòng)創(chuàng)建成功。基于函數(shù)計(jì)算,項(xiàng)目的服務(wù)架構(gòu)如下:
開發(fā)函數(shù)計(jì)算的正確姿勢(shì)——輕松解決大依賴部署

1. Fun pakcage

按照 RenderTron 文章中步驟操作,在一鍵部署前,執(zhí)行 fun package 命令:

fun package --oss-bucket aliyun-ellison

這里的 --oss-bucket 名稱為自己所擁有讀寫權(quán)限的 OSS 的 Bucket 名稱。完整日志如下:

開發(fā)函數(shù)計(jì)算的正確姿勢(shì)——輕松解決大依賴部署

2. Ros 部署

ROS 通過(guò) Transform 宏實(shí)現(xiàn)了將函數(shù)計(jì)算的模板語(yǔ)法轉(zhuǎn)換為 ROS 支持的語(yǔ)法。這意味著對(duì)于?Fun 規(guī)范文檔?里描述的語(yǔ)法規(guī)則,ROS 是同樣支持的。同時(shí),ROS 支持的資源?也能在 Fun 模板文件中進(jìn)行聲明了,比如 RAM、函數(shù)工作流?等等。

在體驗(yàn)上,由于 ROS 部署,要求資源必須“云化”。也就是沒(méi)辦法直接使用本地的代碼資源。必須先通過(guò) fun package 命令將資源上傳到 oss。

可見(jiàn)這一步我們已經(jīng)完成,不管是大依賴場(chǎng)景還是非大依賴場(chǎng)景,fun package 打包完成后,后續(xù)的部署操作,只需要完全基于這個(gè)打包后的模板文件(template.packaged.yml)即可。不再依賴本地的代碼等資源,可以簡(jiǎn)化部署的難度。

最后將資源通過(guò) ROS 的方式進(jìn)行部署,推薦閱讀開發(fā)函數(shù)計(jì)算的正確姿勢(shì) —— 使用 ROS 進(jìn)行資源編排。

fun deploy --use-ros --stack-name bucket-name

--stack-name 表示要部署的環(huán)境,可以基于該名稱的不同,建立多套開發(fā)環(huán)境,比如 test、staging、prod。

3. 驗(yàn)證

可通過(guò)上述 RenderTron 文章中提到的方式驗(yàn)證,這里不做贅述。

常見(jiàn)問(wèn)題梳理 FAQ

1. 大依賴被一個(gè)服務(wù)下的兩個(gè)函數(shù)同時(shí)引用,F(xiàn)un 是怎么處理的呢?

Fun 支持大依賴的場(chǎng)景是函數(shù)級(jí)別的,即當(dāng)打包某一函數(shù)時(shí)發(fā)現(xiàn)超過(guò)限制才會(huì)進(jìn)入向?qū)?。?dāng)兩個(gè)函數(shù)處于相同 runtime 和 codeUri,F(xiàn)un 會(huì)在結(jié)束第一次向?qū)r(shí),同時(shí)自動(dòng)配置第二個(gè)函數(shù),確保部署后,兩個(gè)函數(shù)都部署成功且可用。

2. 大依賴自動(dòng)配置后,如果我本地添加了新的依賴,部署時(shí)會(huì)自動(dòng)將依賴更新到 Nas 嗎?

不會(huì)。如果添加了新的依賴,比如 node_modules 目錄添加了新的依賴庫(kù),需要在 template.yml 模版文件所在目錄執(zhí)行 fun nas sync,將本地 nas 資源同步到 nas 服務(wù)。如果修改了代碼,只需要使用 fun deploy 重新部署即可。由于大依賴和代碼通過(guò) NAS 進(jìn)行了分離,依賴通常不需要頻繁變化,所以調(diào)用的頻率比較低,而 fun deploy 的由于沒(méi)有了大依賴,部署速度也會(huì)非常的快。

3. 為什么 java8 環(huán)境 Fun 支持大依賴的目錄是?.fun/build/artifacts?

在很多場(chǎng)景,編譯型語(yǔ)言從源碼距離交付物其實(shí)是有一定的距離,比如 java,寫完 java 代碼后,還要考慮如何編譯、打包的問(wèn)題。Fun build 的職責(zé)就是完成從源碼到交付產(chǎn)物的構(gòu)建過(guò)程,推薦閱讀?《開發(fā)函數(shù)計(jì)算的正確姿勢(shì) —— 使用 Fun Build 構(gòu)建函數(shù)》。
Fun build 會(huì)將編譯打包后的交付產(chǎn)物 copy 到?.fun/build/artifacts 目錄,在部署時(shí)檢測(cè)到代碼大小超過(guò)限制,自然會(huì)去?.fun/build/artifacts 下查找對(duì)應(yīng) serviceName/functionName 目錄,并將所有的 jar 包上傳到 Nas。所以 Fun 大依賴部署支持 java8 是以 Fun build 的場(chǎng)景為基礎(chǔ)。未來(lái) Fun 會(huì)集成更多的解決方案,敬請(qǐng)期待!

總結(jié)

Fun 通過(guò)內(nèi)置 NAS(阿里云文件存儲(chǔ))解決方案,可以一鍵幫用戶創(chuàng)建、配置 NAS,并上傳依賴到 NAS 上。而函數(shù)計(jì)算在運(yùn)行時(shí),可以自動(dòng)從 NAS 讀取到函數(shù)依賴。同時(shí)也展現(xiàn) Fun 工具對(duì)大依賴場(chǎng)景的順滑體驗(yàn)。

如果大家在使用 Fun 的過(guò)程中遇到了一些問(wèn)題,可以在 github 上提 issue,或者加入我們的釘釘群 11721331 進(jìn)行反饋。


本文標(biāo)題:開發(fā)函數(shù)計(jì)算的正確姿勢(shì)——輕松解決大依賴部署
當(dāng)前URL:http://weahome.cn/article/pddisi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部