成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何落地一個FaaS平臺?

企業動態
函數即服務(FaaS)作為云計算 2.0 時代重要的發展方向,能夠從工程效率、可靠性、性能、成本等方面給開發者帶來巨大的價值,尤其是能夠極大地提升研發效率。

[[336469]]

函數即服務(FaaS)作為云計算 2.0 時代重要的發展方向,能夠從工程效率、可靠性、性能、成本等方面給開發者帶來巨大的價值,尤其是能夠極大地提升研發效率。因此,擁抱FaaS成為開發者關心的重要技術領域。阿里文娛技術專家墨洵、研發工程師武升將介紹文娛函數計算平臺的設計思想與關鍵技術難點,并結合業務介紹函數計算的落地實踐經驗。

一 背景

優酷內容分發業務涵蓋了優酷主客的首頁、頻道頁、二級頁等不同場景下的內容分發,服務端之前采用傳統的Java應用結合阿里集團中間件的開發模式,一直是產品評審、API設計、前后端聯調、前后端發版等節奏。然而,隨著端上內容的多樣化,產品需求迭代的加速,傳統的服務端架構開發模式已顯得力不從心,我們雖然沉淀出一套通用框架,但受限于開發模式的本質并沒有變化,業務開發的靈活性與開發成本依然很高。總結起來,面臨的挑戰主要是:API依賴數據源多,業務需求變化快,前后端聯調成本大等。

隨著Serverless技術的發展,FaaS的相關實踐探索都在阿里內部逐漸多起來,我們思考了FaaS的特點和面臨的挑戰,希望通過FaaS技術的引入,把一系列基礎能力沉淀下來,在此之上,通過FaaS來承接上層業務邏輯,阿里巴巴文娛優酷FaaS平臺應運而生。

二 平臺設計與技術難點

1 設計目標

希望實現一個通用的函數計算平臺,在這個平臺上,開發者直接通過編寫、運行和管理一個或多個函數對外提供服務,允許通過微服務、HTTP接口、事件源觸發等多種方式調用函數。同時,函數的開發及發布應該是秒級生效,且無需重啟宿主應用的,這樣就可以克服傳統Java應用發布部署的時間成本,極大的減輕開發者在代碼開發之外的時間成本,同時可以快速回滾。

FaaS平臺應該提供函數式應用的運行環境,應該支持輕量級腳本語言編寫函數。我們首選Groovy語言,主要是考慮了Groovy的代碼簡潔,同時可以訪問Java的原生的類和對象。

FaaS可以根據實際的訪問情況進行函數實例的動態加載和資源分配。

總結起來,在FaaS平臺上運行的函數應該是一個短小、離散、可復用的代碼塊,我們希望它有以下幾個特點:

  • 生命周期短,支持快速發布部署
  • 非守護進程(不需要長時間運行,按需加載)
  • 不提供長連接服務
  • 無狀態
  • 可重用現有服務或第三方資源(重點,FaaS應該建立在完善的基礎服務上)
  • 毫秒級執行時間

2 平臺整體設計

FaaS平臺的整體核心架構主要由網關、運行時容器、一站式運維發布平臺、基礎服務等組成:

 

網關層主要負責接受函數調用請求,通過函數的唯一標識及函數的集群信息分發函數調用到對應集群的機器環境中執行。

函數容器層是整個系統的核心,主要通過函數執行引擎進行實例的調用執行,同時負責函數實例的生命周期管理,包括按需加載、代碼預熱、實例卸載回收等工作。

一站式發布運維平臺(FaaS Platform)是面向開發者的主要操作平臺,開發者在平臺上進行函數編寫、版本提交發布、回滾、監控運維等一系列工作。整個監控體系打通了集團的基礎服務監控體系,,可以提供實時大盤,集群性能等基本監控指標的查詢功能。

整個FaaS平臺建立在集團中間件以及優酷內容分發依賴的各基礎服務之上,通過良好的封裝向開發者提供簡潔的服務調用方式,同時函數本身的執行都是運行在互相隔離的環境中,通過統一的函數實例管理,進行函數的調度、執行監控、動態管理等。

整體技術棧服務端容器層主要是采用Java實現,結合集團中間件完成整個容器層的主要功能。

前端主要基于React框架和Dva狀態管理框架實現。當然,在實際開發過程中我們選擇了螞蟻金服的Bigfish框架和Odin腳手架。React提供了組件化的概念,這意味著我們開發的組件可以像HTML基本DOM元素一樣不斷被復用。為了實現組件的復用化和研發效率的提升,Bigfish在Web頁面上進行了分層設計,細粒度從大到小依次為:頁面模板 -> 區塊 -> 業務組件 -> 組件。Odin腳手架是優酷推出一款面向中后臺業務系統的前端開發腳手架,集成了Bigfish的框架,支持以配置化的方式構建網站路由,使得開發者不需要關注過多底層細節,可以快速上手實現業務邏輯和頁面構建。

 

類似于服務端側的MVC分層模式,前端在實現業務邏輯和數據通信時也有對應的封層設計模式,來實現組件的狀態管理。經歷了從Flux -> Redux -> Dva的衍變,狀態管理機制對復雜業務帶來的益處正在不變突出。Dva的完整數據流圖如下:

 

State是負責保存整個應用狀態,View是React組件構成的視圖層,Action是描述事件的對象。connect方法是綁定 State 到 View的函數,使得View層的組件可以動態監聽State中的屬性,同時可以通過dispatch方法負責將Action發送至State觸發狀態改變。觸發狀態改變有兩種類型的函數:effect函數和reducer函數。前者會與服務端進行數據通信,可以處理異步動作;后者處理同步動作,并直接更新State。

FaaS Platform前端主要分為函數創建、函數管理、函數發布、函數模板和應用統計五個模塊。在FaaS Platform系統中,函數是對外可被調度的最小單元,而應用是劃分機器資源的最小單位,所以我們設定應用與函數存在一對多的映射關系。

 

函數創建模塊

函數創建模塊主要提供添加函數的功能。一個完整函數必須包括函數名稱、函數標識、函數類型、函數所屬應用及應用下所屬分類等基本信息;同時類似于mtop網關,我們提供對于函數入參、響應業務結果、響應業務錯誤碼的配置頁面,用于自動生成函數調用入參表單和函數接口文檔。函數的英文標識唯一確定一個函數,不可重復。

函數管理模塊

函數管理模塊主要提供函數的CRUD操作和函數的在線編寫功能。在本頁面我們可以快速進行復雜條件的函數查詢和函數基本信息和狀態的編輯。同時我們提供函數編寫的在線Web IDE,支持文件增刪、代碼編寫、自動保存、函數提交、函數調試、日志打印等功能。

函數發布模塊

函數發布模塊主要提供函數提交歷史的查詢和執行函數發布的功能。我們像傳統Java應用支持引入二三方依賴,但不同于傳統的Java應用發布,FaaS Platform系統中的函數發布可以實現秒級發布。目前函數發布已經支持函數回滾發布和函數分批次發布,從部署環節實現對復雜多變業務需求的快速響應。

函數模板模塊

函數模板模塊主要提供函數模板的CRUD操作和函數的在線編寫功能。結合實際的業務場景,我們首先提供一些基礎的內置模板,方便函數的快速初始化。同時對于某一個業務問題的完整解決方案,我們允許該函數保存為自定義的函數模板。函數模板的Web IDE同樣支持函數模板的在線編寫、調試、自動保存等功能。

應用統計模塊

由于函數隸屬于應用從而具備機器資源,我們計劃提供應用統計模塊以應用為拆分進行函數上線狀態、發布版本的數據統計;同時我們也基于函數日志提供函數調用情況(調用量、成功率、響應時間)的統計分析和監控。關于具備的細節,我們正在逐步實現和完善。

3 主要特性

優酷FaaS平臺的主要特性是開發接入低成本、函數運行時環境隔離以及運維監控操作的透明化。

 

開發接入低成本

FaaS平臺通過一站式的云端開發平臺,使用戶可以直接面向業務邏輯的開發,而無需關注基礎服務及中間件的依賴,平臺本身提供完善的基礎能力封裝,包括:快捷開發能力,中間件快速接入能力,數據存儲快速接入能力,基礎能力封裝直接調用等。

業務邏輯開發模式輕量化、無應用化,發布回滾秒級生效,極大的減輕了傳統服務端開發過程的繁瑣流程,將開發者的精力更多的集中于核心業務邏輯的開發。

同時提供如下的簡潔易于操作的開發部署流程設計,減輕開發者開發部署的時間成本。

 

FaaS平臺上的函數除了開發成本低,調用者接入的方式也比較簡單。我們同時提供了中心化和去中心化兩種使用方式,不管去中心化還是中心化使用方式,函數代碼的編寫、調試、發布均在一站式運維發布平臺上完成。在中心化接入方式下,我們通過統一的函數服務集群提供對外服務,允許調用者通過統一的函數調用接口以HSF服務或者HTTP接口調用函數,而函數代碼的執行完全在我們的函數服務集群上,開發者無需自己申請應用。

對于去中心化接入方式,開發者如果想調用函數平臺上的FaaS函數,可以引入我們提供的SDK,此時,函數的執行完全在調用者應用的本地進程里,FaaS平臺只提供函數的開發發布功能。

運行時環境的隔離

運行時環境的隔離分為兩個層次,一個層次是函數容器內部函數實例之間的隔離;另外一個層次是不同函數本身就運行在不同的虛擬應用集群上,集群與集群之間的隔離性。

函數容器內部函數實例的隔離指的是在FaaS平臺上編寫的Groovy函數運行在統一的JVM進程中,每個函數在開發的過程中都會生成多個版本,而不同函數之間、同一函數的不同版本之間在運行時的環境都是相互隔離,互不干擾的。

 

函數運行集群的隔離性主要是根據函數的訪問量、函數的服務特點(長尾服務還是通用服務)等特性,在函數創建之初就將函數綁定在不同的虛擬應用上,而不同的應用會運行在不同的機器集群上,函數在被調用時,網關層可以根據函數的應用將函數的調用分發到不同的集群上執行,保證函數之間物理隔離。

 

運維監控的透明化

FaaS平臺的函數都能在平臺上直接進行監控運維操作,我們通過在函數執行流程上收集函數的執行日志,并將日志實時上報到集團監控服務,可以在平臺上實時監控函數運行。

 

4 技術難點

函數執行引擎設計

函數執行引擎是整個FaaS的核心部分,負責函數實例的加載、預熱、調度執行、卸載等生命周期管理。FaaS的函數目前支持Groovy語言,選擇Groovy主要是由于JVM提供的運行時環境天然支持Groovy語言的運行。FaaS平臺上每個函數都具有一個自己獨立的代碼版本庫,每次提交都將生成遞增的版本,執行引擎加載函數實例時會從版本庫中加載當前最新版本的代碼,通過初始化、預編譯等操作生成函數的實例放到實例池中,由于每個函數都有唯一標識,因此,當調用某個具體的函數時,執行引擎會從實例池中取出對應實例加載執行。整個流程如下圖所示:

 

由于函數實例都存在于同一個JVM進程中,并且不同于服務,函數的粒度更小,因此函數的生命周期需要嚴格控制,不然大量函數加載到內存中,有可能出現內存占用過大的問題。同時兼顧SDK調用方式,防止多個函數常駐內存將宿主應用的內存耗盡。所以目前采用了懶加載機制,按需加載函數實例到內存中,過期自動回收,有助于釋放內存提高內存利用率。

 

每個Groovy函數對應一個Groovy的解釋器環境GroovyEngine,不同的函數之間相互獨立,每個函數在加載到內存的過程中都分別獨立的進行預編譯,初始化等流程,防止不同函數之間相互干擾,同時為二三方JAR包加載提供隔離的環境,防止出現不同函數之間的類加載器相互影響的情況。

 

二三方JAR包加載能力

FaaS平臺提供二三方JAR包的加載能力,允許在不重啟整個底層容器的情況下,加載函數自己的二三方依賴,我們通過實現Groovy二三方JAR包加載能力的Classloader,實現了函數與函數之間、函數不同版本之間的二三方依賴加載能力。FaaS平臺的Classloader體系:

 

三 FaaS平臺的落地探索

結合目前阿里文娛業務的特點,即大多以內容分發為主,以首頁、二級頁等業務來看,內容分發具有運營坑位多、需求變化快、數據源多等特點,傳統的Java服務端開發方式,前后端聯調以及后端開發部署都逐漸成了影響迭代效率的重要瓶頸,以往都是服務端開發在客戶端發版前發布線上,發布耗時長,回滾成本高,因此通過引入FaaS,希望提高服務端開發的靈活性,讓開發者更多的面向業務邏輯而不是花較大量的時間在服務的部署維護上面。

 

優酷內部的內容分發目前主要在統一的內容搭建投放框架之上開發,這套框架是一套流程編排的框架,通過流程編排,從不同數據源獲取內容,通過業務邏輯處理,最終通過模版字段映射輸出API內容。目前FaaS主要應用在數據源及模版字段映射階段。數據源即原始數據接口的封裝,通過數據源獲取實際業務需要的原始數據,比如媒資節目視頻、節目專題數據、用戶關注等業務數據;模版字段映射主要通過編寫Java的函數根據實際業務邏輯生成字段內容。以往的開發模式下,如果業務邏輯有變化,需要變更然后發布Java應用才能生效,采用FaaS開發之后,只需要發布對應的FaaS函數即可,由于FaaS函數的發布是秒級,因此極大的提高了迭代效率。

1 統一的數據源封裝

我們使用FaaS實現數據源接口的封裝,當有新的數據接口需要接入時,直接在FaaS平臺上通過編寫函數實現,可以做到在本地Java應用不發布的情況下,直接上線新數據源。對于新業務接口的快速接入具有重要意義。同時這些數據源可以被重用,因此在多人協作的模式下,通過復用函數實現的數據源極大的減少了重復開發量。

 

2 FaaS函數處理API協議模版字段映射

 

 

我們擴展了搭投框架,通過Faas的SDK,服務端接口的模版解析階段除了能解析普通的Java函數,也可以支持解析FaaS函數,這類函數的代碼不是通過原生Java代碼編寫,而是在Faas平臺上用Groovy代碼編寫而成,這類函數的特點是編寫、更新、發布均不需要重新部署哥倫布業務應用,只需要在Faas平臺上操作函數即可。字段邏輯的修改可以完全不用重啟Java應用,快速應對迭代變更。每個函數都有獨立的生命周期和發布流程,不同函數的發布變更之間相互隔離。當有字段邏輯的變化時,可以完全不重啟本地Java應用,直接通過函數的秒級發布來完成,極大提高了迭代效率。

四 總結與展望

目前優酷內容分發相關業務已經陸續引入FaaS能力,在FaaS的助力下,迭代效率提升。但是平臺整體上還處于剛剛起步階段,也是我們Serverless實踐的初步嘗試。后續我們希望在以下幾個方面繼續探索FaaS平臺的技術與落地:

 

  • 支持更多編程語言的運行時環境,以及更友好的云端IDE開發體驗。
  • 優化函數運行集群的資源調度策略,合理分配函數執行需要的資源,支持動態擴縮容。
  • 結合內容分發業務的特點,尋找更多業務的切入點,通過FaaS進一步提升現有技術架構的靈活性和迭代效率。

 

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2014-03-12 10:00:26

移動開發跨平臺

2022-06-17 11:24:52

漏洞補丁管理策略

2024-07-25 14:52:22

2023-03-13 14:02:31

元宇宙

2022-09-29 15:13:47

健康管理平臺—鴻蒙

2020-03-18 10:45:46

云計算CaaSPaaS

2018-06-23 07:53:31

大數據分析框架數據

2011-12-12 15:52:30

開放平臺

2010-03-15 13:36:11

2009-09-14 09:36:19

Chrome多功能平臺谷歌

2019-04-04 09:11:41

微服務CDPLinkflow

2021-04-26 18:13:37

微服務模式數據庫

2020-09-15 18:46:54

數據平臺Lambda架構

2016-11-17 12:49:36

云運維銀行卡建設

2021-02-22 11:03:25

大數據大數據平臺架構

2021-11-17 09:54:10

代碼開發工具

2010-03-08 17:20:56

搭建私有云

2009-05-27 08:54:15

瀏覽器平臺Chrome

2024-03-06 09:29:13

BEV自動駕駛

2011-08-09 09:06:29

云計算云存儲
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区免费 | 亚洲香蕉在线视频 | 狠狠色综合久久丁香婷婷 | 日韩影音 | 成人欧美一区二区三区黑人孕妇 | 欧美成人免费在线 | 男女下面一进一出网站 | 久久国内精品 | 欧美成人免费在线 | 欧美精品一区在线发布 | 天堂视频中文在线 | 久久久久久久国产 | 一级a爱片性色毛片免费 | 99久久精品国产毛片 | 91免费在线播放 | 久久网站免费视频 | 免费观看的av| 国产精品乱码一区二三区小蝌蚪 | 一区视频| 日日日日操 | 日日夜夜精品视频 | 久久精品欧美一区二区三区不卡 | 在线视频一区二区三区 | 羞羞视频网站免费观看 | 麻豆久久久久久久久久 | 欧美韩一区二区 | 欧美成人免费 | 成年人在线视频 | 超碰欧美 | 韩国精品一区 | 红色av社区 | 久久久久91 | 欧美9999 | 一区二区在线看 | 亚洲三级在线观看 | 精品久久电影 | 国产精品视频999 | 欧美日韩亚洲三区 | 国产精品美女久久久久久免费 | 久久狠狠| 亚洲a视 |