由于最近的一個(gè)內(nèi)部項(xiàng)目涉及到無(wú)服務(wù)架構(gòu)的服務(wù)組件。覺(jué)得有些內(nèi)容值得分享。目前國(guó)內(nèi)外都有廠商提供了無(wú)服務(wù)架構(gòu)的服務(wù)平臺(tái)。公司可根據(jù)自身的情況搭建基于無(wú)服務(wù)架構(gòu)的應(yīng)用。本文是對(duì)無(wú)服務(wù)架構(gòu)的一些主要的內(nèi)容做些簡(jiǎn)單介紹。所述內(nèi)容將使用亞馬遜的平臺(tái)。
什以是Serverless架構(gòu)
根據(jù)亞馬遜的定義(如下文)Serverless架構(gòu)是指用戶在亞馬遜的云服務(wù)器中創(chuàng)建和運(yùn)行軟件應(yīng)用與服務(wù)。用戶無(wú)需關(guān)心所涉及的IT設(shè)施相關(guān)的內(nèi)容(如: 管理、升級(jí)等)。這些工作都將由亞馬遜云服務(wù)(AWS)承擔(dān)。
“Serverless architectures allow you to build and run applications and services without having to manage infrastructure. Your application still runs on servers, but all the server management is done by AWS. You no longer have to provision, scale, and maintain servers to run your applications, databases, and storage systems”

隨著IT架構(gòu)的進(jìn)一步的演進(jìn)(從物理機(jī)托管→云主機(jī)→Docker容器→Serverless架構(gòu)。見(jiàn)上圖如示),其在架構(gòu)上的特點(diǎn)主要表現(xiàn)為:
硬件資源使用顆粒度變小、利用率增大、運(yùn)維工作與業(yè)務(wù)工作逐步分離、更關(guān)注上層業(yè)務(wù)運(yùn)行情況、商業(yè)用戶逐漸聚焦在業(yè)務(wù)流程設(shè)計(jì)和業(yè)務(wù)操做及代碼層面業(yè)務(wù)服務(wù)生成與改進(jìn)、IT運(yùn)營(yíng)操作逐浙轉(zhuǎn)由云運(yùn)營(yíng)商代管。
Serverless架構(gòu)是IT架構(gòu)進(jìn)一步演化的產(chǎn)物。其主要有以下特點(diǎn):
實(shí)現(xiàn)了細(xì)粒度的計(jì)算資源分配;
不需要預(yù)先分配資源。無(wú)需配置和管理操作系統(tǒng);
具備真正意義上的高度擴(kuò)容和彈性。支持按需伸縮;
按需使用,按需計(jì)費(fèi)。

如上圖所示,Serverless架構(gòu)包含兩塊:
函數(shù)即服務(wù):
函數(shù)即服務(wù)提供的是計(jì)算能力。原有的計(jì)算能力,無(wú)論是容器也好,虛擬機(jī)也好都承載在一定的操作系統(tǒng)之上,函數(shù)即服務(wù)把計(jì)算能力進(jìn)行了進(jìn)一步抽象
后端即服務(wù):
后端即服務(wù),比如對(duì)象存儲(chǔ),數(shù)據(jù)庫(kù)應(yīng)用,緩存服務(wù),我們也可以稱之為Serverless,因?yàn)檫@些服務(wù)也能夠在云上提供開(kāi)通即使用的能力。在使用這些產(chǎn)品時(shí)同樣不需要關(guān)注它的服務(wù)器是什么樣的,它的服務(wù)器部署在哪里,而是服務(wù)開(kāi)通就可以使用了,后面的運(yùn)維工作都交給了云,所以不用感知它的最底層服務(wù)器,即謂之Serverless。這種服務(wù)被稱為Serverless后端即服務(wù)。這兩個(gè)合起來(lái)可以稱為Serverless架構(gòu)。
應(yīng)用場(chǎng)景
還是那句話。談技術(shù)不談應(yīng)用場(chǎng)景就是耍流氓。每一個(gè)架構(gòu)都不是萬(wàn)能的,都有其適用范圍??偟膩?lái)說(shuō),Serverless架構(gòu)方案適合于那些想尋找一個(gè)能進(jìn)一步提高IT運(yùn)營(yíng)資金和資源利用率的輕量級(jí)解決方案的企業(yè)。進(jìn)一步細(xì)分可以是當(dāng)企業(yè)存在以下需求時(shí)可使用無(wú)服務(wù)器架構(gòu):
服務(wù)器不存在時(shí)、低成本、更少的代碼、可擴(kuò)展性和靈活性。
(估計(jì)土豪不會(huì)感興趣。)
這里需要指出的是: 這個(gè)提高是有一個(gè)范圍。這一點(diǎn)將在本文下面關(guān)于優(yōu)勢(shì)與限制的內(nèi)容中指出。
Serverless架構(gòu)所具有的IT資源可根據(jù)需求彈性伸縮及可按需計(jì)費(fèi)收費(fèi)的特點(diǎn)決定了其相對(duì)于傳統(tǒng)的IT架構(gòu)更適合那些對(duì)IT能力和資源(如: 計(jì)算資源、存貯資源)需求量不確定或不穩(wěn)定的企業(yè)應(yīng)用場(chǎng)景。
企業(yè)對(duì)IT資源需求不穩(wěn)定:
往往基于事件的業(yè)務(wù)場(chǎng)景:如: 雙十一那天、秒殺活動(dòng)期間、節(jié)日、突發(fā)事件等都會(huì)在短期產(chǎn)主大量IT資源需求量。而商業(yè)公司或采用傳統(tǒng)的IT架構(gòu)則會(huì)產(chǎn)生額外工作IT維護(hù)費(fèi)用。又如: 物聯(lián)網(wǎng)應(yīng)用場(chǎng)景(如: 共享單車(chē)等)或其它基于定制事件或固定觸發(fā)事件的業(yè)務(wù)場(chǎng)景對(duì)IT資源在時(shí)間上的不連續(xù)性和無(wú)規(guī)律性也會(huì)給使用傳統(tǒng)架構(gòu)的用戶帶來(lái)額外費(fèi)用。
企業(yè)對(duì)IT資源需求不確定:
在一些場(chǎng)景下(如: 業(yè)務(wù)發(fā)展初期、市場(chǎng)及用戶不明朗、應(yīng)用冷起動(dòng)階段), 企業(yè)做IT Capacity Planning會(huì)有較大誤差。
Serverless架構(gòu)的函數(shù)計(jì)算或函數(shù)即服務(wù)(FaaS)及后臺(tái)即服務(wù)(BaaS)的服務(wù)相對(duì)于自建環(huán)境的傳統(tǒng)方案在系統(tǒng)維護(hù)及成本上有一定的優(yōu)勢(shì)。比較可參見(jiàn)下圖(以阿里產(chǎn)品為例)。

總的來(lái)說(shuō),架構(gòu)師可以借助以下原則構(gòu)建一個(gè)理想的無(wú)服務(wù)器(Serverless)系統(tǒng):
1. 根據(jù)需要使用計(jì)算服務(wù)執(zhí)行代碼(無(wú)服務(wù)器):
無(wú)服務(wù)器架構(gòu)是SOA概念的自然延伸。在無(wú)
設(shè)計(jì)模式及最佳實(shí)踐
架構(gòu)設(shè)計(jì)模式的作用是為系統(tǒng)設(shè)計(jì)師在設(shè)計(jì)系統(tǒng)過(guò)程中選用應(yīng)對(duì)某類(lèi)業(yè)務(wù)問(wèn)題的架構(gòu)設(shè)計(jì)方案時(shí)提供基于最佳實(shí)踐的參考架構(gòu)和模板。以下將介紹幾個(gè)重要的Serverless架構(gòu)設(shè)計(jì)模式。
1. 大數(shù)據(jù)業(yè)務(wù)領(lǐng)域的Serverless系統(tǒng)架構(gòu)設(shè)計(jì)模式:
2. 自動(dòng)化和布署業(yè)務(wù)領(lǐng)域的Serverless設(shè)計(jì)模式:
3. ETL業(yè)務(wù)領(lǐng)域的Serverless設(shè)計(jì)模式:
4.基于三層架構(gòu)(3-tier)的互聯(lián)網(wǎng)應(yīng)用領(lǐng)域的Serverless設(shè)計(jì)模式:
此外,無(wú)服務(wù)器架構(gòu)也很適合物聯(lián)網(wǎng)應(yīng)用領(lǐng)域。比如: Amazon Web Service(AWS)有一個(gè)物聯(lián)網(wǎng)(Internet of Things, IoT)平臺(tái)。其可提供與各種物聯(lián)網(wǎng)應(yīng)用相關(guān)服務(wù)內(nèi)容如: 身份驗(yàn)證與授權(quán)、通信網(wǎng)關(guān)、基于給每個(gè)設(shè)備分配唯一標(biāo)識(shí)方式生成的注冊(cè)表、對(duì)設(shè)備狀態(tài)進(jìn)行持久化及跟蹤、能將設(shè)備消息轉(zhuǎn)換和路由到AWS服務(wù)的服務(wù)
采用Serverless架構(gòu)的利與弊
可以涚設(shè)計(jì)過(guò)程往往是一個(gè)填坑與挖坑的過(guò)程。無(wú)服務(wù)器架構(gòu)并不適用所有情況。比如以下幾種情況下它并不一定適用:
1. 服務(wù)級(jí)別
盡管相應(yīng)的供應(yīng)商(如AWS)會(huì)有一個(gè)SLA, 但僅針對(duì)某些服務(wù))。所以,對(duì)于延遲敏感的應(yīng)用程序或具有特定的服務(wù)級(jí)別協(xié)議(SLA)的軟件來(lái)說(shuō),它可能不適用。
2. 供應(yīng)商鎖定
(未完。持續(xù)更新中……)