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

與Serverless的第一次親密接觸

云計(jì)算
Serverless 是一個(gè)架構(gòu)上的概念,從字面上理解就是無服務(wù)器架構(gòu)。Serverless最初是用于描述依賴第三方服務(wù)實(shí)現(xiàn)對(duì)邏輯和狀態(tài)進(jìn)行管理的應(yīng)用,典型的例子是單頁(yè) Web 和移動(dòng) App 這種富客戶端應(yīng)用。

Servrless概念

Serverless 是一個(gè)架構(gòu)上的概念,從字面上理解就是無服務(wù)器架構(gòu)。Serverless最初是用于描述依賴第三方服務(wù)實(shí)現(xiàn)對(duì)邏輯和狀態(tài)進(jìn)行管理的應(yīng)用,典型的例子是單頁(yè) Web 和移動(dòng) App 這種富客戶端應(yīng)用,他們一般都使用基于云端的數(shù)據(jù)庫(kù)(例如Parse、Firebase),認(rèn)證服務(wù)(Auth0、AWS congnito)等。這些第三方服務(wù)通常稱為 BaaS(Backend as a Service) 。Serverless 的第二種含義,是用來描述這樣一種應(yīng)用架構(gòu):除了使用第三方 BaaS 服務(wù)外,一部分服務(wù)端邏輯仍然由應(yīng)用的研發(fā)人員實(shí)現(xiàn),但是跟傳統(tǒng)架構(gòu)不同在于,這部分服務(wù)端代碼運(yùn)行于無狀態(tài)的容器中,可以由事件觸發(fā),短暫的,完全被第三方管理。業(yè)界對(duì) Serverless 的熱議,大部分集中第二種,因?yàn)榈诙N形式代碼托管代表技術(shù)更新,以 FaaS(Function as a Service) 而聞名。根據(jù)第二種場(chǎng)景,有一個(gè)***的定義是:Serverless 架構(gòu)是基于互聯(lián)網(wǎng)的系統(tǒng),其中應(yīng)用開發(fā)不使用常規(guī)的服務(wù)進(jìn)程。相反,它們僅依賴于第三方服務(wù)(例如 AWS Lambda 服務(wù)),客戶端邏輯和服務(wù)托管遠(yuǎn)程過程調(diào)用的組合。后面敘述都是基于第二種定義來進(jìn)行,也就是基于 FaaS 函數(shù)計(jì)算服務(wù)來實(shí)現(xiàn)的 Serverless 應(yīng)用架構(gòu),在這個(gè)定義上可以簡(jiǎn)單把 Serverless 等同 FaaS。

Serverless 和 PaaS的關(guān)系

FaaS 與 PaaS的概念在某些方面有許多相似的地方。人們甚至認(rèn)為 FaaS 就是另一種形式的 PaaS,但是 Intent Media 的工程副總裁 Mike Roberts 提出一個(gè)微妙的差別:“大部分PaaS應(yīng)用無法針對(duì)每個(gè)請(qǐng)求啟動(dòng)和停止整個(gè)應(yīng)用程序,而 FaaS 平臺(tái)生來就是為了實(shí)現(xiàn)這樣的目的。” AWS 云架構(gòu)戰(zhàn)略副總裁 Adrian Cockcroft 曾經(jīng)針對(duì)兩者的界定給出了一個(gè)簡(jiǎn)單的方法:“如果你的PaaS 能夠有效地在20毫秒內(nèi)啟動(dòng)實(shí)例并運(yùn)行半秒,那么就可以稱之為 Serverless”。我理解兩個(gè)人的意思,都是認(rèn)為傳統(tǒng)的 PaaS 和 FaaS 的抽象層次不一樣,PaaS 是對(duì)整個(gè)應(yīng)用的抽象,F(xiàn)aaS 是對(duì)應(yīng)用邏輯的單位(函數(shù))的抽象。舉例來說,PaaS 不是針對(duì)每個(gè)請(qǐng)求來拉起一個(gè)服務(wù),它是常駐的服務(wù),而 FaaS 是根據(jù)每個(gè)請(qǐng)求來拉起一個(gè)容器來執(zhí)行,屬于更細(xì)粒度的拆分。也就是:PaaS 托管的是整個(gè)應(yīng)用,而 FaaS 托管應(yīng)用的某個(gè)碎片化的邏輯代碼,從資源使用率和成本角度更具優(yōu)勢(shì)。

Serverless 和 BaaS 的關(guān)系

BaaS 和 Serverless 的區(qū)別主要在于,BaaS 是一般是第三方提供的后端服務(wù),例如 AWS 提供的Congito就是典型的 BaaS 服務(wù),業(yè)界比較成功的 BaaS 服務(wù)幾乎都是為移動(dòng)開發(fā)的后端云服務(wù),例如 Facebook 的 Parese, google 的 Firebase, 國(guó)內(nèi) LeandCloud,提供的功能大同小異,都是實(shí)時(shí)數(shù)據(jù)庫(kù),消息推送等等。BaaS 的粒度介乎 PaaS 和 FaaS, PaaS 是提供了應(yīng)用運(yùn)行環(huán)境,而是BaaS將特定應(yīng)用變成一個(gè)云服務(wù)。而應(yīng)用想實(shí)施 Serverless 架構(gòu),還是需要自己的服務(wù)代碼來組合這些 BaaS 服務(wù)來滿足自己的業(yè)務(wù)邏輯,而且服務(wù)代碼要通過 FaaS 來管理。用兩張圖說明兩者區(qū)別,兩個(gè)圖是都是實(shí)現(xiàn)一個(gè)廣告點(diǎn)擊行為數(shù)據(jù)處理,Click Processor 是實(shí)際處理動(dòng)作的服務(wù)。***張圖 Click Processor 是一個(gè) BaaS 服務(wù),進(jìn)程常駐,每次都由這個(gè)進(jìn)程處理。第二張圖把它改造成 Serverless 架構(gòu),每次點(diǎn)擊拉起一個(gè)進(jìn)程執(zhí)行一個(gè)函數(shù),函數(shù)托管在 FaaS 服務(wù)中。

與 Serverless 的***次接觸

想象一下,你是一名 Web 開發(fā)工程師,你接到一個(gè)需求需要做一個(gè)單頁(yè)面應(yīng)用,上傳一張圖并在幾秒后獲得一張梵高風(fēng)格化的圖,像這樣:

遇到這種情況,一般…嗯……先 Google 一下,找到了這個(gè):

  1. alexjc/neural-doodle 

它的效果大概是這樣:

先過一遍步驟:

  1. 瀏覽器發(fā)請(qǐng)求給服務(wù)端,body 是一張圖片的二進(jìn)制數(shù)據(jù);
  2. 服務(wù)端從 body 中取出二進(jìn)制數(shù)據(jù),轉(zhuǎn)成圖片,調(diào)用 doodle.py 中的方法,轉(zhuǎn)換風(fēng)格存儲(chǔ)之并返回存儲(chǔ)位置;
  3. 瀏覽器按位置請(qǐng)求圖片并展示之。

但是有幾個(gè)問題,如果這個(gè) SPA 出乎意料的受歡迎,接口負(fù)載過高呢?是不是要升級(jí),加機(jī)器,加負(fù)載均衡?如果來了一個(gè)新需求或者簡(jiǎn)單的 bugfix,是不是又涉及到批量更新節(jié)點(diǎn),這還是沒有考慮日志,運(yùn)維,監(jiān)控等運(yùn)營(yíng)方面的工作量。根據(jù)前面對(duì)Serverless的介紹,這個(gè)場(chǎng)景很適合用Serverless產(chǎn)品來解決,這是一個(gè)典型的無狀態(tài)服務(wù)+計(jì)算的自動(dòng)擴(kuò)展,這些問題交給Serverless服務(wù)提供方即可。下面我選擇UCloud的Serverless產(chǎn)品UGC來搭建這個(gè)服務(wù),并測(cè)試一下效果,看是否能滿足我的需求。

試用 Serverless 產(chǎn)品(UCloud UGC)

根據(jù)官方的介紹,UCloud通用計(jì)算(UCloud General Compute)是分布式大規(guī)模并行計(jì)算服務(wù)??商峁?shù)萬核級(jí)的并發(fā)計(jì)算能力,系統(tǒng)自動(dòng)完成任務(wù)調(diào)度,并按實(shí)際使用量計(jì)費(fèi)。UGC充分利用一個(gè)區(qū)域內(nèi)的多個(gè)可用區(qū)計(jì)算資源,提供了基于云平臺(tái)的跨可用區(qū)級(jí)別的高可用性、高安全性和高并發(fā)性。UGC可滿足圖片處理、機(jī)器學(xué)習(xí)、大數(shù)據(jù)處理、生物數(shù)據(jù)分析等領(lǐng)域的計(jì)算需求。

下圖其中一個(gè)使用場(chǎng)景:

UCloud基于UGC的高效并行計(jì)算能力搭建的對(duì)象存儲(chǔ)(UFile)圖片處理服務(wù),得以輕松支持用戶每天***別的圖片處理請(qǐng)求,滿足用戶對(duì)高時(shí)效的需求。

很適我們本次梵高風(fēng)格化圖片的需求。下面是我這次搭建服務(wù)過程:

  1. 創(chuàng)建私有倉(cāng)庫(kù)(WEB界面)
  2. 登錄鏡像倉(cāng)庫(kù)(cli)
  3. 制作梵高風(fēng)格轉(zhuǎn)換鏡像(cli)(如果你認(rèn)真看文檔,你會(huì)發(fā)現(xiàn)其實(shí) alexjc/neural-doodle 其實(shí)是有直接提供鏡像的,^_^)
  4. 上傳鏡像(cli)
  5. 查看鏡像詳情(WEB界面)
  6. 告警模板配置(WEB界面)
  7. 使用 SDK 提交任務(wù)(Python SDK)
  8. 查看任務(wù)執(zhí)行統(tǒng)計(jì)WEB界面)
  9. 查看監(jiān)控(WEB界面)

下面是詳細(xì)的操作步驟:

|> 創(chuàng)建私有倉(cāng)庫(kù)

|> 下載梵高風(fēng)格轉(zhuǎn)換鏡像

鏡像介紹頁(yè)面:https://hub.docker.com/r/alexjc/neural-doodle/

我們直接從 Docker 官方下載它:

docker pull alexjc/neural-doodle

|> 修改鏡像名稱

docker tag alexjc/neural-doodle cn-bj2.ugchub.service.ucloud.cn/kevingao/neural-doodle:first

|> 登錄UCloud鏡像倉(cāng)庫(kù)

docker login cn-bj2.ugchub.service.ucloud.cn

|> 上傳鏡像

將我們剛才下載的鏡像上傳到UCloud鏡像倉(cāng)庫(kù)

docker push cn-bj2.ugchub.service.ucloud.cn/kevingao/neural-doodle:first

|> 查看鏡像信息

|> 告警模板配置

目前包含超時(shí)與失敗兩個(gè)模板可以直接使用。

|> 使用SDK提交風(fēng)格轉(zhuǎn)換任務(wù)

在Python SDK中配置自己賬號(hào)的公私鑰和Docker image 路徑,然后使用 Web后端調(diào)用,發(fā)布風(fēng)格轉(zhuǎn)換任務(wù)。

至此我們風(fēng)格轉(zhuǎn)換接口就就緒了,使用相同的方法搞定打水印的鏡像,我們先使用腳本測(cè)試一下接口,然后通過UCloud UGC服務(wù)后臺(tái)來查看執(zhí)行的情況

|> 查看任務(wù)執(zhí)行統(tǒng)計(jì)

包含調(diào)用次數(shù)、成功率、結(jié)果、花費(fèi)CPU時(shí)間等信息。

下面我們就要開始前端的制作了。

前端交互

Web App有兩個(gè)功能,打水印和梵高風(fēng)格轉(zhuǎn)換,

它們的交互基本是一致的,這里我截圖打水印的頁(yè)面來做演示:

***步:選擇圖片

第二步:上傳圖片 (也可以直接使用UGC 對(duì)象存儲(chǔ)功能)

第三步:輸入要打的水印(鏡像需要的參數(shù))

第四步:返回結(jié)果展示

第五步:統(tǒng)計(jì)任務(wù)執(zhí)行結(jié)果

如上文所見,這個(gè)簡(jiǎn)單的Web APP完成了『圖片梵高風(fēng)格化』和『圖片打水印』兩個(gè)功能,這里它體現(xiàn)了UGC的兩大優(yōu)點(diǎn):

  • 計(jì)算能力自動(dòng)擴(kuò)展,處理一張照片與處理100張照片的時(shí)間花費(fèi)是一樣的;
  • 高并發(fā),UGC擁有多節(jié)點(diǎn)數(shù)萬核的資源支持可以輕松支持高并發(fā)的請(qǐng)求。

附UGC 官網(wǎng):https://www.ucloud.cn/site/product/ugc.html

責(zé)任編輯:趙寧寧 來源: ucloud博客
相關(guān)推薦

2013-02-25 09:43:22

LambdasJava8

2009-11-27 14:18:37

Scala

2010-01-29 09:01:40

.NET 4.0

2018-06-12 11:19:28

2020-05-06 07:18:59

數(shù)據(jù)中臺(tái)架構(gòu)

2015-11-03 11:39:18

清華大學(xué)OpenStackEasyStack

2012-10-19 09:27:23

Ruby

2009-05-15 08:59:32

Windows 7微軟操作系統(tǒng)

2018-08-16 11:30:12

JavaCPU緩存

2010-05-25 13:17:28

MySQL數(shù)據(jù)庫(kù)

2011-07-21 21:01:37

諾基亞塞班蘋果

2009-06-08 16:00:00

ASP.NET 3.5

2017-03-22 15:38:28

代碼架構(gòu)Java

2015-08-05 10:54:49

2012-04-13 10:11:58

Windows 8泄露

2022-03-16 14:59:28

打包debian模板文件

2023-09-11 00:14:46

后端團(tuán)隊(duì)項(xiàng)目

2023-04-12 08:14:10

mysql關(guān)聯(lián)字段索引

2022-08-15 08:16:56

shiroWeb認(rèn)證

2015-07-27 17:48:20

麥迪
點(diǎn)贊
收藏

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