亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種高性能Serverless計(jì)算設(shè)計(jì)

        2022-02-03 07:12:08陳富強(qiáng)
        現(xiàn)代計(jì)算機(jī) 2022年21期
        關(guān)鍵詞:開發(fā)者代碼容器

        陳富強(qiáng)

        (廣州華商學(xué)院數(shù)據(jù)科學(xué)學(xué)院,廣州 510000)

        0 引言

        在傳統(tǒng)開發(fā)模式中,開發(fā)一個(gè)應(yīng)用程序,從開始到上線需要不同的角色來做不同的事情,溝通成本非常大,并且運(yùn)維過程中需要考慮到服務(wù)器的負(fù)載均衡、事務(wù)、集群、緩存、消息傳遞和數(shù)據(jù)冗余等事情。

        云計(jì)算涌現(xiàn)出很多改變傳統(tǒng)IT 架構(gòu)和運(yùn)維方式的新技術(shù),比如虛擬機(jī)、容器、微服務(wù),無論這些技術(shù)應(yīng)用在哪些場景,降低成本、提升效率是云服務(wù)永恒的主題。Serverless 架構(gòu)就是在云計(jì)算背景下產(chǎn)生的,基于Serverless 架構(gòu)后端的應(yīng)用被拆分成為一個(gè)個(gè)函數(shù),只需要編寫完成函數(shù)后部署到Serverless 服務(wù)即可,不用關(guān)心任何服務(wù)器的操作,大大提高了開發(fā)的效率,減少了溝通的成本。

        Serverless 中文的含義是"無服務(wù)器",但是它真正的含義是開發(fā)者再也不用過多考慮服務(wù)器的問題,但是并不代表完全去除服務(wù)器,而是依靠第三方資源服務(wù)器后端,比如使用Ama?zon Web Services(AWS)Lambda 計(jì)算服務(wù)來執(zhí)行代碼。Serverless 架構(gòu)分為Backend as a Service(BaaS)和Functions as a Service(FaaS)[1]兩種技術(shù),Baas 的含義是后端即服務(wù),它的應(yīng)用架構(gòu)由大量第三方云服務(wù)器和API 組成,使用中關(guān)于服務(wù)器的邏輯和狀態(tài)都由服務(wù)提供方來管理。比如典型的單頁應(yīng)用SPA 和移動(dòng)APP 客戶端應(yīng)用,前后端交互主要是以RestAPI 調(diào)用為主。只需要調(diào)用服務(wù)提供方的API 即可完成相應(yīng)的功能,比如常見的身份驗(yàn)證,云端數(shù)據(jù)/文件存儲(chǔ),消息推送,應(yīng)用數(shù)據(jù)分析等。

        FaaS 可以被叫做:函數(shù)即服務(wù)。開發(fā)者可以直接將服務(wù)業(yè)務(wù)邏輯代碼部署、運(yùn)行在第三方提供的無狀態(tài)計(jì)算容器中,開發(fā)者只需要編寫業(yè)務(wù)代碼即可,無需關(guān)注服務(wù)器,并且代碼的執(zhí)行是由事件觸發(fā)的。其中AWS Lambda是目前最佳的FaaS 實(shí)現(xiàn)之一。Serverless 是由開發(fā)者實(shí)現(xiàn)的服務(wù)端邏輯運(yùn)行在無狀態(tài)的計(jì)算容器中,它是由事件觸發(fā),完全被第三方管理。

        Serverless 計(jì)算是一種無需管理服務(wù)器即可構(gòu)建和部署云服務(wù)的方法[2]。與IaaS(基礎(chǔ)設(shè)施即服務(wù))相比,Serverless 計(jì)算提供了更高級(jí)別的抽象,因此有望提供更高的開發(fā)人員生產(chǎn)力和更低的運(yùn)營成本。無服務(wù)器計(jì)算的關(guān)鍵特征包括資源彈性零操作和即用即付。

        最初的云服務(wù)AWS S3(Simple Storage Ser?vice)[3]是無服務(wù)器的,但僅用于存儲(chǔ),實(shí)踐證明很難擴(kuò)展代碼執(zhí)行。IaaS 成為主導(dǎo)的云服務(wù),開發(fā)人員提供虛擬機(jī)(服務(wù)器)來部署應(yīng)用程序。開發(fā)者負(fù)責(zé)規(guī)劃、配置、部署和維護(hù)服務(wù)器,即使是更高級(jí)的PaaS(平臺(tái)即服務(wù)),開發(fā)者也只是獲得了預(yù)裝軟件堆棧的虛擬服務(wù)器,必須根據(jù)分配的資源付費(fèi)(例如CPU 和內(nèi)存),而不是實(shí)際使用情況付費(fèi)。

        近年來,由AWS lambda 首創(chuàng)的新一代云服務(wù)使開發(fā)人員能夠直接基于代碼功能創(chuàng)建Web服務(wù)。開發(fā)人員無需配置或管理服務(wù)器,云提供商在請(qǐng)求到來時(shí)自動(dòng)部署執(zhí)行環(huán)境,并根據(jù)運(yùn)行的需求擴(kuò)展執(zhí)行環(huán)境,這種方法被稱為功能即服務(wù)(FaaS)。行業(yè)報(bào)告表明,F(xiàn)aaS 已經(jīng)受到云計(jì)算用戶的歡迎,并可能成為未來云計(jì)算的主導(dǎo)形式。

        FaaS 的興起得益于虛擬化和容器化技術(shù)的進(jìn)步,這可以讓開發(fā)者以最小的開銷頻繁啟動(dòng)和停止執(zhí)行環(huán)境。領(lǐng)先的公共云提供商使用系統(tǒng)虛擬機(jī)和應(yīng)用程序容器的組合作為FaaS 的基礎(chǔ)設(shè)施。與系統(tǒng)虛擬機(jī)相比,Docker 等應(yīng)用容器更快更輕[2],但安全性相較于虛擬機(jī)要低。

        在當(dāng)前主流的FaaS 應(yīng)用中,AWS Lambda是基于一種名為Firecracker 的輕量級(jí)虛擬化技術(shù)。Firecracker也稱為micro VM,比傳統(tǒng)系統(tǒng)虛擬機(jī)更輕、更快,因此適用于Faas 工作負(fù)載;IBM Cloud 功能利用Docker 容器提供隔離;微軟Azure[4]功能兼容Docker,但部署在公有云時(shí)增加了虛擬機(jī)保護(hù);谷歌云功能采用了一種折衷的方法,其g Visor 引擎主要目的是在公共云中安全運(yùn)行Docker。然而,g Visor 引擎比普通Docker慢2倍。

        即使有那些性能優(yōu)化的系統(tǒng)虛擬機(jī)和應(yīng)用程序容器,F(xiàn)aaS仍然存在性能和擴(kuò)展性問題:

        一是冷啟動(dòng)慢。配置和啟動(dòng)micro VM 或容器可能需要幾秒鐘,其中每個(gè)函數(shù)執(zhí)行都可能需要一個(gè)新的micro VM 或容器,此問題還會(huì)導(dǎo)致不一致的問題和可能出現(xiàn)一些不可預(yù)測的運(yùn)行結(jié)果,因?yàn)楹瘮?shù)的執(zhí)行可能還要比運(yùn)行環(huán)境的啟動(dòng)更快一些。

        其次,虛擬機(jī)或容器必須為每個(gè)函數(shù)調(diào)用設(shè)置一個(gè)運(yùn)行時(shí)軟件堆棧,包括不同操作系統(tǒng)的標(biāo)準(zhǔn)庫。這是一種很大的資源消耗。

        最后,虛擬機(jī)或容器只能測量粗粒度的資源消耗,例如使用的分配內(nèi)存和執(zhí)行時(shí)間。而它們不支持基于準(zhǔn)確CPU 執(zhí)行周期的細(xì)粒度使用計(jì)費(fèi)。

        在本文中,將討論一種不依賴于虛擬機(jī)和容器的FaaS方法。

        1 Serverless

        Serverless 中文的含義是"無服務(wù)器",但是它真正的含義是開發(fā)者再也不用過多考慮服務(wù)器的問題[1],但是并不代表完全去除服務(wù)器,而是依靠第三方資源服務(wù)器后端。

        在現(xiàn)階段,Serverless 主要應(yīng)用在以下幾個(gè)場景:在Web 及移動(dòng)端服務(wù)中,可以整合API網(wǎng)關(guān)和Serverles 服務(wù)構(gòu)建Web 及移動(dòng)后端,幫助開發(fā)者構(gòu)建可彈性擴(kuò)展、高可用的移動(dòng)或Web 后端應(yīng)用服務(wù);在IoT 場景下可高效地處理實(shí)時(shí)流數(shù)據(jù),由設(shè)備產(chǎn)生海量的實(shí)時(shí)信息流數(shù)據(jù),通過Serverles 服務(wù)分類處理并寫入后端處理。另外在實(shí)時(shí)媒體資訊內(nèi)容處理場景里,用戶上傳的音視頻到對(duì)象存儲(chǔ)OBS,通過上傳事件觸發(fā)多個(gè)函數(shù),分別完成高清轉(zhuǎn)碼、音頻轉(zhuǎn)碼等功能,滿足用戶對(duì)實(shí)時(shí)性和并發(fā)能力的高要求。無服務(wù)器計(jì)算還適合于任何事件驅(qū)動(dòng)的各種不同的用例,這包括物聯(lián)網(wǎng)、移動(dòng)應(yīng)用,基于網(wǎng)絡(luò)的應(yīng)用程序和聊天機(jī)器人等。

        場景一:應(yīng)用負(fù)載有顯著的波峰波谷

        Serverless 應(yīng)用成功與否的評(píng)判標(biāo)準(zhǔn)并不是公司規(guī)模的大小,而是其業(yè)務(wù)背后的具體技術(shù)問題,比如業(yè)務(wù)波峰波谷明顯,如何實(shí)現(xiàn)削峰填谷。一個(gè)公司的業(yè)務(wù)負(fù)載具有波峰波谷時(shí),機(jī)器資源要按照峰值需求預(yù)估;而在波谷時(shí)期機(jī)器利用率則明顯下降,這是因?yàn)椴荒苓M(jìn)行資源復(fù)用而導(dǎo)致的浪費(fèi)。

        業(yè)界普遍共識(shí)是,當(dāng)自有機(jī)器的利用率小于30%,使用Serverless后會(huì)有顯著的效率提升。對(duì)于云服務(wù)廠商,在具備了足夠多的用戶之后,各種波峰波谷疊加后平穩(wěn)化,聚合之后資源復(fù)用性更高。比如,外賣企業(yè)負(fù)載高峰是在用餐時(shí)期,安防行業(yè)的負(fù)載高峰則是夜間,這是受各個(gè)企業(yè)業(yè)務(wù)定位所限的;而對(duì)于一個(gè)成熟的云服務(wù)廠商,如果其平臺(tái)足夠大,用戶足夠多,是不應(yīng)該有明顯的波峰波谷現(xiàn)象的。

        場景二:典型用例-基于事件的數(shù)據(jù)處理

        視頻處理的后端系統(tǒng),常見功能需求如下:視頻轉(zhuǎn)碼、抽取數(shù)據(jù)、人臉識(shí)別等,這些均為通用計(jì)算任務(wù),可由函數(shù)計(jì)算執(zhí)行。

        開發(fā)者需要自己寫出實(shí)現(xiàn)邏輯,再將任務(wù)按照控制流連接起來,每個(gè)任務(wù)的具體執(zhí)行由云廠商來負(fù)責(zé)。如此,開發(fā)變得更便捷,并且構(gòu)建的系統(tǒng)天然高可用、實(shí)時(shí)彈性伸縮,用戶不需要關(guān)心機(jī)器層面問題。

        對(duì)于企業(yè)來說,支持Serverless 計(jì)算的平臺(tái)可以節(jié)省大量時(shí)間和成本,同時(shí)可以減輕員工負(fù)擔(dān),讓開發(fā)者得以開展更有價(jià)值的工作。另一方面可以提高敏捷度,更快速地推出新應(yīng)用和新服務(wù),進(jìn)而提高客戶滿意度。

        但是Serverless 對(duì)應(yīng)用來說不是完美的,存在以下問題:

        (1)不適合長時(shí)間運(yùn)行應(yīng)用

        Serverless 只有在請(qǐng)求到來時(shí)才運(yùn)行。當(dāng)應(yīng)用不運(yùn)行時(shí)就會(huì)進(jìn)入“休眠狀態(tài)”,下次當(dāng)請(qǐng)求來臨時(shí),應(yīng)用將會(huì)需要一個(gè)啟動(dòng)時(shí)間,即冷啟動(dòng)時(shí)間。如果應(yīng)用需要一直長期不間斷的運(yùn)行、處理大量的請(qǐng)求,那么可能就不適合采用Serverless 架構(gòu)。如果通過CRON 的方式或者CloudWatch 來定期喚醒應(yīng)用,又會(huì)比較消耗資源。這就需要對(duì)Serverless 架構(gòu)做優(yōu)化,如果頻繁調(diào)用,這個(gè)資源將會(huì)常駐內(nèi)存,第一次冷啟動(dòng)之后,就可以一直服務(wù),直到一段時(shí)間內(nèi)沒有新的調(diào)用請(qǐng)求進(jìn)來,才會(huì)轉(zhuǎn)入“休眠”狀態(tài),甚至被回收,從而不消耗任何資源。

        (2)完全依賴于第三方服務(wù)

        當(dāng)企業(yè)云環(huán)境已經(jīng)有大量的基礎(chǔ)設(shè)施時(shí),Serverless 對(duì)于應(yīng)用來說并不是一個(gè)好的解決方案。當(dāng)采用某云服務(wù)廠商的Serverless 架構(gòu)時(shí),應(yīng)用就和該服務(wù)供應(yīng)商綁定了,那么再將服務(wù)遷到別的云服務(wù)商上就沒有那么容易。因此項(xiàng)目需要修改一下系列的底層代碼,而能采取的應(yīng)對(duì)方案,便是建立隔離層。建立隔離層意味著在設(shè)計(jì)應(yīng)用的時(shí)候,就需要隔離API 網(wǎng)關(guān)、隔離數(shù)據(jù)庫層,市面上還沒有成熟的ORM 工具,既支持Firebase,又支持DynamoDB 等,這些也將帶來一些額外的成本,可能帶來的問題會(huì)比解決的問題多。

        (3)缺乏調(diào)試和開發(fā)工具

        每次當(dāng)項(xiàng)目需要調(diào)試時(shí),需要一遍又一遍地上傳代碼。每次上傳的時(shí)候,像是在部署服務(wù)器,并不能總是快速地定位出問題在哪。針對(duì)這個(gè)問題,項(xiàng)目可以使用一個(gè)類似于log4j 的可以分級(jí)別記錄日志的Node.js 庫winston??芍С謊rror、warn、info、verbose、debug、silly 六個(gè)不同級(jí)別的日志,再結(jié)合大數(shù)據(jù)進(jìn)行日志分析過濾,快速定位問題。

        (4)構(gòu)建復(fù)雜

        Serverless 很便宜,但構(gòu)建起來并不簡單。AWS Lambda 的Cloud Formation 配置非常復(fù)雜且難以實(shí)現(xiàn)及編寫(JSON 格式),雖然Cloud For?mation提供了Template模板,但想要在項(xiàng)目中使用的話,需要?jiǎng)?chuàng)建一個(gè)規(guī)定的Stack,在Stack中指定要使用的模板Template,然后AWS 才會(huì)按照Template中的定義來創(chuàng)建及初始化資源。

        而Serverless Framework 的配置相對(duì)簡單,采用的是YAML 格式。在部署的時(shí)候,Server?less Framework 會(huì)根據(jù)配置生成Cloud Formation配置。然而這也并非是一個(gè)真正用于生產(chǎn)的配置,真實(shí)的應(yīng)用場景遠(yuǎn)遠(yuǎn)比這復(fù)雜。

        2 WebAssembly簡介

        WebAssembly(縮寫為wasm)是一種使用非JavaScript代碼,并使其在瀏覽器中運(yùn)行的方法。這些代碼可以是C、C++或Rust 等。它們會(huì)被編譯進(jìn)瀏覽器,在CPU 上以接近原生的速度運(yùn)行。這些代碼的形式是二進(jìn)制文件,可以直接在JavaScript 中將它們當(dāng)作模塊來用。WebAs?sembly 不能替代Javascript,相反,這兩種技術(shù)是相輔相成的。通過JavaScriptAPI,可以將WebAssembly 模塊加載到頁面中。也就是說,可以通過WebAssembly 來充分利用編譯代碼的性能,同時(shí)保持JavaScript 的靈活性。WebAs?sembly 的使用場景遠(yuǎn)不止于適用于Web 瀏覽器,還適用于各種需要提升運(yùn)行性能的場景。此外,WebAssembly 不是編程語言,而是一種中間格式,叫字節(jié)碼,可以作為其他語言的編譯目標(biāo)。

        WebAssembly 是一種新的字節(jié)碼格式,主流瀏覽器都已經(jīng)支持WebAssembly。和JS 需要解釋執(zhí)行不同的是,WebAssembly 字節(jié)碼和底層機(jī)器碼很相似,可快速裝載運(yùn)行,因此性能相對(duì)于JS 解釋執(zhí)行大大提升。換言之,WebAs?sembly 并不是一門編程語言,而是一份字節(jié)碼標(biāo)準(zhǔn),需要用高級(jí)編程語言編譯出字節(jié)碼放到WebAssembly虛擬機(jī)中才能運(yùn)行。

        盡管WebAssembly 是為運(yùn)行在Web 上設(shè)計(jì)的,但它也可以在其它的環(huán)境中良好地運(yùn)行。包括從用作測試的最小化shell,到完整的應(yīng)用環(huán)境——例如:在數(shù)據(jù)中心的服務(wù)器、物聯(lián)網(wǎng)(IoT)設(shè)備或者是移動(dòng)桌面應(yīng)用程序。甚至,運(yùn)行嵌入在較大程序里也是可行的。

        非Web 環(huán)境下,它有和Web 環(huán)境下不同的應(yīng)用編程接口(API)。功能測試(feature testing)和動(dòng)態(tài)鏈接(dynamic linking)會(huì)使其可自發(fā)現(xiàn)、易于使用。非Web 環(huán)境可能包括JavaScript 虛擬機(jī)(例如node.js)。但是,WebAssembly也被設(shè)計(jì)為能夠在沒有JavaScript虛擬機(jī)的情況下運(yùn)行。

        WebAssembly 標(biāo)準(zhǔn)本身不會(huì)嘗試定義任何大型可移植的類庫。然而,作為WebAssembly語義核心庫中的函數(shù)的某些功能,將以原始操作符(primitive operators)的身份,成為核心WebAs?sembly 標(biāo)準(zhǔn)的一部分。對(duì)于在Web 和流行的非Web 環(huán)境之間存在重疊的地方,將會(huì)有共享的規(guī)范。

        為了保證多數(shù)情況下可運(yùn)行性,源碼級(jí)別的可移植性。開源社區(qū)將會(huì)構(gòu)建從源碼級(jí)別的接口,映射到主機(jī)環(huán)境內(nèi)置功能的庫(在運(yùn)行時(shí)或構(gòu)建時(shí))。WebAssembly 會(huì)提供原始構(gòu)建塊:包括功能測試(featuretesting)、內(nèi)建模塊(built?ingmodules)以及動(dòng)態(tài)加載(dynamicloading)。早期已經(jīng)應(yīng)用WebAssembly 構(gòu)建功能庫的例子是POSIX 和SDL。因?yàn)閃ebAssembly 支持C/C++級(jí)語義,不需要WebAPI 的非Web 路徑,WebAs?sembly 能夠在許多平臺(tái)上用作便攜式的二進(jìn)制格式,為移植性、工具和語言無關(guān)性提供了很強(qiáng)的便利性。

        3 基于WebAssembly的設(shè)計(jì)方法

        Serverless FaaS 必須為用戶提交和不受信任的代碼提供安全和隔離的執(zhí)行環(huán)境。本文提出基于Webassembly 設(shè)計(jì)是FaaS 的一種更輕、更快的替代方案。與系統(tǒng)虛擬機(jī)和Docker 容器不同,WebAssembly 是一種字節(jié)碼格式,可以將高級(jí)語言編譯成機(jī)器語言。

        WebAssembly 最初是為了提高Web 瀏覽器內(nèi)的JavaScript 性能。由于它原本設(shè)計(jì)成執(zhí)行從Web 下載的代碼,出于安全考慮,WebAssembly運(yùn)行的過程中為不受信任的代碼提供了基于軟件的故障隔離(SFI)沙箱。

        WebAssembly 支持多種編程語言,例如C/C++和Rust。WebAssembly 系統(tǒng)接口標(biāo)準(zhǔn)允許WebAssembly 運(yùn)行時(shí)與操作系統(tǒng)資源接口,這使其適用于服務(wù)器端應(yīng)用程序。WebAssembly可以安全地運(yùn)行,并且可以在不同的底層平臺(tái)上按需啟動(dòng)和停止這些功能,而無需更改任何代碼。由于WebAssembly 在操作碼級(jí)別提供抽象,因此它可以在運(yùn)行時(shí)精確測量細(xì)粒度的資源消耗。

        WebAssembly 相對(duì)于系統(tǒng)虛擬機(jī)、micro VM和Docker 容器的最重要優(yōu)勢是性能較好和占用空間較小。一些云提供商,例如Fastly 和Cloud?flare,已經(jīng)在其邊緣網(wǎng)絡(luò)上提供基于WebAssem?bly的FaaS服務(wù)。在本研究中,以Docker容器為基準(zhǔn)評(píng)估WebAssembly 運(yùn)行時(shí)的性能,之所以選擇Docker 作為基準(zhǔn)比較,是因?yàn)镈ocker 代表了非WebAssembly的FaaS服務(wù)的最佳性能。

        WebAssembly 在FaaS 中相對(duì) 于Docker 的性能優(yōu)勢已在文獻(xiàn)[5]中有所記載。本文研究有幾個(gè)明顯的差異,即本研究不是對(duì)集成用例進(jìn)行計(jì)時(shí),而是評(píng)估標(biāo)準(zhǔn)性能基準(zhǔn),例如多線程效率或磁盤I/O。此外,還使用不同的優(yōu)化策略評(píng)估了WebAssembly運(yùn)行性能。

        4 結(jié)果比較

        本文在兩個(gè)大型云平臺(tái)阿里云ECS 和騰訊云CVM 上進(jìn)行了實(shí)驗(yàn)。兩臺(tái)主機(jī)上都運(yùn)行Ubuntu linux 20.04tls。硬件配置如下:

        ECS:Intel cpu 2.30GHz with 8 cores and 32 GB of RAM;

        CVM:Intel cpu 2.50GHz with 4 cores and 16 GB of RAM。

        評(píng)估以下運(yùn)行環(huán)境:

        最新的穩(wěn)定版docker 版本v19.03.8。一個(gè)Ubuntu linux18.04 的Docker 鏡像用于啟動(dòng)docker容器。

        V8,V8.1.307,是google 開發(fā)的WebAssem?bly 運(yùn)行時(shí)環(huán)境,它被預(yù)裝在許多網(wǎng)絡(luò)瀏覽器中。

        WAVM,nightly/2020-05-28,是由Andrew Scheidecke 領(lǐng)導(dǎo)的一項(xiàng)協(xié)作項(xiàng)目,旨在支持瀏覽器之外的WebAssembly。

        對(duì)于每個(gè)測試機(jī)器和運(yùn)行時(shí)組合,運(yùn)行了以下基準(zhǔn)測試。每個(gè)測試50 次,并取完成時(shí)間的平均值和標(biāo)準(zhǔn)偏差。源代碼和說明在GitHub上公開提供[6]。

        (1)nop 測試,啟動(dòng)運(yùn)行時(shí)環(huán)境并退出。該測試評(píng)估冷啟動(dòng)性能。

        (2)cat-sync 測試打開一個(gè)本地文件進(jìn)行讀取并退出。它評(píng)估進(jìn)行操作系統(tǒng)調(diào)用的性能。

        (3)CLBG 測試,以下3 個(gè)測試標(biāo)準(zhǔn)來自Computer Languages Benchmarks Game[7],該測試為超過25 種編程語言提供眾包基準(zhǔn)程序,每個(gè)測試均計(jì)算運(yùn)行時(shí)間:

        fannkuch-redux,重復(fù)12次,測量索引訪問到一個(gè)整數(shù)序列。

        mandelbrot,重復(fù)15000 次,就是生成Man?delbrot集可移植位圖文件。

        binary-tree,重復(fù)21 次,分配和釋放大量二叉樹。

        所有基準(zhǔn)測試都是用C 編寫的。對(duì)于Docker 測試,測試源代碼由llvmv 10.0.0 工具鏈編譯為本機(jī)二進(jìn)制文件。對(duì)于WebAssembly 測試,使用Emscripten SDK v1.39.17 將源代碼編譯為WebAssembly字節(jié)碼。

        圖1 顯示了nop 測試WebAssembly 冷啟動(dòng)的執(zhí)行時(shí)間,結(jié)果至少比Docker 快10 倍。WebAs?sembly 和V8 的啟動(dòng)時(shí)間都不到docker 啟動(dòng)時(shí)間的1/500。

        圖1 冷啟動(dòng)時(shí)間

        圖2 顯示了cat-sync 測試的執(zhí)行時(shí)間結(jié)果,WebAssembly 運(yùn)行時(shí)至少比Docker 快10 倍。其中WebAssembly 表現(xiàn)出最好的性能。Docker 打開文件所需的時(shí)間是WebAssembly 的10 到15倍。

        圖2 打開和讀取文件時(shí)間

        表1 顯示了3 個(gè)計(jì)算基準(zhǔn)的執(zhí)行時(shí)間結(jié)果。WebAssembly運(yùn)行時(shí)比docker快10%到50%。

        表1 基準(zhǔn)測試執(zhí)行時(shí)間 單位:秒

        除了執(zhí)行時(shí)間性能優(yōu)勢之外,WebAssembly的占用空間也比Docker小得多,Ubuntu 18.04的docker 映像為188 MB。一般來說,Webassembly運(yùn)行時(shí)是FaaS的完整Docker鏡像大小的1/10。

        5 挑戰(zhàn)和討論

        雖然WebAssembly 運(yùn)行時(shí)在基準(zhǔn)測試中的表現(xiàn)優(yōu)于Docker,但也存在許多可能阻礙其應(yīng)用的挑戰(zhàn)。

        首先,WebAssembly 上的編程語言支持是有限的。雖然LLVM 工具鏈理論上支持從20 多種語言生成Webassembly 字節(jié)碼,但在實(shí)踐中只有少數(shù)幾種語言得到很好的支持。目前,C/C++、Rust 和Assembly Script 是支持WebAs?sembly 的最好的編程語言,這意味著開發(fā)人員如果需要使用基于WebAssembly 的FaaS 服務(wù),就需要用這些語言編寫相應(yīng)的函數(shù),來執(zhí)行需要的結(jié)果[8]。

        其次,與容器docker 和微型虛擬機(jī)相比,WebAssembly 具有不同的模型來訪操作系統(tǒng)。WebAssembly 可以訪問一些系統(tǒng)特性,例如網(wǎng)絡(luò)和多線程管理,因?yàn)閃ebAssembly 對(duì)這些資源的訪問受高級(jí)安全策略的約束(即基于能力的安全性),所以可以兼具高性能和安全性。在本研究中,除了簡單的文件操作之外,并沒有評(píng)估WebAssembly 運(yùn)行時(shí)的性能。多線程I/O 是當(dāng)前應(yīng)用程序的一個(gè)重要方面,隨著相關(guān)Webas?sembly規(guī)范的成熟,多線程I/O將是未來研究的主題[9]。

        最后,目前沒有針對(duì)WebAssembly 運(yùn)行時(shí)的行業(yè)標(biāo)準(zhǔn)管理和編排工具。大多數(shù)使用自主開發(fā)的解決方案來按需啟動(dòng)和停止WebAssem?bly 運(yùn)行時(shí)環(huán)境。未來預(yù)計(jì)隨著WebAssembly 使用率的增加,此類編排管理工具將會(huì)出現(xiàn)。

        猜你喜歡
        開發(fā)者代碼容器
        Different Containers不同的容器
        難以置信的事情
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        16%游戲開發(fā)者看好VR
        CHIP新電腦(2016年3期)2016-03-10 13:06:42
        取米
        iOS開發(fā)者調(diào)查
        電腦迷(2015年8期)2015-05-30 12:27:10
        iOS開發(fā)者調(diào)查
        電腦迷(2015年4期)2015-05-30 05:24:09
        337p日本欧洲亚洲大胆精品| 精品国产车一区二区三区| 国产乱子伦一区二区三区国色天香| 日本一本免费一二区| 熟妇高潮一区二区三区| 无码片久久久天堂中文字幕| 手机在线观看亚洲av| 亚洲av久播在线一区二区| 卡一卡二卡三无人区| 国产成人无码精品久久99| 久久婷婷色香五月综合激激情| 蜜桃视频网站在线观看一区| 一本无码av中文出轨人妻| 激情婷婷六月| 亚洲中文有码一区二区| 日本女优在线一区二区三区| 久久99精品国产麻豆宅宅| 国产精品久久久久尤物| 亚洲福利网站在线一区不卡| 欧美激情乱人伦| 亚洲精华国产精华液的福利| 久久精品国产亚洲av大全相关| 黄页免费人成网址大全| 无码毛片内射白浆视频| 日日躁夜夜躁狠狠久久av| 伊人狠狠色j香婷婷综合| 亚洲视频在线观看第一页| 少妇愉情理伦片| 日本动态120秒免费| 久久久亚洲日本精品一区| 变态另类人妖一区二区三区| 幻女bbwxxxx在线视频| 亚洲一级电影在线观看| 日本女u久久精品视频| 亚洲精品一区二区三区麻豆| 精品女同一区二区三区不卡| 中文字幕漂亮人妻在线| 美女免费视频观看网址| 人妻夜夜爽天天爽三区| 手机看片福利盒子久久青| 蜜桃视频成年人在线观看|