Serverless架構(gòu)實(shí)踐初探

文/陳東

隨著云計(jì)算技術(shù)的進(jìn)步氯夷,軟件系統(tǒng)的架構(gòu)方式也因此發(fā)生著一些變化到腥,其中Serverless架構(gòu)就是這里的一個典型的例子喘漏。

(圖片來自:http://t.cn/RadEFqr

什么是Serverless架構(gòu)

目前關(guān)于Serverless架構(gòu)的準(zhǔn)確定義拴曲,業(yè)界并沒有一個統(tǒng)一的標(biāo)準(zhǔn)缺谴。那么我們從字面上來分析窗骑,所謂Serverless架構(gòu)女责,翻譯過來也就是無服務(wù)器架構(gòu)。那么似乎可以涵蓋以下兩個方面:

  1. BaaS(Backend as a Service)即后臺即服務(wù)创译。后臺即服務(wù)出現(xiàn)有很長一段的時間了抵知,例如Parse,Firebase都是典型的代表。具體來說就是服務(wù)器端的邏輯和狀態(tài)是完全依賴于云平臺進(jìn)行管理的软族。

  2. FaaS(Function as a Service)即函數(shù)即服務(wù)刷喜。函數(shù)即服務(wù),意味著這些函數(shù)中的后臺邏輯是由我們開發(fā)者自己實(shí)現(xiàn)的立砸。但是這些函數(shù)是執(zhí)行在一個無狀態(tài)的計(jì)算容器中的掖疮,函數(shù)的執(zhí)行是基于事件驅(qū)動的,關(guān)于這些函數(shù)的部署颗祝、執(zhí)行浊闪、觸發(fā)是由云平臺來管理的。其最典型的例子就是AWS Lambda螺戳。

我們這篇文章中的所討論的Serverless搁宾,是指的第二種,也就是FaaS倔幼。在我們Thoughtworks最新一期的技術(shù)雷達(dá)中盖腿,Serverless架構(gòu)位于試驗(yàn)象限,下文就介紹下我們在Serverless架構(gòu)下的一些實(shí)踐經(jīng)驗(yàn)损同。

數(shù)據(jù)處理業(yè)務(wù)的Serverless架構(gòu)演進(jìn)

所謂的數(shù)據(jù)處理業(yè)務(wù)翩腐,是指我們的系統(tǒng)需要每天定時獲取一些外部數(shù)據(jù)與我們自身的數(shù)據(jù)結(jié)合,生成一些數(shù)據(jù)報(bào)表膏燃。那么最初我們是怎么設(shè)計(jì)技術(shù)方案的呢茂卦?

傳統(tǒng)架構(gòu)方式

我們將業(yè)務(wù)拆分為3個獨(dú)立的服務(wù),2個Data Collector蹄梢,1個Data Loader疙筹,都分別部署在AWS服務(wù)器上富俄,將中間數(shù)據(jù)存儲在一個外部S3(AWS的數(shù)據(jù)存儲)上。最后將數(shù)據(jù)保存在數(shù)據(jù)庫中而咆,在數(shù)據(jù)庫之上使用專門的BI工具來制作報(bào)表霍比。我們第一個數(shù)據(jù)服務(wù)就是按照這樣的架構(gòu)進(jìn)行設(shè)計(jì)和實(shí)踐的。當(dāng)系統(tǒng)上線服務(wù)以后暴备,我們發(fā)現(xiàn)了里邊的一些問題悠瞬。

在這套系統(tǒng)中,Data Collector 2每天的執(zhí)行時間較長涯捻,需要1個小時左右的時間浅妆,而Data Collector 1每天的執(zhí)行時間較短,通常執(zhí)行時間不會超過1分鐘障癌,但是由于外部數(shù)據(jù)源的更新時間是不確定的凌外,所以雖然我們服務(wù)實(shí)際有效時間只有僅僅一到兩分鐘,但是也不得不讓服務(wù)器全天運(yùn)行涛浙。

可以看到康辑,這個系統(tǒng)每天的有效時間只有一個小時,其他23個小時實(shí)際上是在浪費(fèi)資源轿亮,如何改善這樣的情況呢疮薇?首先想到了讓服務(wù)定點(diǎn)運(yùn)行的方法。由于我們外服數(shù)據(jù)源的更新特點(diǎn)我注,雖然它的更新時間是不確定的按咒,但是它在某個特定的時間點(diǎn)前是一定會更新的〉牵基于這樣的前提励七,我們將服務(wù)運(yùn)行時間改為定點(diǎn)運(yùn)行,這樣是不是就能解決問題了呢嗽冒?

然而現(xiàn)實(shí)并不總是那么美好呀伙,因?yàn)槲覀兎?wù)間是有依賴關(guān)系的,Data Loader是依賴于我們Data Collector的處理結(jié)果的添坊,當(dāng)我們把運(yùn)行方式改為定點(diǎn)運(yùn)行后剿另,帶來的問題是,一旦Data Collector的運(yùn)行狀態(tài)出現(xiàn)了問題贬蛙,例如運(yùn)行時間過長雨女,運(yùn)行中出現(xiàn)錯誤,那么Data Loader必然出錯阳准。同時改為定點(diǎn)運(yùn)行后氛堕,我們的數(shù)據(jù)更新必然有延遲。

那么如何解決這些問題呢野蝇?

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

我們引入了Lambda讼稚,將Data Collector 和 Data Loader用Lambda進(jìn)行了替換括儒,帶來了下面這些好處:

由于Lambda是由事件驅(qū)動的,S3上一個數(shù)據(jù)的變化可以觸發(fā)一個事件锐想,SNS的一條消息可以觸發(fā)一個時間等等帮寻,在使用Lambda后,我們就可以講原來基于時間的數(shù)據(jù)處理流程赠摇,轉(zhuǎn)變?yōu)榛谑录臄?shù)據(jù)處理流程固逗,這樣一方面可以保證我們數(shù)據(jù)更新的實(shí)時性,另一方面可以大大節(jié)省資源藕帜,由于Lambda是按照觸發(fā)次數(shù)收費(fèi)的烫罩,所以在我們的這個用例下,可以大大減少花費(fèi)洽故。

可能細(xì)心的讀者想問為什么我們Data Collector 2沒有使用Lambda進(jìn)行替換呢贝攒?這是因?yàn)樗臉I(yè)務(wù)邏輯比較復(fù)雜,每次運(yùn)行的時間較長收津,而Lambda的最長執(zhí)行時間是5分鐘饿这,所以在這種情況下浊伙,就不適合使用Lambda進(jìn)行替換了撞秋。

實(shí)時數(shù)據(jù)處理下的Serverless架構(gòu)

在初識Serverless架構(gòu)的好處之后,我們開始在其他方面的應(yīng)用嘗試嚣鄙,比較典型的一個例子就是在實(shí)時數(shù)據(jù)處理業(yè)務(wù)下的Serverless架構(gòu)吻贿。在我們業(yè)務(wù)下,我們需要實(shí)時跟蹤一個外部的數(shù)據(jù)源API哑子,根據(jù)它的數(shù)據(jù)變化來實(shí)時更新我們的數(shù)據(jù)舅列。

在我們的架構(gòu)設(shè)計(jì)中,我們使用一個Lambda來跟蹤外部數(shù)據(jù)源的數(shù)據(jù)變化卧蜓,并將其推到AWS Kinesis Stream里帐要,AWS Kinesis會觸發(fā)第二個Lambda進(jìn)行相應(yīng)的數(shù)據(jù)處理,并把數(shù)據(jù)存儲到數(shù)據(jù)庫中弥奸,值得注意的是由于Lambda是可以根據(jù)需求自動伸縮的榨惠,所以Lambda會根據(jù)Kinesis的需求來自動擴(kuò)展。這就體現(xiàn)了Serverless架構(gòu)下的另一個好處盛霎,可以相對簡單的赠橙,自動進(jìn)行伸縮擴(kuò)展。

Web系統(tǒng)的Serverless架構(gòu)

對于Web系統(tǒng)這種我們最為熟悉和常見的IT系統(tǒng)來說愤炸,它能不能用Serverless的架構(gòu)來實(shí)現(xiàn)呢期揪?我們來看下邊的例子。我們先來看看傳統(tǒng)的例子规个。

在傳統(tǒng)實(shí)現(xiàn)中凤薛,我們會利用Load Blancer來做負(fù)載均衡姓建,然后后續(xù)的應(yīng)用會部署在AutoScaling Group中,根據(jù)流量來做自動伸縮缤苫,這種模式已經(jīng)是十分成熟了引瀑。那么在Serverless的架構(gòu)下該如何設(shè)計(jì)呢?

在Serverless架構(gòu)下榨馁,一般我們的前端應(yīng)用的資源文件包括Html憨栽,JS,CSS翼虫,都是部署在S3(AWS的文件存儲)上的屑柔。前端應(yīng)用通過AJAX請求向后臺請求數(shù)據(jù)。后臺通過API GateWay定義對外的Endpoint珍剑,同時每個Endpoint會觸發(fā)一個Lambda進(jìn)行數(shù)據(jù)操作掸宛,例如圖中的GET,和POST請求會觸發(fā)兩個不同Lambda招拙。這樣的Serverless架構(gòu)可以讓開發(fā)者不必?fù)?dān)心水平擴(kuò)展的問題唧瘾。

Serverless架構(gòu)的未來

目前AWS Lambda似乎已經(jīng)成為了Serverless的代名詞,為了幫助開發(fā)者更好的構(gòu)建Serverless應(yīng)用别凤,市場上出現(xiàn)了一些工具和框架饰序,例如Serverless Framework。但是同樣我們還可以看到一些其他的云平臺和開源框架也在提供類似的服務(wù)规哪,例如webtask求豫,OpenWhisk,以及其在IBM Bluemix上的實(shí)現(xiàn)诉稍。

Serverless架構(gòu)作為一種新的架構(gòu)方式蝠嘉,還在不斷的發(fā)展中。希望本文能給您帶來一些思考杯巨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚤告,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子服爷,更是在濱河造成了極大的恐慌杜恰,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件层扶,死亡現(xiàn)場離奇詭異箫章,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)镜会,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門檬寂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人戳表,你說我怎么就攤上這事桶至≈绨椋” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵镣屹,是天一觀的道長圃郊。 經(jīng)常有香客問我,道長女蜈,這世上最難降的妖魔是什么持舆? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮伪窖,結(jié)果婚禮上逸寓,老公的妹妹穿的比我還像新娘。我一直安慰自己覆山,他們只是感情好竹伸,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著簇宽,像睡著了一般勋篓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魏割,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天譬嚣,我揣著相機(jī)與錄音,去河邊找鬼见妒。 笑死孤荣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的须揣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼钱豁,長吁一口氣:“原來是場噩夢啊……” “哼耻卡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牲尺,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤卵酪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谤碳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溃卡,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年蜒简,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘸羡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡搓茬,死狀恐怖犹赖,靈堂內(nèi)的尸體忽然破棺而出队他,到底是詐尸還是另有隱情,我是刑警寧澤峻村,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布麸折,位于F島的核電站,受9級特大地震影響粘昨,放射性物質(zhì)發(fā)生泄漏垢啼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一张肾、第九天 我趴在偏房一處隱蔽的房頂上張望膊夹。 院中可真熱鬧,春花似錦捌浩、人聲如沸放刨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽进统。三九已至,卻和暖如春浪听,著一層夾襖步出監(jiān)牢的瞬間螟碎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工迹栓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掉分,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓克伊,卻偏偏與公主長得像酥郭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子愿吹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359

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