FaaS或者說serverless是一種云計算模型,其主要特點是用戶根本不需要租用任何虛擬機,從啟動虛擬機,執(zhí)行代碼,返回結(jié)果和停止虛擬機這些由云提供商處理的整個過程。這比其他云計算實現(xiàn)更具成本效益。它還使開發(fā)人員能夠更加專注于開發(fā)業(yè)務(wù)邏輯,因為應(yīng)用程序的某些部分由云提供程序處理。
要啟動執(zhí)行代碼的整個過程,必須觸發(fā)它。觸發(fā)器可以是一個特定的事件,也可以是對API 管理系統(tǒng)的請求,然后將該代碼作為API 端點公開。
最流行的serverless服務(wù)之一是 AWS Lambda,它可以與AWS API 網(wǎng)關(guān)集成,創(chuàng)建一個serverless的RESTAPI。
REST API配置
API的配置將由AWS API 網(wǎng)關(guān)處理。這包括創(chuàng)建路由、處理輸入和輸出格式、身份驗證等等,而實際代碼將由Lambda 管理。
當(dāng)開啟 API 網(wǎng)關(guān)儀表板時,為您的網(wǎng)站創(chuàng)建一個新的API。然后,單擊操作創(chuàng)建資源在API 中創(chuàng)建一個新的URL 路徑。每個資源都可以支持一個或多個方法(GET,POST,put/ patch,DELETE) ,這些方法通過Actions > Create Method來添加。
例如,我們可以創(chuàng)建一個名為“post”的資源,它的路徑是“/posts”,它有兩種方法:
GET —fetch all posts 把所有的帖子都拿來
POST —create a new post 創(chuàng)建一個新的帖子
在這一點上,屏幕應(yīng)該是這樣的:
還需要處理顯示一個單一的帖子,更新一個帖子和刪除一個帖子。這些操作在REST API 中會有一個不同的路徑,這意味著需要創(chuàng)建一個新的資源。由于這個資源的路徑是“/posts / { post id }”,因此它將作為一個子資源創(chuàng)建。要做到這一點,首先單擊“posts”資源,然后去操作創(chuàng)建資源。這個資源將在路徑(post的 ID)中有一個參數(shù),可以通過將參數(shù)名包裝為“/posts / { post ID }”的括號來實現(xiàn)。創(chuàng)建資源后,將GET、 PUT 和DELETE 方法添加到其中。
API 現(xiàn)在看起來是這樣的:
每個方法將執(zhí)行相應(yīng)的AWS Lambda 函數(shù)。先創(chuàng)建這些函數(shù),然后將它們映射到適當(dāng)?shù)腁PI 方法。
創(chuàng)建 Lambda 函數(shù)
點擊AWS Lambda,點擊“Create a Lambdafunction”。下一個屏幕允許選擇編程語言(Node.js或 Python)和預(yù)定義的模板之一。選擇microservice-h(huán)ttp-endpoint,然后在下面的頁面中選擇API 名稱。也可以選擇空白函數(shù),并且不用任何預(yù)先編寫的代碼來編寫它。
最后,在可以插入代碼的頁面??梢灾苯釉陧撁嫔蠈戇@個函數(shù),或者將它作為壓縮存檔上傳(如果它包含自定義庫,則需要)。當(dāng)我們使用預(yù)定義模板時,函數(shù)是自動生成的,看起來是這樣的:
from __future__ importprint_function
import boto3
import json
print(‘Loading function’)
def respond(err,res=None):
return {
‘statusCode’: ‘400’ if err else ‘200’,
‘body’: err.message if err elsejson.dumps(res),
‘Content-Type’:‘a(chǎn)pplication/json’,
},
}
def lambda_handler(event,context):
‘‘‘Demonstrates a simple HTTP endpointusing API Gateway. You have full
access to the request and response payload,including headers and
status code.
To scan a DynamoDB table, make a GETrequest with the TableName as a
query string parameter. To put, update, ordelete an item, make a POST,
PUT, or DELETE request respectively,passing in the payload to the
DynamoDB API as a JSON body.
’’’
#print(“Received event:”+json.dumps(event, indent=2))
operations = {
‘DELETE’: lambda dynamo, x:dynamo.delete_item(**x),
‘GET’: lambda dynamo, x:dynamo.scan(**x),
‘POST’: lambda dynamo, x:dynamo.put_item(**x),
‘PUT’: lambda dynamo, x:dynamo.update_item(**x),
}
operation = event[‘httpMethod’]
if operation in operations:
payload = event[‘queryStringParameters’]if operation == ‘GET’ else json.loads(event[‘body’])
dynamo =boto3.resource(‘dynamodb’).Table(payload[‘TableName’])
return respond(None,operations[operation](dynamo, payload))
else:
returnrespond(ValueError(‘Unsupported method “{}”’.format(operation)))
雖然大多數(shù)情況下不需要很多代碼(許多人會使用關(guān)系數(shù)據(jù)庫而不是NoSQL DynamoDB 數(shù)據(jù)庫) ,但它為如何訪問HTTP 請求參數(shù)和如何輸出響應(yīng)設(shè)置了一個很好的例子。
在創(chuàng)建Lambda 函數(shù)時需要注意的另一件事是handler字段。它告訴Lambda 要執(zhí)行哪個函數(shù),以及函數(shù)所在的文件。例如,如果main.py 文件中有一個名為“myfunction”的函數(shù),那么處理程序的值將是“main.myfunction”。在創(chuàng)建函數(shù)之后,它們可以映射到相應(yīng)的API 端點。
要使API 調(diào)用 Lambda 函數(shù),請單擊一個API 方法,然后進入集成請求。在該頁上,將集成類型設(shè)置為Lambda 函數(shù),并輸入您的亞馬遜區(qū)域和所需函數(shù)的名稱。對于所有的API 方法都這樣做。
在部署之前,可以測試API。每個API 方法都有一個測試按鈕,它將執(zhí)行它并顯示輸出。
一旦一切準(zhǔn)備就緒,去action Deploy API 部署你的REST API。第一次,需要創(chuàng)造一個新的階段(例如,它可以被稱為prod 或生產(chǎn)),就像一個部署環(huán)境??梢杂卸鄠€階段,不同的階段有不同的基礎(chǔ)url 和配置??梢栽谄聊蛔髠?cè)的Mywebsite API Stages 下找到各個階段。點擊該階段的名稱以獲取API 的公共 URL,以及其他配置選項,如緩存和節(jié)流。
這里展示了一個基本的例子,一個serverless的REST API,使用AWS API 網(wǎng)關(guān)和Lambda 構(gòu)建。它展示了如何在不需要開發(fā)常見的API 管理特性的情況下輕松地創(chuàng)建REST API,比如認證、路由、緩存和速率限制等。
更進一步, 物聯(lián)網(wǎng)的快速采用受到正在通過技術(shù)創(chuàng)新改變其業(yè)務(wù)的公司的支持; 制造商正在提供低成本和高端的設(shè)備和物聯(lián)網(wǎng)平臺,使設(shè)備集成和管理成為可能。物聯(lián)網(wǎng)應(yīng)該轉(zhuǎn)向靈活、可靠和高成本效益的平臺,而在基礎(chǔ)設(shè)施、軟件、知識和員工方面投入最少。
IoT的無服務(wù)架構(gòu)
如何從零開始構(gòu)建一個物聯(lián)網(wǎng)解決方案,它的基礎(chǔ)設(shè)施和維護成本為零,只需要很少的營運成本。為了實現(xiàn)這個概念,可以使用AWS的云功能。 例如,創(chuàng)建實時報告遙測數(shù)據(jù)的設(shè)備模擬器,并通過 API 實時訪問這些信息。
AWS IoT 平臺是一個強大的物聯(lián)網(wǎng)框架。 它支持 MQTT 協(xié)議,MQTT 協(xié)議是應(yīng)用最廣泛的通信協(xié)議之一。 選擇支持持久化和處理數(shù)據(jù)的服務(wù)也是基于其定價和維護成本。
AWS中所使用的組件列表如下:
AWS IoT : 用于數(shù)據(jù)收集和設(shè)備管理,
DynamoDB: 文檔存儲以持久化數(shù)據(jù)讀數(shù),
AWS Lambda : 無服務(wù)器數(shù)據(jù)處理,
S3:用作靜態(tài)網(wǎng)站托管的塊存儲,
Gateway API :REST 訪問數(shù)據(jù)
總體數(shù)據(jù)流是以下方式工作的:
設(shè)備向 AWS IoT 發(fā)送小量數(shù)據(jù)(每5秒) ,
物聯(lián)網(wǎng)將數(shù)據(jù)存儲到 DynamoDB 表中*
Lambda函數(shù)每分鐘和每小時被觸發(fā)去做數(shù)據(jù)分析并將結(jié)果存儲回 DynamoDB,
API Gateway 通過 REST API 將 DynamoDB 的數(shù)據(jù)公開
靜態(tài) HTML 網(wǎng)站托管在 S3上,并使用 RESTAPI 來顯示實時數(shù)據(jù)圖表和分析
第二點乍看起來可能有點傻,因為可能會認為 DynamoDB 不是存儲原始時間序列數(shù)據(jù)的最佳選擇。 然而,這里是為了演示的目的??梢钥紤]使用 Firehose 作為從物聯(lián)網(wǎng)到 S3/reshift 和 EMR 集群的傳輸流來進行數(shù)據(jù)處理,但對于這個簡單實踐而言,這里只是一個臨時的做法。
架構(gòu)設(shè)置了以下關(guān)鍵參數(shù):
免費,如果沒有設(shè)備報告任何數(shù)據(jù)。 另外,通過亞馬遜的免費版,可以免費獲得少量的資源
由于每個選定組件的性質(zhì),高度可擴展且可以從AWS中獲取
啟動只需的最基本知識,只需要定義規(guī)則和用一種非常流行的語言編寫邏輯: JavaScript,Python 或者 Java
IoT無服務(wù)架構(gòu)的成本分析
假設(shè)后端操作每分鐘只需要處理幾個請求,這意味著大部分時間您的 CPU 處于空閑狀態(tài)。 假設(shè)不想為空閑時間買單。 因此,這里提出了無服務(wù)器架構(gòu)。
假設(shè)有10000個設(shè)備每15分鐘報告一小部分數(shù)據(jù),這就導(dǎo)致每月平均730個小時,每月約有2920萬個請求。AWS物聯(lián)網(wǎng)每100萬個請求花費5美元,DynamoDB 每秒花費0.0065美元,每秒需要花費50次。
通過 AWS IoT,每月將付出146美元左右的,14美元用于在 DynamoDB 中運行的最小存儲容量,總共有160美元,相當(dāng)于每臺設(shè)備每月0.02美元或者每次0.000005美元。 盡管這沒有考慮到 lambda、存儲器和 API 網(wǎng)關(guān)的使用,但它們實際上只是這些數(shù)字的一小部分,因此可以省略。
這是令人印象深刻的。物聯(lián)網(wǎng)解決方案與數(shù)以千計的設(shè)備連接,這將花費不到200美元每月。 然而,讓我們想象一下,如果一個企業(yè)的設(shè)備每秒鐘都在報告關(guān)鍵數(shù)據(jù)(而不是每隔15分鐘) ,而且有成千上萬的數(shù)據(jù)。 還愿意為FaaS付多少錢呢?
如果一萬臺設(shè)備每秒發(fā)送一條消息,月付款將超過1.36萬美元。如果是10萬臺設(shè)備, 每月每臺設(shè)備的費用增加到13.61美元,還是挺貴的。
無服務(wù)架構(gòu)IoT方案的優(yōu)缺點
所有這些數(shù)字意味著優(yōu)化的請求率將會立即和幾乎線性地導(dǎo)致月度費用減少。這就帶來了必須考慮的第二個重要結(jié)論,即所有權(quán)的總成本。 有一個虛擬的門檻值,超過這個閾值,無關(guān)緊要的方法就會變得非常昂貴,而且可能不會有效。
例如,傳統(tǒng)的體系結(jié)構(gòu)實現(xiàn)成本可能不是很大程度上取決于設(shè)備的數(shù)量或每秒請求的數(shù)量,而是取決于額外的運營費用,使用開源解決方案也可以降低成本。
毫無疑問,無服務(wù)架構(gòu)有許多優(yōu)點:
它將資本支出轉(zhuǎn)化為經(jīng)營支出,并通常降低經(jīng)營成本;
不必考慮內(nèi)部系統(tǒng)管理流程;
它減少了開發(fā)和部署成本和時間框架(更快的上市時間) ;
它具有可擴展性和容錯性
要考慮的第一個因素是為項目的需求, 如果不關(guān)心云鎖定,而且是一家創(chuàng)業(yè)公司,需要快速驗證想法,或者有一個很短的時間去營銷,或者解決方案不需要頻繁地將數(shù)據(jù)從設(shè)備傳輸?shù)皆?,因此可以將每臺設(shè)備的成本保持在相對較低的水平。
另一方面,如果正在構(gòu)建一個與云無關(guān)的、高度可定制的解決方案,并且使用實時數(shù)據(jù)進行操作,可以考慮使用自定義或開源物聯(lián)網(wǎng)解決方案。
審核編輯:符乾江
-
云服務(wù)
+關(guān)注
關(guān)注
0文章
803瀏覽量
38852 -
AWS
+關(guān)注
關(guān)注
0文章
427瀏覽量
24290 -
serverless
+關(guān)注
關(guān)注
0文章
65瀏覽量
4490
發(fā)布評論請先 登錄
相關(guān)推薦
評論