無服務(wù)計算(Serverless Computing)核心知識

Serverless Computing概念

????云原生計算基金會CNCF(Cloud Native Computing Foundation, CNCF)Serverless Whitepaper v1.0對無服務(wù)器計算作了如下定義:

Serverless computing refers to the concept of building and running applications that do not require server management. It describes a finer-grained deployment model where applications, bundled as one or more functions, are uploaded to a platform and then executed, scaled, and billed in response to the exact demand needed at the moment.

????無服務(wù)器計算(Serverless Computing)是指在構(gòu)建和運行應(yīng)用時無需管理服務(wù)器等基礎(chǔ)設(shè)施玖雁。它描述了一個更細(xì)粒度的部署模型蜒谤,在該模型中肪康,應(yīng)用被拆解為一個或多個細(xì)粒度的函數(shù)被上傳到一個平臺,然后根據(jù)當(dāng)前所需執(zhí)行场航、擴(kuò)展和計費。

????無服務(wù)器計算并不意味著我們不再使用服務(wù)器來承載和運行代碼,也不意味著不再需要運維工程師禀横。而是指無服務(wù)器計算的消費者不再需要花費時間和資源在服務(wù)器配置们陆、維護(hù)寒瓦、更新、擴(kuò)展和容量規(guī)劃上坪仇。所有這些任務(wù)和功能都由無服務(wù)器平臺處理杂腰,并且完全從開發(fā)人員和IT/操作團(tuán)隊中抽象出來。因此椅文,開發(fā)人員專注于編寫應(yīng)用程序的業(yè)務(wù)邏輯喂很。運營工程師能夠?qū)⑺麄兊闹攸c提升到更關(guān)鍵的業(yè)務(wù)任務(wù)上。?


FaaS & BaaS

無服務(wù)器計算平臺可以提供以下一種或兩種服務(wù):

1. FaaS(Functions-as-a-Service-函數(shù)即服務(wù))皆刺,通常提供事件驅(qū)動(event-driving)的計算少辣。開發(fā)人員使用由事件(event)或HTTP請求觸發(fā)的函數(shù)運行和管理應(yīng)用程序代碼。開發(fā)人員將小的代碼單元部署到FaaS羡蛾,F(xiàn)aaS按需執(zhí)行和擴(kuò)展毒坛,開發(fā)人員無需管理服務(wù)器或任何其他底層基礎(chǔ)設(shè)施。

2. Baas(Backend-as-a-Service后端即服務(wù)),是第三方基于API的服務(wù)煎殷,用于替換應(yīng)用程序中的核心功能子集屯伞。因為這些API是作為一個自動擴(kuò)縮容和透明操作的服務(wù)提供的,所以開發(fā)人員認(rèn)為這是無服務(wù)器的 豪直,如:OSS


Pros & Cons

無服務(wù)器計算(Serverless Computing)應(yīng)用利弊大致如下:

Pros:

1. 0服務(wù)器操作劣摇。無服務(wù)器通過消除維護(hù)服務(wù)器資源所涉及的開銷,極大地改變了運行軟件應(yīng)用程序的成本模型弓乙。

2. 沒有配置末融、更新和管理服務(wù)器基礎(chǔ)結(jié)構(gòu)。

3. 彈性伸縮:無服務(wù)器FaaS或BaaS產(chǎn)品可以立即精確地伸縮以處理每個單獨的傳入請求暇韧。對于開發(fā)人員來說勾习,無服務(wù)器平臺沒有“預(yù)先計劃的容量”的概念,也不需要配置“自動伸縮”觸發(fā)器或規(guī)則懈玻。在沒有開發(fā)人員干預(yù)的情況下巧婶,自動進(jìn)行縮放。在完成請求處理后涂乌,無服務(wù)器FaaS會自動縮小計算資源的規(guī)模艺栈,以確保永遠(yuǎn)沒有空閑的容量。

4. 低成本湾盒。無服務(wù)器計算服務(wù)對空閑的虛擬機(jī)或容器不收費湿右;也就是說當(dāng)代碼沒有運行或沒有進(jìn)行有意義的工作時,不收費罚勾。?

Cons:

1. 作為一種新興的計算模型毅人、缺乏標(biāo)準(zhǔn)化和生態(tài)系統(tǒng)成熟度。

2. 由于運行時更具動態(tài)性尖殃,與iaas和paas相比堰塌,調(diào)試可能更具挑戰(zhàn)性。

3. 由于按需結(jié)構(gòu)分衫,如果運行時在空閑時刪除函數(shù)的所有實例场刑,則某些無服務(wù)器運行時的“冷啟動”方面可能是性能問題。

4. 在更復(fù)雜的情況下(例如蚪战,觸發(fā)其他功能的功能)牵现,對于相同數(shù)量的邏輯,可以有更多的操作表面積邀桑。


Serverless處理模型(Serverless Processing Model)

CNCF白皮書對于無服務(wù)器框架中的函數(shù)用法瞎疼,函數(shù)約束、生命周期壁畸、調(diào)用類型和所需的抽象等定義了規(guī)范贼急,以便同一個函數(shù)可以一次性編碼茅茂,并在不同的無服務(wù)器框架中使用。?


FaaS解決方案概括為具有以下圖中所示的幾個關(guān)鍵元素:

1. 事件源(Event sources)-觸發(fā)器或流事件到一個或多個函數(shù)實例中

2. 函數(shù)實例(Function instances)-單個函數(shù)/微服務(wù)太抓,可根據(jù)需求進(jìn)行擴(kuò)展

3. FaaS控制器(FaaS Controller)-部署空闲、控制和監(jiān)視函數(shù)實例及其源

4. 平臺服務(wù)(Platform services?)-FaaS解決方案使用的通用集群或云服務(wù)(有時稱為后端即服務(wù)-BaaS)


CNCF函數(shù)相關(guān)規(guī)范

函數(shù)定義(Function Definition)

無服務(wù)器函數(shù)定義可以包含以下規(guī)范和元數(shù)據(jù),函數(shù)定義是特定于版本的:

1. 唯一ID

2. 名字

3. 描述

4. 標(biāo)簽

5. 版本ID(和/或版本別名)

6. 版本創(chuàng)建時間

7. 上次修改時間(函數(shù)定義的)

8. 函數(shù)處理程序

9. 運行時語言

10. 代碼+依賴項或代碼路徑和憑據(jù)

11. 環(huán)境變量

12. 執(zhí)行角色和密鑰

13. 資源(所需的CPU走敌、內(nèi)存)

14. 執(zhí)行超時時間

15. 日志失敳昵恪(死信隊列)

16. 網(wǎng)絡(luò)策略/vpc

17. 數(shù)據(jù)綁定(Metadata Binding)

元數(shù)據(jù)詳細(xì)信息(Metadata details)

1. 版本(Version)-每個函數(shù)版本都應(yīng)該有一個唯一的標(biāo)識符,此外掉丽,可以使用一個或多個別名(例如“最新”跌榔、“生產(chǎn)”、“測試版”)標(biāo)記版本捶障。API網(wǎng)關(guān)和事件源將流量/事件路由到特定的函數(shù)版本僧须。

2. 環(huán)境變量(Environment Variables)-用戶可以指定將在運行時提供給函數(shù)的環(huán)境變量。環(huán)境變量也可以從機(jī)密和加密內(nèi)容派生项炼,或者從平臺變量派生(例如担平,kubernetes envvar定義)。環(huán)境變量使開發(fā)人員能夠控制函數(shù)行為和參數(shù)芥挣,而無需修改代碼和/或重建函數(shù)驱闷,從而獲得更好的開發(fā)人員體驗和函數(shù)重用耻台。

3. 執(zhí)行角色(Execution Role)-該函數(shù)應(yīng)在特定的用戶或角色標(biāo)識下運行空免,該標(biāo)識授予并審核其對平臺資源的訪問權(quán)限。

4. 資源(Resources)-定義功能所需的或最大的硬件資源盆耽,如內(nèi)存和CPU蹋砚。

5. 超時(Timeout)-指定函數(shù)調(diào)用在被平臺終止之前可以運行的最長時間。

6. 失敗日志(死信隊列)(Failure Log (Dead Letter Queue))-隊列或流的路徑摄杂,用于存儲失敗的函數(shù)執(zhí)行列表坝咐,并提供適當(dāng)?shù)脑敿?xì)信息。

7. 網(wǎng)絡(luò)策略(Network Policy)-分配給功能的網(wǎng)絡(luò)域和策略(用于與外部服務(wù)/資源通信的功能)析恢。

8. 執(zhí)行語義(Execution Semantics)-指定應(yīng)如何執(zhí)行函數(shù)(例如墨坚,每個事件至少執(zhí)行一次、至多執(zhí)行一次映挂、完全執(zhí)行一次)泽篮。

數(shù)據(jù)綁定(Data Bindings)

????一些無服務(wù)器框架允許用戶指定函數(shù)使用的輸入/輸出數(shù)據(jù)資源,這使開發(fā)人員能夠簡化柑船、提高性能(在執(zhí)行之間保留數(shù)據(jù)連接帽撑,可以預(yù)取數(shù)據(jù)等)和更好的安全性(數(shù)據(jù)資源憑據(jù)是上下文的一部分,而不是代碼)鞍时。

????綁定數(shù)據(jù)可以是文件亏拉、對象扣蜻、記錄、消息等形式及塘,函數(shù)規(guī)范可以包括一組數(shù)據(jù)綁定定義莽使,每個定義指定數(shù)據(jù)資源、其憑證和使用參數(shù)磷蛹。數(shù)據(jù)綁定可以引用事件數(shù)據(jù)(例如吮旅,db鍵是從事件“用戶名”字段派生的),示例:https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings


函數(shù)約束(Function Requirements)

函數(shù)和無服務(wù)器運行時應(yīng)該滿足的通用需求:

1. 函數(shù)必須與不同事件類的基礎(chǔ)實現(xiàn)分離

2. 可以從多個事件源調(diào)用函數(shù)

3. 每個調(diào)用方法不需要不同的函數(shù)

4. 事件源可以調(diào)用多個函數(shù)

5. 函數(shù)可能需要與底層平臺服務(wù)進(jìn)行持久綁定的機(jī)制味咳,這可能是跨函數(shù)調(diào)用庇勃。函數(shù)可能是短暫的,但如果需要在每次調(diào)用(例如在日志記錄槽驶、連接和裝載外部數(shù)據(jù)源的情況下)上都進(jìn)行引導(dǎo)责嚷,則引導(dǎo)可能會很昂貴。

6. 每個函數(shù)可以用不同于同一應(yīng)用程序中使用的其他函數(shù)的代碼語言編寫掂铐。

7. 函數(shù)運行時應(yīng)盡可能減少事件序列化和反序列化開銷(例如罕拂,使用本機(jī)語言結(jié)構(gòu)或有效的編碼方案)


函數(shù)調(diào)用類型(Function Invocation Types)

根據(jù)不同的用例,可以從不同的事件源調(diào)用函數(shù)全陨,例如:

1. 同步請求(Synchronous Request (Req/Rep))爆班,例如http請求、grpc調(diào)用

????- 客戶機(jī)發(fā)出請求并等待立即響應(yīng)辱姨。這是一個阻塞呼叫柿菩。

2. 異步消息隊列請求(pub/sub)(Asynchronous Message Queue Request),例如RabbitMQ, AWS SNS, MQTT, Email, Object (S3) change雨涛、計劃事件(如cron作業(yè))

????- 消息發(fā)布到交換并分發(fā)到訂閱服務(wù)器

? ? - 沒有嚴(yán)格的消息順序枢舶, 可一次處理

3. 消息/記錄流(Message/Record Streams):Kafka, AWS Kinesis, AWS DynamoDB Streams, Database CDC

? ? - 一組有序的消息/記錄(必須按順序處理)

? ? - 通常,一個流被分割到多個分區(qū)/碎片(partitions/shards?)替久,每個碎片有一個worker(碎片使用者)

? ? - 流可以從消息凉泄、數(shù)據(jù)庫更新(日志)或文件(例如csv、json蚯根、parquet)生成后众。

? ? - 事件可以推送到函數(shù)運行時,也可以由函數(shù)運行時拉取颅拦。

4. 批處理作業(yè)(Batch Jobs)蒂誉,例如ETL作業(yè)、分布式深度學(xué)習(xí)矩距、HPC模擬

? ? - 作業(yè)(Jobs)被調(diào)度或提交到隊列拗盒,并在運行時使用多個并行函數(shù)實例進(jìn)行處理,每個實例處理工作集(任務(wù))的一個或多個部分锥债。

? ? - 當(dāng)所有并行工作人員成功完成所有計算任務(wù)時陡蝇,作業(yè)完成痊臭。


?

函數(shù)生命周期(Function LifeCycle)

函數(shù)部署管道(Function Deployment Pipeline)


函數(shù)生命周期:

1. 編寫代碼、提供規(guī)范和元數(shù)據(jù)

2. 獲取代碼和規(guī)范登夫,編譯并將其轉(zhuǎn)化為一個工件(二進(jìn)制代碼广匙、包或容器鏡像)

3. 工件部署到一個集群上,控制器實體負(fù)責(zé)根據(jù)事件流量和/或?qū)嵗系呢?fù)載調(diào)整函數(shù)實例的數(shù)量恼策。


函數(shù)操作(Function Operations)

無服務(wù)器框架可能允許以下操作和方法定義和控制功能生命周期:

1. 創(chuàng)建(Create)-創(chuàng)建一個新函數(shù)鸦致,包括其規(guī)范和代碼

2. 發(fā)布(Publish)-創(chuàng)建可部署在群集上的函數(shù)的新版本

3. 更新別名/標(biāo)簽(Update Alias/Label [of a version])-更新版本別名

4. 執(zhí)行/調(diào)用(Execute/Invoke)-不通過事件源調(diào)用特定版本

5. 事件源關(guān)聯(lián)(Event Source association?)-將函數(shù)的特定版本連接到事件源

6. 獲取(Get)-返回函數(shù)元數(shù)據(jù)和規(guī)范

7. 更新(Update)-修改函數(shù)的最新版本

8. 刪除(Delete)-刪除一個函數(shù)涣楷,可以刪除一個特定的版本或函數(shù)的所有版本

9. 清單(List)-顯示函數(shù)及其元數(shù)據(jù)的列表

10. 狀態(tài)獲确滞佟(get stats)-返回有關(guān)函數(shù)運行時使用情況的統(tǒng)計信息

11. 日志獲取(get logs)-返回函數(shù)生成的日志


關(guān)鍵步驟說明:

1. Create:在創(chuàng)建函數(shù)時狮斗,提供其元數(shù)據(jù)(稍后在函數(shù)規(guī)范中描述)作為函數(shù)創(chuàng)建的一部分绽乔,將對其進(jìn)行編譯并可能發(fā)布。稍后可以啟動碳褒、禁用和啟用功能折砸。功能部署需要能夠支持以下用例:

????- 事件流(Event streaming),在這種情況下沙峻,隊列中可能總是有事件睦授,但是可能需要通過顯式請求暫停/恢復(fù)處理。

? ? - 熱啟動(Warm startup)-在任何時候具有最少實例數(shù)的函數(shù)摔寨,例如去枷,接收到的“第一個”事件具有熱啟動,因為該函數(shù)已經(jīng)部署并準(zhǔn)備好服務(wù)于該事件(而不是在“傳入”事件第一次調(diào)用時部署該函數(shù)的冷啟動)祷肯。

2. Publish:用戶可以發(fā)布一個函數(shù)沉填,這將創(chuàng)建一個新版本(最新版本的副本)疗隶,發(fā)布的版本可能會被標(biāo)記/標(biāo)記或有別名佑笋,請參閱下面的詳細(xì)信息。

3. 用戶可能希望為調(diào)試和開發(fā)過程直接執(zhí)行/調(diào)用函數(shù)(繞過事件源或API網(wǎng)關(guān))斑鼻。用戶可以指定調(diào)用參數(shù)蒋纬,如所需版本、同步/異步操作坚弱、詳細(xì)級別等蜀备。

4. 用戶可能希望獲得函數(shù)統(tǒng)計信息(例如調(diào)用次數(shù)、平均運行時間荒叶、平均延遲碾阁、失敗、重試次數(shù)等)些楣,統(tǒng)計信息可以是當(dāng)前度量值或一系列值(例如存儲在Prometheus或云提供程序設(shè)施(如AWS Cloud Watch))脂凶。

5. 用戶可能希望檢索函數(shù)日志數(shù)據(jù)宪睹。這可以根據(jù)嚴(yán)重性級別和/或時間范圍和/或內(nèi)容進(jìn)行篩選。日志數(shù)據(jù)是每個函數(shù)的蚕钦,它包括諸如函數(shù)創(chuàng)建和刪除亭病、顯式錯誤、警告或調(diào)試消息等事件嘶居,還可以選擇函數(shù)的stdout或stderr罪帖。每次調(diào)用最好有一個日志條目,或者一種將日志條目與特定調(diào)用關(guān)聯(lián)的方法(以便更簡單地跟蹤函數(shù)執(zhí)行流)邮屁。


事件源(Event Source)

不同類型的事件源包括:

1. 事件和消息服務(wù)整袁,例如:?RabbitMQ, MQTT, SES, SNS, Google Pub/Sub

2. 存儲服務(wù),例如:S3, DynamoDB, Kinesis, Cognito, Google Cloud Storage, Azure Blob, iguazio V3IO (object/stream/DB)

3. 端點服務(wù)佑吝,例如:物聯(lián)網(wǎng)(IoT)葬项、HTTP網(wǎng)關(guān)(HTTP Gateway)、移動設(shè)備迹蛤、Alexa民珍、Google Cloud Endpoints

4. 配置存儲庫,例如:Git, CodeCommit

5. 使用特定于語言的sdk的用戶應(yīng)用程序

6. 定時事件-允許定期調(diào)用函數(shù)盗飒。


事件源到函數(shù)的關(guān)聯(lián)(Event Source to Function Association)

函數(shù)是由事件源觸發(fā)的事件調(diào)用的嚷量。函數(shù)和事件源之間有一個n:m映射。每個事件源可以用來調(diào)用多個函數(shù)逆趣,一個函數(shù)可以由多個事件源觸發(fā)蝶溶。事件源可以映射到函數(shù)的特定版本或函數(shù)的別名,后者提供了更改函數(shù)的方法宣渗,并部署了一個新版本抖所,而不需要更改事件關(guān)聯(lián)。事件源也可以定義為使用同一函數(shù)的不同版本痕囱,定義應(yīng)為每個函數(shù)分配多少流量田轧。

在創(chuàng)建了一個函數(shù)之后,或者在以后的某個時間點鞍恢,需要將事件源關(guān)聯(lián)起來傻粘,該事件源應(yīng)該作為該事件的結(jié)果觸發(fā)函數(shù)調(diào)用。這需要一組操作和方法帮掉,例如:

1. 創(chuàng)建事件源關(guān)聯(lián)

2. 更新事件源關(guān)聯(lián)

3. 列出事件源關(guān)聯(lián)


函數(shù)輸入(Function Input)

函數(shù)輸入包括事件數(shù)據(jù)(event data)和元數(shù)據(jù)(metadata)弦悉,并且可以包括一個上下文對象(context object)。


事件數(shù)據(jù)和元數(shù)據(jù)(Event data and metadata)

事件詳細(xì)信息應(yīng)傳遞給函數(shù)處理程序蟆炊,不同的事件可能具有不同的元數(shù)據(jù)稽莉,因此函數(shù)需要能夠確定事件的類型并輕松解析通用和特定于事件的元數(shù)據(jù)。

將事件類與實現(xiàn)分離是可取的涩搓,例如:處理消息流的函數(shù)將工作相同污秆,而不管流存儲是Kafka還是Kinesis后室。在這兩種情況下,它都將接收消息體和事件元數(shù)據(jù)混狠,消息可以在不同的框架之間路由岸霹。

事件可以包括單個記錄(例如,在請求/響應(yīng)模型中)将饺,或者接受多個記錄或微批(例如贡避,在流模式中)。

FaaS解決方案使用的常見事件數(shù)據(jù)和元數(shù)據(jù)示例:

- 事件類別

-?版本

-?事件ID

-?事件來源/來源

-?源識別

-?內(nèi)容類型

-?消息體

-?時間戳

事件/記錄特定元數(shù)據(jù)的示例:

-?HTTP: 路徑予弧、方法刮吧、頭、查詢參數(shù)

-?Message Queue:消息隊列:主題掖蛤,標(biāo)題

-?記錄流(Record Stream):表杀捻、鍵、op蚓庭、修改時間致讥、舊字段、新字段

事件源結(jié)構(gòu)示例:

-?AWS Lambda:http://docs.aws.amazon.com/lambda/latest/dg/eventsources.html

-?Microsoft Azure?Functions:https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings

-?Google?Cloud Functions:https://cloud.google.com/functions/docs/concepts/events-triggers

有些實現(xiàn)將JSON作為向函數(shù)傳遞事件信息的機(jī)制來關(guān)注器赞。這可能會增加高速函數(shù)(例如流處理)或低能耗設(shè)備(IOT)的大量序列化/反序列化開銷垢袱。在這些情況下,將本機(jī)語言結(jié)構(gòu)或其他序列化機(jī)制視為選項可能是值得的港柜。


函數(shù)上下文(Function Context)

當(dāng)調(diào)用函數(shù)時请契,框架可能希望提供對跨多個函數(shù)調(diào)用的平臺資源或常規(guī)屬性的訪問,而不是將所有靜態(tài)數(shù)據(jù)放在事件中夏醉,或強(qiáng)制函數(shù)在每次調(diào)用時初始化平臺服務(wù)爽锥。

上下文作為一組輸入屬性、環(huán)境變量或全局變量傳遞畔柔。有些實現(xiàn)使用這三種方法的組合氯夷。

上下文示例:

-?函數(shù)名、版本释树、ARN

-?存儲限制(Memory Limit)

-?請求ID(Request ID)

-?云區(qū)(Cloud Region)

-?環(huán)境變量(Environment Variables)

-?安全密鑰/令牌(Security keys/tokens)

-?運行時/bin路徑(Runtime/Bin paths)

-?日志(Log )

-?數(shù)據(jù)綁定(Data binding)

一些實現(xiàn)使用日志對象初始化日志對象(例如肠槽,作為AWS中的全局變量或Azure中的部分上下文)擎淤,用戶可以使用集成平臺工具跟蹤函數(shù)執(zhí)行奢啥。除了傳統(tǒng)的日志記錄之外,未來的實現(xiàn)可能會將計數(shù)器/監(jiān)視和跟蹤活動抽象為平臺上下文的一部分嘴拢,以進(jìn)一步提高功能的可用性桩盲。

數(shù)據(jù)綁定作為函數(shù)上下文的一部分,平臺根據(jù)用戶配置啟動到外部數(shù)據(jù)資源的連接席吴,這些連接可以在多個函數(shù)調(diào)用中重用赌结。


函數(shù)輸出(Function Output)

當(dāng)函數(shù)退出時捞蛋,它可以:

-?向調(diào)用者返回一個值(例如,在HTTP請求/響應(yīng)示例中)

-?將結(jié)果傳遞到工作流中的下一個執(zhí)行階段

-?將輸出寫入日志

應(yīng)該有一種確定的方法來知道函數(shù)是否通過返回的錯誤值或退出代碼成功或失敗柬姚。

函數(shù)輸出可以是結(jié)構(gòu)化的(如HTTP響應(yīng)對象)或非結(jié)構(gòu)化的(如某些輸出字符串)拟杉。


無服務(wù)器函數(shù)工作流(Serverless Function Workflow)

在無服務(wù)器域中,用例(Use Case)屬于以下類別之一:

-?一個事件觸發(fā)一個函數(shù)

-?事件的和/或組合觸發(fā)一個函數(shù)

-?一個事件觸發(fā)順序或并行執(zhí)行的多個函數(shù)

-?函數(shù)的結(jié)果可能是另一個函數(shù)的觸發(fā)器

-?n個事件(i n和/或)觸發(fā)m個函數(shù)量承,即事件函數(shù)交錯的工作流搬设,如事件1觸發(fā)函數(shù)1,完成函數(shù)1和事件2以及事件3觸發(fā)函數(shù)2撕捍,然后函數(shù)2的不同結(jié)果觸發(fā)分支到函數(shù)3或函數(shù)4拿穴。

用戶需要一種方法來指定他們的無服務(wù)器用例或工作流。例如忧风,一個用例可以是“在照片上傳到云存儲時在照片上進(jìn)行人臉識別(發(fā)生照片存儲事件)默色。”另一個物聯(lián)網(wǎng)用例可以是“在接收到運動檢測事件時進(jìn)行運動分析”狮腿,然后根據(jù)分析功能的結(jié)果腿宰,或者“觸發(fā)房屋警報并調(diào)用e警察部門“或只是”將運動圖像發(fā)送給房主≡迪幔“有關(guān)詳細(xì)信息酗失,請參閱用例部分。

AWS提供“步驟函數(shù)”(step function)昧绣,供用戶指定其工作流规肴,但步驟函數(shù)不允許指定觸發(fā)工作流中哪些函數(shù)的事件/事件。

下圖是涉及事件和函數(shù)的用戶工作流的示例夜畴。使用這種函數(shù)圖拖刃,用戶可以輕松地指定事件和函數(shù)之間的交互,以及如何在工作流中的函數(shù)之間傳遞信息贪绘。


?功能圖狀態(tài)包括:

- Event State(事件狀態(tài)):此狀態(tài)允許等待來自事件源的事件兑牡,然后觸發(fā)函數(shù)運行或多個函數(shù)按順序、并行或在分支中運行税灌。

- Operation/Task State(操作/任務(wù)狀態(tài)):此狀態(tài)允許按順序或并行運行一個或多個函數(shù)均函,而不等待任何事件。

-?Switch/Choice State(切換/選擇狀態(tài)):此狀態(tài)允許轉(zhuǎn)換到多個其他狀態(tài)(例如菱涤,前一個函數(shù)結(jié)果觸發(fā)分支/轉(zhuǎn)換到不同的下一個狀態(tài))苞也。

-?End/Stop State(結(jié)束/停止?fàn)顟B(tài)):此狀態(tài)以失敗/成功終止工作流。

-?Pass State(通過狀態(tài)):此狀態(tài)在兩個狀態(tài)之間插入事件數(shù)據(jù)粘秆。

-?Delay/Wait State(延遲/等待狀態(tài)):此狀態(tài)導(dǎo)致工作流執(zhí)行延遲指定的持續(xù)時間或直到指定的時間/日期如迟。

狀態(tài)和相關(guān)信息需要保存在一些持久存儲中,以便進(jìn)行故障恢復(fù)。在某些用例中殷勘,用戶可能希望將來自一個狀態(tài)的信息傳遞到下一個狀態(tài)此再。這些信息可以是函數(shù)執(zhí)行結(jié)果的一部分,也可以是與事件觸發(fā)器關(guān)聯(lián)的輸入數(shù)據(jù)的一部分玲销。需要在每個狀態(tài)定義一個信息過濾器输拇,以過濾出需要在狀態(tài)之間傳遞的信息。


參考

-?CNCF Serverless Whitepaper v1.0?

-?CNCF Serverless WG

-?An I&O Leader’s Guide to Serverless Computing

-?Guide to Serverless Technologies

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贤斜,一起剝皮案震驚了整個濱河市淳附,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蠢古,老刑警劉巖奴曙,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異草讶,居然都是意外死亡洽糟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門堕战,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坤溃,“玉大人,你說我怎么就攤上這事嘱丢⌒浇椋” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵越驻,是天一觀的道長汁政。 經(jīng)常有香客問我,道長缀旁,這世上最難降的妖魔是什么记劈? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮并巍,結(jié)果婚禮上目木,老公的妹妹穿的比我還像新娘。我一直安慰自己懊渡,他們只是感情好刽射,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剃执,像睡著了一般誓禁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忠蝗,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天现横,我揣著相機(jī)與錄音,去河邊找鬼阁最。 笑死戒祠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的速种。 我是一名探鬼主播姜盈,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼配阵!你這毒婦竟也來了馏颂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤棋傍,失蹤者是張志新(化名)和其女友劉穎救拉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘫拣,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡亿絮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了麸拄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片派昧。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拢切,靈堂內(nèi)的尸體忽然破棺而出蒂萎,到底是詐尸還是另有隱情,我是刑警寧澤淮椰,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布五慈,位于F島的核電站,受9級特大地震影響主穗,放射性物質(zhì)發(fā)生泄漏豺撑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一黔牵、第九天 我趴在偏房一處隱蔽的房頂上張望聪轿。 院中可真熱鬧,春花似錦猾浦、人聲如沸陆错。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽音瓷。三九已至,卻和暖如春夹抗,著一層夾襖步出監(jiān)牢的瞬間绳慎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留杏愤,地道東北人靡砌。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像珊楼,于是被迫代替她去往敵國和親通殃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容