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

Serverless 工程實(shí)踐|細(xì)數(shù) Serverless 的配套服務(wù)

云計(jì)算
從 Serverless 的結(jié)構(gòu)上來看,Serverless = FaaS + BaaS 是一個(gè)被普遍認(rèn)可的概念;從 Serverless 的特性上來看,Serverless 運(yùn)行在無狀態(tài)的計(jì)算容器中,由事件觸發(fā),并且擁有彈性伸縮以及按量付費(fèi)等能力,讓使用者不用花費(fèi)更多的精力在服務(wù)器上,而是更加關(guān)注業(yè)務(wù)本身。

前言

上文說到云計(jì)算的十余年發(fā)展讓整個(gè)互聯(lián)網(wǎng)行業(yè)發(fā)生了翻天覆地的變化,Serverless 作為云計(jì)算的產(chǎn)物,或者說是云計(jì)算在某個(gè)時(shí)代的表現(xiàn),被很多人認(rèn)為是真正意義上的云計(jì)算,關(guān)于“Serverless 是什么”這個(gè)問題,其實(shí)是可以通過不同角度來分析的。

Martin Fowler 在 “Serverless Architectures” 一文中從 Serverless 組成角度給出了 Serverless 的定義,他認(rèn)為 Serverless 實(shí)際上是 BaaS 與 FaaS 的組合,并針對(duì) BaaS 和 FaaS 進(jìn)行了詳細(xì)的描述。

Serverless 最早用于描述那些大部分或者完全依賴于第三方(云端)應(yīng)用或服務(wù)來管理服務(wù)器端邏輯和狀態(tài)的應(yīng)用,這些應(yīng)用通常是富客戶端應(yīng)用(單頁應(yīng)用或者移動(dòng)端App),建立在云服務(wù)生態(tài)之上,包括數(shù)據(jù)庫(Parse、Firebase)、賬號(hào)系統(tǒng)(Auth0、AWS Cognito)等。這些服務(wù)最早被稱為 Baas(Backend as a Service,后端即服務(wù))。

Serverless 還可以指這種情況:應(yīng)用的一部分服務(wù)端邏輯依然由開發(fā)者完成,但是和傳統(tǒng)架構(gòu)不同,它運(yùn)行在一個(gè)無狀態(tài)的計(jì)算容器中,由事件驅(qū)動(dòng),生命周期很短(甚至只有一次調(diào)用),完全由第三方管理。這種情況被稱為 FaaS(Functions as a service,函數(shù)即服務(wù))。AWS Lambda 是目前的熱門 FaaS 實(shí)現(xiàn)之一。

通過 Martin Fowler 的描述可以總結(jié)出 FaaS、BaaS 以及 Serverless 之間的關(guān)系為下圖所示。

Serverless 架構(gòu)的組成

從 Serverless 的結(jié)構(gòu)上來看,Serverless = FaaS + BaaS 是一個(gè)被普遍認(rèn)可的概念;從 Serverless 的特性上來看,Serverless 運(yùn)行在無狀態(tài)的計(jì)算容器中,由事件觸發(fā),并且擁有彈性伸縮以及按量付費(fèi)等能力,讓使用者不用花費(fèi)更多的精力在服務(wù)器上,而是更加關(guān)注業(yè)務(wù)本身。

不同角度上的 Serverless 的定義

Serverless 工作流程

在實(shí)際生產(chǎn)中,Serverless 架構(gòu)通常都是 FaaS 與 BaaS 的結(jié)合,并且具備彈性伸縮和按量付費(fèi)的特性。

當(dāng)開發(fā)者想要開發(fā)一個(gè)項(xiàng)目的時(shí)候:

通常只需要根據(jù) FaaS 提供商所提供的 Runtime,選擇一個(gè)熟悉的編程語言,然后進(jìn)行項(xiàng)目開發(fā)、測試(圖中步驟 1)
完成之后將代碼上傳到FaaS平臺(tái)(圖中步驟 2)
上傳完成之后,只需要通過 API/SDK;或者一些云端的事件源(圖中步驟 3)
觸發(fā)上傳到 FaaS 平臺(tái)的函數(shù),F(xiàn)aaS 平臺(tái)就會(huì)根據(jù)觸發(fā)的并發(fā)度等彈性執(zhí)行對(duì)應(yīng)的函數(shù)(圖中步驟 4)
最后用戶可以根據(jù)實(shí)際資源使用量進(jìn)行按量付費(fèi)(圖中步驟 5)

Serverless 工作流程

我們來看一個(gè) Web 應(yīng)用的例子。通常情況下一些 Web 應(yīng)用都是傳統(tǒng)的三層 C/S 架構(gòu),例如一個(gè)常見的電子商務(wù)應(yīng)用,假設(shè)它的服務(wù)端用 Java,客戶端用 HTML/JavaScript。

傳統(tǒng) Web 應(yīng)用三層 C/S 架構(gòu)

在這個(gè)架構(gòu)下,服務(wù)端僅為云服務(wù)器,其承載了大量業(yè)務(wù)功能和業(yè)務(wù)邏輯,例如,系統(tǒng)中的大部分邏輯(身份驗(yàn)證、頁面導(dǎo)航、搜索、交易等)都在服務(wù)端實(shí)現(xiàn)。把它改造成 Serverless 應(yīng)用形態(tài)。

Serverless 應(yīng)用形態(tài)簡圖

在 Serverless 應(yīng)用形態(tài)下,移除了最初應(yīng)用中的身份驗(yàn)證邏輯,換用一個(gè)第三方的 BaaS 服務(wù)(上圖中步驟 1);允許客戶端直接訪問一部分?jǐn)?shù)據(jù)庫內(nèi)容,這部分?jǐn)?shù)據(jù)完全由第三方托管,會(huì)用一些安全配置來管理客戶端訪問相應(yīng)數(shù)據(jù)的權(quán)限(上圖中步驟 2);前面兩點(diǎn)已經(jīng)隱含了非常重要的第三點(diǎn):先前服務(wù)端的部分邏輯已經(jīng)轉(zhuǎn)移到了客戶端,如保持用戶 Session、理解應(yīng)用的 UX 結(jié)構(gòu)、獲取數(shù)據(jù)并渲染出用戶界面等。

客戶端實(shí)際上已經(jīng)在逐步演變?yōu)閱雾搼?yīng)用(上圖中步驟 3);還有一些任務(wù)需要保留在服務(wù)器上,比如繁重的計(jì)算任務(wù)或者需要訪問大量數(shù)據(jù)的操作。這里以“搜索”為例,搜索功能可以從持續(xù)運(yùn)行的服務(wù)端中拆分出來,以 FaaS 的方式實(shí)現(xiàn),從 API 網(wǎng)關(guān)(后文做詳細(xì)解釋)接收請(qǐng)求并返回響應(yīng)。這個(gè)服務(wù)端函數(shù)可以和客戶端一樣,從同一個(gè)數(shù)據(jù)庫讀取產(chǎn)品數(shù)據(jù)。原始的服務(wù)端是用 Java 寫的,而 AWS Lambda(假定用的這家 FaaS 平臺(tái))也支持 Java,那么原先的搜索代碼略作修改就能實(shí)現(xiàn)這個(gè)搜索函數(shù)(上圖中步驟 4);還可以把“購買”功能改寫為另一個(gè) FaaS函數(shù),出于安全考慮,它需要在服務(wù)端而非客戶端實(shí)現(xiàn)。它同樣經(jīng)由API網(wǎng)關(guān)暴露給外部使用(上圖中步驟 5)。

在整個(gè)項(xiàng)目中,Serverless 用戶實(shí)際關(guān)心的也就只剩下函數(shù)中的業(yè)務(wù)邏輯,至于身份驗(yàn)證邏輯、API 網(wǎng)關(guān)以及數(shù)據(jù)庫等原先在服務(wù)端的一些產(chǎn)品/服務(wù)統(tǒng)統(tǒng)交給云廠商提供。在整個(gè)項(xiàng)目開發(fā)、上線以及維護(hù)的過程中,用戶并不需要關(guān)注服務(wù)器層面的維護(hù),也無須為流量的波峰波谷進(jìn)行運(yùn)維資源的投入,這一切的安全性、彈性能力以及運(yùn)維工作都交給云廠商來統(tǒng)一處理/調(diào)度,用戶所需要關(guān)注的就是自己的業(yè)務(wù)代碼是否符合自己的業(yè)務(wù)要求,同時(shí)在 Serverless 架構(gòu)下,用戶也無需為資源閑置進(jìn)行額外的支出,Serverless 架構(gòu)的按量付費(fèi)模型以及彈性伸縮能力、服務(wù)端低運(yùn)維/免運(yùn)維能力,可以讓 Serverless 用戶的資源成本、人力成本、整體研發(fā)效能得到大幅度提升,讓項(xiàng)目的性能、安全性、穩(wěn)定性得到極大的保障。

Serverless 的配套服務(wù)

1、開發(fā)者工具

Serverless 開發(fā)者工具包括命令行工具、編輯器插件以及其他工具。

一般情況下,命令行工具有廠商一方工具和開源建設(shè)的三方工具兩種,例如 AWS Lambda 的 SAM CLI、阿里云函數(shù)計(jì)算的 Funcraft 等就是典型的一方工具。這類工具的特點(diǎn)是和廠商、產(chǎn)品的匹配度非常高,一些特性的支持比較迅速,缺點(diǎn)是比較保守。Serverless Devs、Serverless Framework 就是典型的三方工具,這兩個(gè)工具都支持 AWS Lambda、阿里云函數(shù)計(jì)算、騰訊云云函數(shù)等云廠商的 FaaS 產(chǎn)品。

從客戶端表現(xiàn)上來看,其都是 Serverless 開發(fā)者工具,都是組件化的命令行工具,也都支持多云;從形態(tài)上來看,Serverless Framework 更注重部署與運(yùn)維方向, Serverless Devs 更注重 Serverless 應(yīng)用的全生命周期。同時(shí),Serverless Devs 相對(duì) Serverless Framework 而言,增加了可視化界面。

Serverless Devs GUI 首頁

如圖所示,通過該界面,用戶可以快速地部署應(yīng)用。

Serverless Devs GUI 可視化 Yaml 編輯頁

用戶可以快速地管理云上 Serverless 相關(guān)資源,如圖所示。

Serverless Devs GUI 項(xiàng)目管理頁

Azure Functions 也提供了 Visual Studio Code 插件,如下圖所示。Visual Studio 中的 Azure Functions 項(xiàng)目模板可用于創(chuàng)建項(xiàng)目,創(chuàng)建的項(xiàng)目可發(fā)布到 Azure 中的函數(shù)應(yīng)用中。用戶可使用函數(shù)應(yīng)用將函數(shù)分組為一個(gè)邏輯單元,以便于管理、部署和共享資源。

Azure Functions 提供的 VSCode 插件

阿里云在開發(fā)者工具層面提供了 VSCode 插件,如圖所示。

同時(shí),阿里云函數(shù)計(jì)算還提供了 Cloud Toolkit 工具,實(shí)現(xiàn)了在本地 Jet Brains IDE 中運(yùn)行、下載云端函數(shù),創(chuàng)建、上傳本地函數(shù)。以 IntelliJ IDEA 為例,其函數(shù)管理界面如下圖所示。

阿里云函數(shù)計(jì)算 VSCode 插件函數(shù)管理界面

2、Serverless Workflow

Serverless Workflow(Serverless 工作流)是一個(gè)用來協(xié)調(diào)多個(gè)分布式任務(wù)執(zhí)行的全托管云服務(wù)。

如圖所示,在 Serverless 工作流中,用戶可以用順序、分支、并行等方式來編排分布式任務(wù)。Serverless 工作流會(huì)按照設(shè)定好的步驟可靠地協(xié)調(diào)任務(wù),跟蹤每個(gè)任務(wù)的狀態(tài)轉(zhuǎn)換,并在必要時(shí)執(zhí)行用戶定義的重試邏輯,以確保工作流順利完成。

Serverless 工作流通過提供日志記錄和審計(jì)來監(jiān)視任務(wù)的執(zhí)行,方便用戶輕松地診斷和調(diào)試應(yīng)用。Serverless 工作流簡化了開發(fā)和運(yùn)行業(yè)務(wù)流程所需要的任務(wù)協(xié)調(diào)、狀態(tài)管理以及錯(cuò)誤處理等煩瑣的工作,讓用戶聚焦業(yè)務(wù)邏輯開發(fā)。

Serverless 工作流示例

Serverless 工作流可以協(xié)調(diào)分布式組件編排不同基礎(chǔ)架構(gòu)、不同網(wǎng)絡(luò)、不同語言編寫的應(yīng)用,抹平混合云、專有云過渡到公共云或者從單體架構(gòu)演進(jìn)到微服務(wù)架構(gòu)的落差。Serverless 工作流提供了豐富的控制邏輯,例如順序、選擇、并行等,讓用戶以更少的代碼實(shí)現(xiàn) 復(fù)雜的業(yè)務(wù)邏輯。Serverless 工作流為用戶管理流程狀態(tài),提供內(nèi)置檢查點(diǎn)和回放能力,以確保應(yīng)用程序按照預(yù)期逐步執(zhí)行。錯(cuò)誤重試和捕獲可以讓用戶靈活地處理錯(cuò)誤。Serverless 工作流根據(jù)實(shí)際執(zhí)行步驟轉(zhuǎn)換個(gè)數(shù)收費(fèi),執(zhí)行結(jié)束不再收費(fèi)。Serverless 工作流自動(dòng)擴(kuò)展,讓用戶免于管理硬件預(yù)算和擴(kuò)展。

Serverless 應(yīng)用的可觀測性

Serverless 應(yīng)用的可觀測性是被很多用戶所關(guān)注的。可觀測性是通過外部表現(xiàn)判斷系統(tǒng)內(nèi)部狀態(tài)來衡量的。在應(yīng)用開發(fā)中,可觀測性幫助用戶判斷系統(tǒng)內(nèi)部的健康狀況,在系統(tǒng)出現(xiàn)問題時(shí),幫助用戶定位問題、排查問題、分析問題;在系統(tǒng)平穩(wěn)運(yùn)行時(shí),幫助用戶評(píng)估風(fēng)險(xiǎn),預(yù)測可能出現(xiàn)的問題。在 Serverless 應(yīng)用開發(fā)中,如果觀察到函數(shù)的并發(fā)度持續(xù)升高,很可能是業(yè)務(wù)推廣團(tuán)隊(duì)努力工作使業(yè)務(wù)規(guī)模迅速擴(kuò)張。為了避免達(dá)到并發(fā)度限制閾值,開發(fā)者就需要提前提升并發(fā)度。以阿里云函數(shù)計(jì)算為例,阿里云函數(shù)計(jì)算在可觀測性層面提供了多種維度,包括 Logging、Metric 以及 Tracing 等。

函數(shù)計(jì)算可觀測性整體圖表

在控制臺(tái)監(jiān)控中心,我們可以查看整體的 Metric、服務(wù)級(jí) Metric 以及每個(gè)函數(shù)的 Metric。除此之外,我們還可以看到當(dāng)前函數(shù)的請(qǐng)求記錄。

函數(shù)計(jì)算可觀測性函數(shù)請(qǐng)求記錄

根據(jù)不同的請(qǐng)求記錄,可以查看到函數(shù)的詳細(xì)信息,如圖所示。

函數(shù)計(jì)算可觀測性請(qǐng)求級(jí)記錄詳細(xì)信息

除了在控制臺(tái)的監(jiān)控中心處可以查看到函數(shù)的日志等信息,我們?cè)诤瘮?shù)詳情頁面也可以看到函數(shù)的詳細(xì)日志信息。

函數(shù)計(jì)算日志查看

Tracing 相關(guān)信息如圖所示。

函數(shù)計(jì)算可觀測性 Tracing 相關(guān)信息

責(zé)任編輯:梁菲 來源: 阿里云云棲號(hào)
相關(guān)推薦

2021-09-18 10:23:43

Serverless

2021-10-13 09:45:54

Serverless 應(yīng)用調(diào)試

2021-11-18 09:46:24

ServerlessKubeless 阿里云

2017-05-29 08:18:11

Serverless架構(gòu)軟件系統(tǒng)

2021-10-15 10:00:31

Serverless Knative

2020-05-06 16:47:59

ServerlessMVC架構(gòu)

2014-03-23 17:38:06

酒店醫(yī)院華三通信

2014-03-17 17:26:29

醫(yī)療信息化華三

2018-03-26 04:53:46

Serverless微服務(wù)架構(gòu)

2017-03-15 19:03:05

云計(jì)算

2023-06-28 11:55:50

Serverless架構(gòu)云計(jì)算

2020-06-10 10:00:53

Serverless數(shù)據(jù)處理函數(shù)

2021-05-27 11:03:10

飛豬Serverless

2021-09-06 16:00:39

Serverless當(dāng)當(dāng)Knative

2020-05-09 09:04:23

Serverless運(yùn)維測試

2023-12-09 14:33:05

2020-04-09 08:57:57

Serverless無服務(wù)器語言

2018-07-30 11:53:04

Kubernetes無服務(wù)器容器

2023-08-27 15:20:58

Serverless架構(gòu)開發(fā)

2019-03-14 11:02:21

Serverless前端工程師Ajax
點(diǎn)贊
收藏

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