自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

騰訊云無(wú)服務(wù)器云函數(shù)架構(gòu)精解

云計(jì)算
繼虛擬機(jī),容器技術(shù),無(wú)服務(wù)器化成為新的行業(yè)熱點(diǎn),無(wú)服務(wù)器云函數(shù)可以讓用戶無(wú)需關(guān)心服務(wù)器的部署運(yùn)營(yíng),只需開發(fā)最核心的業(yè)務(wù)邏輯,即可實(shí)現(xiàn)上線運(yùn)營(yíng),具備分布容災(zāi)能力,可依據(jù)負(fù)載自動(dòng)擴(kuò)縮容,按照實(shí)際調(diào)用次數(shù)與時(shí)長(zhǎng)計(jì)費(fèi)。本次主要分享騰訊云無(wú)服務(wù)器云函數(shù)在技術(shù)實(shí)現(xiàn)上的挑戰(zhàn)及架構(gòu)實(shí)現(xiàn)原理。

繼虛擬機(jī),容器技術(shù),無(wú)服務(wù)器化成為新的行業(yè)熱點(diǎn),無(wú)服務(wù)器云函數(shù)可以讓用戶無(wú)需關(guān)心服務(wù)器的部署運(yùn)營(yíng),只需開發(fā)最核心的業(yè)務(wù)邏輯,即可實(shí)現(xiàn)上線運(yùn)營(yíng),具備分布容災(zāi)能力,可依據(jù)負(fù)載自動(dòng)擴(kuò)縮容,按照實(shí)際調(diào)用次數(shù)與時(shí)長(zhǎng)計(jì)費(fèi)。本次主要分享騰訊云無(wú)服務(wù)器云函數(shù)在技術(shù)實(shí)現(xiàn)上的挑戰(zhàn)及架構(gòu)實(shí)現(xiàn)原理。

主要從以下四個(gè)方面來(lái)分享一下無(wú)服務(wù)器云函數(shù):

  1. 云函數(shù)的價(jià)值及使用場(chǎng)景
  2. 云函數(shù)架構(gòu)原理
  3. 云函數(shù)關(guān)鍵技術(shù)點(diǎn)
  4. 云函數(shù)行業(yè)進(jìn)展趨勢(shì)

無(wú)服務(wù)器云函數(shù)(Serverless Cloud Function)是騰訊云提供的無(wú)服務(wù)器(serverless)執(zhí)行環(huán)境,幫助用戶在沒(méi)有購(gòu)買和管理服務(wù)器時(shí)仍能運(yùn)行代碼。用戶只需要使用云平臺(tái)支持的語(yǔ)言編寫核心代碼及設(shè)置代碼運(yùn)行的條件,代碼即可在騰訊云基礎(chǔ)設(shè)施上彈性、安全地運(yùn)行,并可完全管理底層計(jì)算資源,包括服務(wù)器CPU、內(nèi)存、網(wǎng)絡(luò)、代碼部署、彈性伸縮、負(fù)載均衡等服務(wù)。

使用無(wú)服務(wù)器云函數(shù)將可免除所有運(yùn)維性操作,企業(yè)和開發(fā)者可以更加專注于核心業(yè)務(wù)的開發(fā),實(shí)現(xiàn)快速上線和迭代,把握業(yè)務(wù)發(fā)展的節(jié)奏。

一、云函數(shù)的價(jià)值及使用場(chǎng)景

隨著云計(jì)算服務(wù)市場(chǎng)的成熟,用戶對(duì)云計(jì)算接受程度逐漸提高,借助各類基礎(chǔ)云組件,將業(yè)務(wù)上線時(shí)間從月級(jí)縮短到天級(jí),但對(duì)比傳統(tǒng)模式,用戶仍需基于云組件重構(gòu)非功能性需求。

云函數(shù)嘗試將業(yè)務(wù)算法和流程提煉出來(lái)交由用戶實(shí)現(xiàn),打通各種云服務(wù),并實(shí)現(xiàn)通用的負(fù)載均衡、自動(dòng)伸縮、故障容災(zāi)、安全監(jiān)管等通用功能,真正使得用戶像搭積木一樣打造個(gè)性化服務(wù),將業(yè)務(wù)上線時(shí)間從天級(jí)縮短到分鐘級(jí)。

騰訊云無(wú)服務(wù)器云函數(shù)架構(gòu)精解

相比云主機(jī),云函數(shù)更適合于支持微服務(wù)架構(gòu)業(yè)務(wù)場(chǎng)景。以圖片多規(guī)格壓縮服務(wù)為例,該服務(wù)在用戶上傳圖片至COS時(shí),自動(dòng)將原始圖片壓縮成適配手機(jī)、平板、電腦等多種大小的規(guī)格。如利用云函數(shù)實(shí)現(xiàn)該服務(wù),用戶只需創(chuàng)建函數(shù),定義函數(shù)觸發(fā)條件為“圖片上傳”,在線編輯或使用IDE完成代碼編寫后上傳,服務(wù)即構(gòu)建完成。用戶上傳圖片時(shí),自動(dòng)調(diào)用定義的函數(shù)完成圖片的多規(guī)格壓縮,云函數(shù)平臺(tái)根據(jù)上傳并發(fā)量自動(dòng)擴(kuò)縮容函數(shù)實(shí)例,并最終按照實(shí)際調(diào)用消耗計(jì)費(fèi)。

騰訊云無(wú)服務(wù)器云函數(shù)架構(gòu)精解

從該示例可以看出,云函數(shù)為用戶帶來(lái)的主要價(jià)值為:

  • 加快用戶服務(wù)上線時(shí)間,用戶只需實(shí)現(xiàn)業(yè)務(wù)算法及流程,上線時(shí)間縮短為分鐘級(jí);
  • 減少用戶的運(yùn)營(yíng)負(fù)擔(dān),用戶無(wú)須承擔(dān)服務(wù)擴(kuò)容,故障恢復(fù)運(yùn)維工作;
  • 消除用戶的資源成本,用戶無(wú)需承擔(dān)資源閑置費(fèi)用,只為實(shí)際調(diào)用消耗付費(fèi)

二、云函數(shù)架構(gòu)原理

云函數(shù)平臺(tái)整體架構(gòu)原理如圖所示。

騰訊云無(wú)服務(wù)器云函數(shù)架構(gòu)精解

云函數(shù)為用戶提供SDK/WEBUI兩種使用方式,并通過(guò)事件注冊(cè)與回調(diào)機(jī)制與其它云組件打通,提供標(biāo)準(zhǔn)的API接口;調(diào)用分發(fā)根據(jù)函數(shù)所屬的區(qū)域,用戶,名字,版本號(hào),鑒權(quán)等信息申請(qǐng)函數(shù)實(shí)例,并將調(diào)用均勻的分發(fā)到可用函數(shù)實(shí)例;函數(shù)管理負(fù)責(zé)創(chuàng)建/修改/刪除函數(shù),并提供函數(shù)代碼管理,版本管理等功能;函數(shù)調(diào)度根據(jù)函數(shù)資源需求選擇合適的位置創(chuàng)建/銷毀函數(shù)實(shí)例;函數(shù)實(shí)例部署用戶定義的函數(shù),負(fù)責(zé)函數(shù)的執(zhí)行及監(jiān)管。

從云函數(shù)的定位及架構(gòu)原理看,衡量云函數(shù)平臺(tái)的關(guān)鍵技術(shù)指標(biāo)可概括為:

  • 不僅支持業(yè)務(wù)快速上線,且能實(shí)現(xiàn)持續(xù)發(fā)展;
  • 不僅支持業(yè)務(wù)按需取用,且能釋放閑置資源;
  • 不僅支持業(yè)務(wù)永不中斷,且能擴(kuò)展運(yùn)行范圍;
  • 不僅支持業(yè)務(wù)自由運(yùn)行,且能避免干擾入侵;

下文將展開詳述。

三、支持業(yè)務(wù)快速上線,且能實(shí)現(xiàn)持續(xù)發(fā)展

支持業(yè)務(wù)分鐘級(jí)上線,需要盡可能的減少用戶研發(fā)工作量,云函數(shù)用戶僅需提供簡(jiǎn)單的函數(shù)配置及代碼即可完成上線。以圖片壓縮為例,用戶自行編輯python代碼如下,即可實(shí)現(xiàn)一個(gè)圖片壓縮服務(wù):

騰訊云無(wú)服務(wù)器云函數(shù)架構(gòu)精解

其中第1行引入依賴庫(kù),第4~9行解析輸入?yún)?shù),第11行調(diào)用庫(kù)完成圖片壓縮,12~15行判斷結(jié)果及返回。用戶可在線完成代碼的編輯并提交,也可像開發(fā)本地程序一樣使用喜歡的IDE編輯,調(diào)試通過(guò)后打成zip包通過(guò)SDK提交,提交成功服務(wù)即上線。

支持業(yè)務(wù)可持續(xù)發(fā)展,需提供用戶函數(shù)平滑升級(jí)及版本變更能力,當(dāng)用戶更新函數(shù)代碼或配置后,新調(diào)用請(qǐng)求被分發(fā)至新函數(shù)實(shí)例,原調(diào)用請(qǐng)求執(zhí)行完成后,舊函數(shù)實(shí)例自動(dòng)消亡,服務(wù)在客戶不感知情況下平滑更新。即將支持用戶函數(shù)多版本管理,將函數(shù)別名映射至用戶指定版本,在客戶不感知情況下實(shí)現(xiàn)多版本間平滑切換。

騰訊云無(wú)服務(wù)器云函數(shù)架構(gòu)精解

函數(shù)運(yùn)行過(guò)程中間,用戶打印日志,標(biāo)準(zhǔn)輸出/錯(cuò)誤輸出日志分類上傳至騰訊云日志服務(wù)平臺(tái),用戶可實(shí)時(shí)監(jiān)控函數(shù)運(yùn)行情況。

四、支持業(yè)務(wù)按需取用,且能釋放閑置資源

要支持云函數(shù)真正按需取用,需實(shí)現(xiàn)用戶第一次調(diào)用時(shí)延遲分配資源,函數(shù)調(diào)用過(guò)程如下圖所示:

騰訊云無(wú)服務(wù)器云函數(shù)架構(gòu)精解

云函數(shù)平臺(tái)在調(diào)用分發(fā)時(shí),會(huì)判斷是否有函數(shù)實(shí)例存在,如若不存在,則實(shí)時(shí)啟動(dòng)實(shí)例,實(shí)例啟動(dòng)完成后,才開始執(zhí)行函數(shù)調(diào)用。為了達(dá)到第一次調(diào)用足夠快的目標(biāo),在調(diào)用過(guò)程中需分階段逐層優(yōu)化:

  • 分發(fā)調(diào)用階段:需減少調(diào)用分發(fā)層級(jí),比如對(duì)于用戶主動(dòng)發(fā)起的http同步調(diào)用,正常路徑可免去存入持久化隊(duì)列過(guò)程;
  • 鏡像及代碼下載階段:需盡量預(yù)部署以減少下載時(shí)間,比如對(duì)新提交函數(shù),并行啟動(dòng)預(yù)加載,使得第一次調(diào)用發(fā)起時(shí)無(wú)須再去實(shí)時(shí)下載;
  • 容器啟動(dòng)過(guò)程:需簡(jiǎn)化容器啟動(dòng)腳本,使得啟動(dòng)過(guò)程盡量輕量,對(duì)于對(duì)延時(shí)敏感的業(yè)務(wù),提供實(shí)例預(yù)留機(jī)制,用戶可選擇預(yù)留少量實(shí)例以減少第一次調(diào)用的額外延時(shí);
  • 執(zhí)行函數(shù)調(diào)用:需盡量減少函數(shù)參數(shù),返回?cái)?shù)據(jù)及日志傳遞導(dǎo)致的內(nèi)存拷貝次數(shù);
  • 返回調(diào)用:需盡量減少返回層級(jí);

通過(guò)逐層優(yōu)化,第一次調(diào)用平臺(tái)耗時(shí)可控制在2s左右,后續(xù)調(diào)用平臺(tái)耗時(shí)控制在5ms左右。隨著客戶請(qǐng)求量的增加或減少,函數(shù)實(shí)例隨著自動(dòng)擴(kuò)縮容,一般算法如下:

  • If 當(dāng)前請(qǐng)求數(shù)/當(dāng)前實(shí)例數(shù) > 擴(kuò)容閾值:擴(kuò)容實(shí)例
  • else 當(dāng)前請(qǐng)求數(shù)/當(dāng)前實(shí)例數(shù) < 縮容閾值:縮容實(shí)例

當(dāng)縮容至最后一個(gè)函數(shù)實(shí)例時(shí),為避免函數(shù)實(shí)例短時(shí)間內(nèi)重復(fù)啟動(dòng)/停止導(dǎo)致客戶調(diào)用延時(shí)增加,需保留一段時(shí)間延遲釋放。

五、支持業(yè)務(wù)永不中斷,且能擴(kuò)展運(yùn)行范圍

要支持云函數(shù)永不中斷,需實(shí)現(xiàn)2個(gè)容災(zāi)目標(biāo):

  • 硬件故障時(shí)服務(wù)不中斷
  • 平臺(tái)升級(jí)時(shí)服務(wù)不中斷

為實(shí)現(xiàn)這三個(gè)容災(zāi)目標(biāo),整體架構(gòu)需實(shí)現(xiàn)set化,且在各層均需對(duì)應(yīng)的支持:

  • 接入層:基于騰訊云CLB實(shí)現(xiàn)橫向擴(kuò)展,負(fù)載均衡,7層路由能力;
  • 邏輯層:實(shí)現(xiàn)模塊無(wú)狀態(tài)化,模塊內(nèi)部無(wú)狀態(tài)數(shù)據(jù),可隨意啟停替換;
  • 數(shù)據(jù)層:采用一致性存儲(chǔ)倉(cāng)庫(kù)存儲(chǔ)關(guān)鍵數(shù)據(jù);
  • 節(jié)點(diǎn)層:實(shí)現(xiàn)快速節(jié)點(diǎn)故障檢測(cè)及替換恢復(fù)。

比如平臺(tái)內(nèi)部Invoker模塊實(shí)例硬件故障時(shí),如下圖所示,由于invoker模塊無(wú)狀態(tài),故障時(shí)可由接入層CLB模塊自動(dòng)剔除,剔除后新請(qǐng)求分發(fā)至剩余invoker模塊實(shí)例,已接收的異步事件可由其它invoker重試完成,同步http調(diào)用會(huì)直接返回給用戶錯(cuò)誤請(qǐng)求,由用戶重試,在故障invoker實(shí)例恢復(fù)后,自動(dòng)添加至CLB中,繼續(xù)分擔(dān)負(fù)載。

騰訊云無(wú)服務(wù)器云函數(shù)架構(gòu)精解

當(dāng)平臺(tái)需要升級(jí)API接口時(shí),采用只增不改策略,提供新版本API接口,保持用戶原有服務(wù)兼容性,用戶采用新接口時(shí),CLB通過(guò)7層路由,路由至新版本invoker模塊實(shí)例,舊版本實(shí)例隨著負(fù)載的降低逐步縮容,新版本實(shí)例隨著負(fù)載升高逐步擴(kuò)容,以此實(shí)現(xiàn)了用戶透明的版本平滑升級(jí)。

騰訊云無(wú)服務(wù)器云函數(shù)架構(gòu)精解

要實(shí)現(xiàn)云函數(shù)需與各類云組件打通,需要云組件提供事件注冊(cè)及回調(diào)機(jī)制,云組件提供可注冊(cè)事件及對(duì)應(yīng)的回調(diào)接口,云函數(shù)確保云組件通信的用戶權(quán)限打通傳遞。當(dāng)前云函數(shù)實(shí)現(xiàn)了與騰訊云COS存儲(chǔ)組件的打通,馬上將實(shí)現(xiàn)與騰訊云CMQ、云監(jiān)控等其它云產(chǎn)品的打通,并將運(yùn)行范圍擴(kuò)展至CDN節(jié)點(diǎn)及IOT設(shè)備網(wǎng)關(guān),實(shí)現(xiàn)邊緣計(jì)算。

六、支持業(yè)務(wù)自由運(yùn)行,且能避免干擾入侵

云函數(shù)需支持用戶本地測(cè)試通過(guò)的代碼無(wú)縫在云函數(shù)平臺(tái),需具備足夠的兼容性,及用戶函數(shù)運(yùn)行時(shí)環(huán)境,需要具備和用戶開發(fā)測(cè)試環(huán)境類似的軟件包,安全等配置;同時(shí)避免函數(shù)間干擾,防止惡意入侵。

為了避免用戶函數(shù)間干擾,云函數(shù)使用了Docker容器來(lái)封裝函數(shù)實(shí)例,通過(guò)docker的名字隔離、空間隔離、權(quán)限限制等機(jī)制實(shí)現(xiàn)用戶間隔離,輔以實(shí)時(shí)沖突監(jiān)控調(diào)度等措施及時(shí)處理干擾。

為了避免用戶執(zhí)行代碼影響整個(gè)云函數(shù)平臺(tái),如下圖所示,實(shí)現(xiàn)了云函數(shù)管理平臺(tái)與用戶函數(shù)的隔離,用戶函數(shù)無(wú)法感知管理平臺(tái)的網(wǎng)絡(luò)地址,運(yùn)行日志等信息,從而無(wú)從影響云函數(shù)平臺(tái)的運(yùn)行。

騰訊云無(wú)服務(wù)器云函數(shù)架構(gòu)精解

為了避免用戶惡意代碼對(duì)網(wǎng)絡(luò)的探測(cè)和入侵,如下圖所示,用戶函數(shù)實(shí)例被限制到了受限的公共VPC網(wǎng)絡(luò),需通過(guò)網(wǎng)關(guān)實(shí)現(xiàn)與外網(wǎng)服務(wù)、其它函數(shù)實(shí)例、云組件的互訪,同時(shí),為了支持用戶函數(shù)實(shí)例與個(gè)人CVM虛擬機(jī)的集成,云函數(shù)平臺(tái)通過(guò)彈性網(wǎng)卡打通了與其私有VPC的網(wǎng)絡(luò)通信。

騰訊云無(wú)服務(wù)器云函數(shù)架構(gòu)精解

七、云函數(shù)行業(yè)進(jìn)展趨勢(shì)

近年Serverles、微服務(wù)等理念逐步深入人心,云函數(shù)開始被用戶了解接受。為了滿足用戶對(duì)于更快速上線、更低成本、更優(yōu)架構(gòu)的求索,騰訊云推出了云函數(shù)產(chǎn)品。用戶不妨從解決實(shí)際問(wèn)題開始試用云函數(shù),比如實(shí)現(xiàn)一個(gè)簡(jiǎn)單的服務(wù)撥測(cè)工具,實(shí)現(xiàn)一個(gè)定時(shí)任務(wù),實(shí)現(xiàn)存儲(chǔ)于COS的圖片、視頻、文件的計(jì)算等。。隨著云函數(shù)可聯(lián)動(dòng)云組件的拓展,支持語(yǔ)言的豐富,調(diào)試工具,流程引擎等逐步完善,云函數(shù)會(huì)逐步成為整個(gè)云平臺(tái)的粘合劑,將各種云組件融合一起,讓云成為你的公共后臺(tái),到時(shí)可支持更為復(fù)雜的狀態(tài)服務(wù)場(chǎng)景,成為用戶通用體貼厚實(shí)的后盾。

歡迎試用騰訊云無(wú)服務(wù)器云函數(shù)產(chǎn)品,云函數(shù)解決安全接入、故障容災(zāi)、自動(dòng)伸縮、成本優(yōu)化、版本管理等后臺(tái)通用問(wèn)題,用戶可更省心專注的投入到業(yè)務(wù)創(chuàng)新。希望通過(guò)云函數(shù)能更深入的開放騰訊多年在海量服務(wù)耕耘修煉的能力,共享給廣大用戶使用,與大家一起成長(zhǎng)。

Q&A

Q:請(qǐng)問(wèn)代碼怎么部署到docker中?

A:直接將代碼下載至母機(jī),再將代碼目錄掛載至Docker

Q:云函數(shù)是通用的 還是只能在云平臺(tái)運(yùn)行?

A:云提供了云函數(shù)服務(wù),自己也可搭建,目前github上有不少開源云函數(shù)平臺(tái),比如openlambda,iron.io等,建議直接使用云的服務(wù),因?yàn)榭梢院投鄠€(gè)云產(chǎn)品打通,單靠云函數(shù)自身難以構(gòu)建完整服務(wù)。

Q:事件傳遞使用的是隊(duì)列嗎?

A:異步事件用了CMQ消息隊(duì)列持久化存儲(chǔ),同步事件未使用

Q:請(qǐng)問(wèn)云函數(shù)對(duì)開發(fā)語(yǔ)言有限制否?如果有,目前對(duì)Go語(yǔ)言的支持如何?

A:目前支持python 2.7/3.6, node.js 4.3/6.10, Java8,如果有通用的用戶需求,可以支持其它語(yǔ)言,比如php,go等

Q:有系統(tǒng)函數(shù)調(diào)用嗎?自定義函數(shù)的顆粒度有何建議?

A:絕大部分的系統(tǒng)調(diào)用都可調(diào)用,除了一些危險(xiǎn)操作,比如關(guān)機(jī),重啟,網(wǎng)絡(luò)服務(wù)監(jiān)聽等,函數(shù)顆粒度可參考微服務(wù)的設(shè)計(jì)原則,將功能盡量拆細(xì)

Q:可落地嗎?

A:已有不少用戶案例,后續(xù)會(huì)做些分享,不妨親自試試,當(dāng)前是免費(fèi)的,會(huì)一直提供免費(fèi)包,有需求直接給我們提

Q:云函數(shù)支持kotlin語(yǔ)言嗎?

A:之前沒(méi)用戶反饋需要這種語(yǔ)言的支持,不過(guò)我個(gè)人挺看好,會(huì)持續(xù)保持關(guān)注

Q:請(qǐng)問(wèn)將請(qǐng)求調(diào)度函數(shù)實(shí)例,這個(gè)調(diào)度算法的實(shí)現(xiàn)?

A:其實(shí)這里就是通用的負(fù)載均衡和擴(kuò)縮容算法,這里比較復(fù)雜的是提前預(yù)測(cè)需要擴(kuò)容,后續(xù)會(huì)詳細(xì)分享。

Q:能介紹下 將請(qǐng)求調(diào)度到函數(shù)實(shí)例的實(shí)現(xiàn)嗎?

A:這里有個(gè)invoker模塊對(duì)每個(gè)函數(shù)維持有一個(gè)請(qǐng)求隊(duì)列,目前沒(méi)設(shè)置優(yōu)先級(jí),按照先來(lái)先到的順序依次調(diào)度,調(diào)度時(shí)會(huì)從函數(shù)所有可用的函數(shù)實(shí)例中,選擇一個(gè)下發(fā)。函數(shù)實(shí)例里有個(gè)循環(huán)接受請(qǐng)求,收到時(shí)傳遞參數(shù)調(diào)用用戶函數(shù)。

Q:代碼可以下云落地嗎?

A:代碼里一般會(huì)涉及其它云產(chǎn)品的調(diào)用,所以一般對(duì)云平臺(tái)有一些依賴,可以關(guān)注下開源的serverless框架,在公有云云函數(shù)上封裝了一層,用來(lái)解除依賴,實(shí)現(xiàn)在各個(gè)云平臺(tái)的平滑遷移。

Q:云函數(shù)的代碼有哪些限制?比如什么樣的函數(shù)不可以調(diào)用,什么樣的庫(kù)不能import?

A:可以基本認(rèn)為無(wú)限制,但會(huì)禁止惡意行為,比如關(guān)機(jī),重啟,端口掃描等;也會(huì)禁止端口監(jiān)聽,因?yàn)槌qv進(jìn)程不符合云函數(shù)按需啟用的原則。如果預(yù)裝庫(kù)不符合要求,可以自行將依賴庫(kù)打包至zip里上傳。

Q:下層的容器編排是基于什么做的?k8s么?

A:基于騰訊云的容器平臺(tái),其底層是K8S

分享人:陳杰,騰訊云架構(gòu)平臺(tái)部技術(shù)專家,10年云計(jì)算經(jīng)驗(yàn),現(xiàn)供職于騰訊架構(gòu)平臺(tái)部,負(fù)責(zé)彈性計(jì)算及云函數(shù)技術(shù)研發(fā),致力于提供領(lǐng)先的基礎(chǔ)設(shè)施平臺(tái)以提升資源利用率及優(yōu)化提升程序員開發(fā)運(yùn)維效率。

責(zé)任編輯:未麗燕 來(lái)源: DockOne
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)