0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

程序員必看系列—FaaS的簡單實踐

電子設(shè)計 ? 來源:電子設(shè)計 ? 作者:電子設(shè)計 ? 2020-12-25 18:42 ? 次閱讀

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),

‘headers’: {

‘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)解決方案。

審核編輯:符乾江


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 云服務(wù)
    +關(guān)注

    關(guān)注

    0

    文章

    803

    瀏覽量

    38852
  • AWS
    AWS
    +關(guān)注

    關(guān)注

    0

    文章

    427

    瀏覽量

    24290
  • serverless
    +關(guān)注

    關(guān)注

    0

    文章

    65

    瀏覽量

    4490
收藏 人收藏

    評論

    相關(guān)推薦

    AI編程工具會不會搶程序員飯碗

    AI編程工具可輔助編程,減少手動編碼,提升效率,對程序員有積極影響也有挑戰(zhàn)。程序員需深化技能、拓寬知識應(yīng)對。長遠看,AI與人類程序員將共生共榮。
    的頭像 發(fā)表于 11-08 10:17 ?52次閱讀

    第五屆長沙·中國1024程序員節(jié)開幕

    據(jù)官方媒體報道,10月24日;? 第五屆長沙·中國1024程序員節(jié)在湖南湘江新區(qū)開幕;本次中國1024程序員節(jié)以“智能應(yīng)用新生態(tài)”為主題。設(shè)置有岳麓對話、技術(shù)英雄會、主題峰會及賽事、展覽等活動,一場
    的頭像 發(fā)表于 10-25 15:42 ?133次閱讀

    京東上萬程序員都AI用它!

    對大模型生成代碼進行智能修復(fù),為程序員開啟代碼漏洞修復(fù)的“自動駕駛”模式,不但減少人工接入、提高工作效率,更為企業(yè)抵御內(nèi)外部各種攻擊構(gòu)建起一道堅固的安全屏障,確保業(yè)務(wù)的連續(xù)性和穩(wěn)定性。 JoyCoder是京東云自主研發(fā)的一款輔助開發(fā)人員
    的頭像 發(fā)表于 07-17 16:29 ?213次閱讀
    京東上萬<b class='flag-5'>程序員</b>都AI用它!

    程序員節(jié)視頻創(chuàng)意大賽,用串口屏贏取千元大獎

    10月24日,程序員專屬的節(jié)日里,我們盛大開啟“程序員節(jié)視頻創(chuàng)意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創(chuàng)意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發(fā)表于 07-08 10:38 ?72次閱讀
    <b class='flag-5'>程序員</b>節(jié)視頻創(chuàng)意大賽,用串口屏贏取千元大獎

    程序員節(jié)視頻創(chuàng)意盛宴,邀您共襄盛舉!

    10月24日,程序員專屬的節(jié)日里,我們盛大開啟“程序員節(jié)視頻創(chuàng)意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創(chuàng)意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發(fā)表于 07-04 09:00 ?67次閱讀
    <b class='flag-5'>程序員</b>節(jié)視頻創(chuàng)意盛宴,邀您共襄盛舉!

    適者生存,程序員最終會流向哪……

    程序員沒有永遠的護城河??!就目前的互聯(lián)網(wǎng)大環(huán)境來看,it行業(yè)已經(jīng)是……
    的頭像 發(fā)表于 03-11 17:11 ?370次閱讀
    適者生存,<b class='flag-5'>程序員</b>最終會流向哪……

    薪資高、青春飯,是不是程序員=青樓?

    花期太短。技術(shù)迭代快,年齡大容易失業(yè)。 就這幾年的互聯(lián)網(wǎng)環(huán)境而言,不管是前端、Java、Android開發(fā)等等行業(yè)。已經(jīng)感受到程序員不是太卷就是工作難找,薪資過低。以前高工現(xiàn)在拿著中低程序員薪資
    發(fā)表于 03-06 21:32

    PSoC? kit59開發(fā)KIT_A2G_TC387_MOTORCTR中是否存在程序員支持對PSoC? 1系列MCU進行編程?

    PSoC? kit59 開發(fā)KIT_A2G_TC387_MOTORCTR中是否存在程序員支持對PSoC? 1 系列 MCU(如 cy8c29466、cy8c27xxx、cy8c21xxx)進行編程?
    發(fā)表于 03-05 06:47

    瑞薩Flash程序員V3 發(fā)布說明

    電子發(fā)燒友網(wǎng)站提供《瑞薩Flash程序員V3 發(fā)布說明.pdf》資料免費下載
    發(fā)表于 02-19 09:37 ?1次下載
    瑞薩Flash<b class='flag-5'>程序員</b>V3 發(fā)布說明

    2024程序員的未來方向如何走?還看今朝

    這幾年的IT行業(yè)想必大家已經(jīng)感受到了,Android、Java、前端等等程序員都經(jīng)歷了大廠……
    的頭像 發(fā)表于 02-02 09:45 ?757次閱讀
    2024<b class='flag-5'>程序員</b>的未來方向如何走?還看今朝

    1月18號“純鴻蒙”千帆啟航,程序員預(yù)備!

    。 如何正確看待鴻蒙? 我作為程序員來說,首先是看鴻蒙的發(fā)展、市場開發(fā)崗位、薪資以及前景。 這幾年對鴻蒙的發(fā)展情況來分析,從2019年開始鴻蒙的出來今天,華為鴻蒙取得了很大的成就。從“不兼容
    發(fā)表于 01-16 22:13

    誠邀報名 | GPT驅(qū)動的新程序員時代,開發(fā)者如何編程?

    2023開放原子開發(fā)者大會 . OPENATOM DEVELOPERS CONFERENCE GPT驅(qū)動的新程序員時代 我們該如何編程 2023.12.17 生成式AI正以旋風(fēng)般的速度重塑我們的工作
    的頭像 發(fā)表于 12-11 22:20 ?501次閱讀

    程序員表白程序

    電子發(fā)燒友網(wǎng)站提供《程序員表白程序.rar》資料免費下載
    發(fā)表于 11-21 10:41 ?16次下載
    <b class='flag-5'>程序員</b>表白<b class='flag-5'>程序</b>

    嵌入式程序員應(yīng)知道的幾個基本問題

    電子發(fā)燒友網(wǎng)站提供《嵌入式程序員應(yīng)知道的幾個基本問題.pdf》資料免費下載
    發(fā)表于 11-20 11:21 ?0次下載
    嵌入式<b class='flag-5'>程序員</b>應(yīng)知道的幾個基本問題

    智能低代碼洪流涌動程序員節(jié),華為云 Astro 觸發(fā) 1024 的乘法效應(yīng)!

    ? 從人工智能至量子計算,再到最新的云原生技術(shù),越來越多的榮耀被程序員斬獲。今年 1024 程序員節(jié),華為云 Astro 向全民致敬:「低代碼高產(chǎn)出?拓荒數(shù)字化版圖——人人皆是程序員」,為全球工程師
    的頭像 發(fā)表于 11-13 09:39 ?433次閱讀
    智能低代碼洪流涌動<b class='flag-5'>程序員</b>節(jié),華為云 Astro 觸發(fā) 1024 的乘法效應(yīng)!