国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

AWS-Lambda 使用入門

RobinQu / 1144人閱讀

摘要:例如,控制臺(tái)使用調(diào)用類型,因此當(dāng)您使用控制臺(tái)調(diào)用函數(shù)時(shí),控制臺(tái)將顯示返回的值。如果別名用于調(diào)用函數(shù),將為別名指向的版本。

場(chǎng)景:現(xiàn)在需要開(kāi)發(fā)一個(gè)前后端分離的應(yīng)用,后端采用 RESTful API 最為方便,但是如果這個(gè)后端服務(wù)會(huì)在一天中的某些時(shí)候有高并發(fā)的情況,使用什么樣的架構(gòu)最為簡(jiǎn)單呢?

剛思考這個(gè)問(wèn)題的時(shí)候我想到的解決方案可能有以下幾種:

使用CDN內(nèi)容分發(fā)網(wǎng)絡(luò),減少主服務(wù)器的壓力

使用LVS服務(wù)器負(fù)載均衡

使用緩存

硬件層 提高帶寬,使用SSD 硬盤,使用更好的服務(wù)器

代碼層,優(yōu)化代碼(使用性能更好的語(yǔ)言等

?

但以上的幾個(gè)方法都需要關(guān)注服務(wù)器的存儲(chǔ)和計(jì)算資源,以便隨時(shí)調(diào)整以滿足更高的性能,并且高并發(fā)的請(qǐng)求也是分時(shí)段的,配置了更高性能的服務(wù)器在訪問(wèn)量變低的時(shí)候也是資源浪費(fèi)。

這個(gè)時(shí)候可以使用 FaaS(Functions as a Service) 架構(gòu),跟傳統(tǒng)架構(gòu)不同在于,他們運(yùn)行于無(wú)狀態(tài)的容器中,可以由事件觸發(fā),短暫的,完全被第三方管理,功能上FaaS就是不需要關(guān)心后臺(tái)服務(wù)器或者應(yīng)用服務(wù),只需關(guān)心自己的代碼即可。其中AWS Lambda是目前最佳的FaaS實(shí)現(xiàn)之一。

AWS Lambda

AWS Lambda 是一項(xiàng)計(jì)算服務(wù),使用時(shí)無(wú)需預(yù)配置或管理服務(wù)器即可運(yùn)行代碼。AWS Lambda 只在需要時(shí)執(zhí)行代碼并自動(dòng)縮放。借助 AWS Lambda,幾乎可以為任何類型的應(yīng)用程序或后端服務(wù)運(yùn)行代碼,而且無(wú)需執(zhí)行任何管理?,F(xiàn)在 AWS Lambda 支持 Node.js、Java、C# 和 Python。

使用場(chǎng)景

Lambda 常見(jiàn)的應(yīng)用場(chǎng)景有以下幾種:

將Lambda 作為事件源用于 AWS 服務(wù)(比如音頻上傳到 s3后,觸發(fā) Lambda 音頻轉(zhuǎn)碼服務(wù),轉(zhuǎn)碼音頻文件

通過(guò) HTTPS (Amazon API Gateway) 實(shí)現(xiàn)的按需 Lambda 函數(shù)調(diào)用(配合 API Gateway創(chuàng)建簡(jiǎn)單的微服務(wù)

按需 Lambda 函數(shù)調(diào)用(使用自定義應(yīng)用程序構(gòu)建您自己的事件源)

計(jì)劃的事件(比如每天晚上12點(diǎn)生成報(bào)表發(fā)送到指定郵箱

下圖是將Lambda 作為事件源用于 AWS 服務(wù)案例的一個(gè)執(zhí)行流程圖:

詳細(xì)信息可以參考 官方文檔(https://docs.aws.amazon.com/z...)

通過(guò)上面的步驟,我們了解了如何使用一個(gè) Lambda 函數(shù),現(xiàn)在我們看下如何構(gòu)建 Lambda 函數(shù)。

如何構(gòu)建Lambda 創(chuàng)建 Lambda 函數(shù)

在創(chuàng)建 Lambda 函數(shù)時(shí),需要指定一個(gè)處理程序(此處理程序是代碼中的函數(shù)),AWS Lambda 可在服務(wù)執(zhí)行代碼時(shí)調(diào)用它。在 Python 中創(chuàng)建處理程序函數(shù)時(shí),使用以下一般語(yǔ)法結(jié)構(gòu)。

def handler_name(event, context): 
    ...
    return some_value

在該語(yǔ)法中,需要注意以下方面:

event - AWS Lambda 使用此參數(shù)將事件數(shù)據(jù)傳遞到處理程序。此參數(shù)通常是 Python dict 類型。它也可以是 liststr、int、floatNoneType 類型。

context - AWS Lambda 使用此參數(shù)向處理程序提供運(yùn)行時(shí)信息。此參數(shù)為 LambdaContext 類型。

(可選)處理程序可返回值。返回的值所發(fā)生的狀況取決于調(diào)用 Lambda 函數(shù)時(shí)使用的調(diào)用類型:

如果使用 RequestResponse 調(diào)用類型(同步執(zhí)行),AWS Lambda 會(huì)將 Python 函數(shù)調(diào)用的結(jié)果返回到調(diào)用 Lambda 函數(shù)的客戶端(在對(duì)調(diào)用請(qǐng)求的 HTTP 響應(yīng)中,序列化為 JSON)。例如,AWS Lambda 控制臺(tái)使用 RequestResponse 調(diào)用類型,因此當(dāng)您使用控制臺(tái)調(diào)用函數(shù)時(shí),控制臺(tái)將顯示返回的值。

如果處理程序返回 NONE,AWS Lambda 將返回 null。

如果使用 Event 調(diào)用類型(異步執(zhí)行),則丟棄該值。

context對(duì)象

在執(zhí)行 Lambda 函數(shù)時(shí),它可以與 AWS Lambda 服務(wù)進(jìn)行交互以獲取有用的運(yùn)行時(shí)信息,例如:

AWS Lambda 終止您的 Lambda 函數(shù)之前的剩余時(shí)間量(超時(shí)是 Lambda 函數(shù)配置屬性之一)。

與正在執(zhí)行的 Lambda 函數(shù)關(guān)聯(lián)的 CloudWatch 日志組和日志流。

返回到調(diào)用了 Lambda 函數(shù)的客戶端的 AWS 請(qǐng)求 ID??梢允褂么苏?qǐng)求 ID 向 AWS Support 進(jìn)行任何跟進(jìn)查詢。

如果通過(guò) AWS 移動(dòng)軟件開(kāi)發(fā)工具包調(diào)用 Lambda 函數(shù),則可了解有關(guān)調(diào)用 Lambda 函數(shù)的移動(dòng)應(yīng)用程序的更多信息。

Context 對(duì)象方法 (Python)

context 對(duì)象提供了以下方法:

get_remaining_time_in_millis()

返回在 AWS Lambda 終止函數(shù)前剩余的執(zhí)行時(shí)間(以毫秒為單位)。

Context 對(duì)象屬性 (Python)

context 對(duì)象提供了以下屬性:

function_name

正在執(zhí)行的 Lambda 函數(shù)的名稱。

function_version

正在執(zhí)行的 Lambda 函數(shù)版本。如果別名用于調(diào)用函數(shù),function_version 將為別名指向的版本。

invoked_function_arn

ARN 用于調(diào)用此函數(shù)。它可以是函數(shù) ARN 或別名 ARN。非限定的 ARN 執(zhí)行 $LATEST 版本,別名執(zhí)行它指向的函數(shù)版本。

memory_limit_in_mb

為 Lambda 函數(shù)配置的內(nèi)存限制(以 MB 為單位)。您在創(chuàng)建 Lambda 函數(shù)時(shí)設(shè)置內(nèi)存限制,并且隨后可更改此限制。

aws_request_id

與請(qǐng)求關(guān)聯(lián)的 AWS 請(qǐng)求 ID。這是返回到調(diào)用了 invoke 方法的客戶端的 ID。 注意如果 AWS Lambda 重試調(diào)用(例如,在處理 Kinesis 記錄的 Lambda 函數(shù)引發(fā)異常的情況下)時(shí),請(qǐng)求 ID 保持不變。

log_group_name

CloudWatch 日志組的名稱,可從該日志組中查找由 Lambda 函數(shù)寫入的日志。

log_stream_name

CloudWatch 日志流的名稱,可從該日志流中查找由 Lambda 函數(shù)寫入的日志。每次調(diào)用 Lambda 函數(shù)時(shí),日志流可能會(huì)更改,也可能不更改。如果 Lambda 函數(shù)無(wú)法創(chuàng)建日志流,則該值為空。當(dāng)向 Lambda 函數(shù)授予必要權(quán)限的執(zhí)行角色未包括針對(duì) CloudWatch Logs 操作的權(quán)限時(shí),可能會(huì)發(fā)生這種情況。

identity

通過(guò) AWS 移動(dòng)軟件開(kāi)發(fā)工具包進(jìn)行調(diào)用時(shí)的 Amazon Cognito 身份提供商的相關(guān)信息。它可以為空。identity.cognito_identity_ididentity.cognito_identity_pool_id

client_context

通過(guò) AWS 移動(dòng)軟件開(kāi)發(fā)工具包進(jìn)行調(diào)用時(shí)的客戶端應(yīng)用程序和設(shè)備的相關(guān)信息。它可以為空。client_context.client.installation_idclient_context.client.app_titleclient_context.client.app_version_nameclient_context.client.app_version_codeclient_context.client.app_package_nameclient_context.custom由移動(dòng)客戶端應(yīng)用程序設(shè)置的自定義值的 dict。client_context.env由 AWS 移動(dòng)軟件開(kāi)發(fā)工具包提供的環(huán)境信息的 dict。

示例

查看以下 Python 示例。它有一個(gè)函數(shù),此函數(shù)也是處理程序。處理程序通過(guò)作為參數(shù)傳遞的 context 對(duì)象接收運(yùn)行時(shí)信息。

from __future__ import print_function

import time
def get_my_log_stream(event, context):       
    print("Log stream name:", context.log_stream_name)
    print("Log group name:",  context.log_group_name)
    print("Request ID:",context.aws_request_id)
    print("Mem. limits(MB):", context.memory_limit_in_mb)
    # Code will execute quickly, so we add a 1 second intentional delay so you can see that in time remaining value.
    time.sleep(1) 
    print("Time remaining (MS):", context.get_remaining_time_in_millis())

此示例中的處理程序代碼只打印部分運(yùn)行時(shí)信息。每個(gè)打印語(yǔ)句均在 CloudWatch 中創(chuàng)建一個(gè)日志條目。如果您使用 Lambda 控制臺(tái)調(diào)用函數(shù),則控制臺(tái)會(huì)顯示日志。

日志記錄

您的 Lambda 函數(shù)可包含日志記錄語(yǔ)句。AWS Lambda 將這些日志寫入 CloudWatch。如果您使用 Lambda 控制臺(tái)調(diào)用 Lambda 函數(shù),控制臺(tái)將顯示相同的日志。

以下 Python 語(yǔ)句生成日志條目:

print 語(yǔ)句。

logging 模塊中的 Logger 函數(shù)(例如,logging.Logger.infologging.Logger.error)。

printlogging.* 函數(shù)將日志寫入 CloudWatch Logs 中,而 logging.* 函數(shù)將額外信息寫入每個(gè)日志條目中,例如時(shí)間戳和日志級(jí)別。

查找日志

可查找 Lambda 函數(shù)寫入的日志,如下所示:

在 AWS Lambda 控制臺(tái)中 - AWS Lambda 控制臺(tái)中的 Log output 部分顯示這些日志。

在響應(yīng)標(biāo)頭中,當(dāng)您以編程方式調(diào)用 Lambda 函數(shù)時(shí) - 如果您以編程方式調(diào)用 Lambda 函數(shù),則可添加 LogType參數(shù)以檢索已寫入 CloudWatch 日志的最后 4 KB 的日志數(shù)據(jù)。AWS Lambda 在響應(yīng)的 x-amz-log-results 標(biāo)頭中返回該日志信息。有關(guān)更多信息,請(qǐng)參閱Invoke。

如果您使用 AWS CLI 調(diào)用該函數(shù),則可指定帶有值 Tail --log-type parameter 來(lái)檢索相同信息。

在 CloudWatch 日志中 - 要在 CloudWatch 中查找您的日志,您需要知道日志組名稱和日志流名稱??梢允褂么a中的 context.logGroupNamecontext.logStreamName 屬性來(lái)獲取此信息。在運(yùn)行 Lambda 函數(shù)時(shí),控制臺(tái)或 CLI 中生成的日志將會(huì)向您顯示日志組名稱和日志流名稱。

函數(shù)錯(cuò)誤

如果 Lambda 函數(shù)引發(fā)異常,AWS Lambda 會(huì)識(shí)別失敗,將異常信息序列化為 JSON 并將其返回??紤]以下示例:

def always_failed_handler(event, context):
    raise Exception("I failed!")

在調(diào)用此 Lambda 函數(shù)時(shí),它將引發(fā)異常,并且 AWS Lambda 返回以下錯(cuò)誤消息:

{
  "errorMessage": "I failed!",
  "stackTrace": [
    [
      "/var/task/lambda_function.py",
      3,
      "my_always_fails_handler",
      "raise Exception("I failed!")"
    ]
  ],
  "errorType": "Exception"
}

詳細(xì)信息參考官方文檔:https://docs.aws.amazon.com/z...

注意事項(xiàng) AWS Lambda 限制

AWS Lambda 在使用中會(huì)強(qiáng)加一些限制,例如,程序包的大小或 Lambda 函數(shù)在每次調(diào)用中分得的內(nèi)存量。

每個(gè)調(diào)用的 AWS Lambda 資源限制

資源 限制
內(nèi)存分配范圍 最小值 = 128 MB/最大值 = 1536 MB (增量為 64 MB). 如果超過(guò)最大內(nèi)存使用量,則函數(shù)調(diào)用將會(huì)終止。
臨時(shí)磁盤容量(“/tmp”空間) 512MB
文件描述符數(shù) 1024
過(guò)程和線程數(shù)(合并總數(shù)量) 1024
每個(gè)請(qǐng)求的最大執(zhí)行時(shí)長(zhǎng) 300 秒
Invoke 請(qǐng)求正文有效負(fù)載大小 (RequestResponse/同步調(diào)用) 6MB
Invoke 請(qǐng)求正文有效負(fù)載大小 (Event/異步調(diào)用) 128 K

每個(gè)區(qū)域的 AWS Lambda 賬戶限制

資源 默認(rèn)限制
并發(fā)執(zhí)行數(shù) 1000

并發(fā)執(zhí)行是指在任意指定時(shí)間對(duì)您的函數(shù)代碼的執(zhí)行數(shù)量。您可以估計(jì)并發(fā)執(zhí)行計(jì)數(shù),但是,根據(jù) Lambda 函數(shù)是否處理來(lái)自基于流的事件源的事件,并發(fā)執(zhí)行計(jì)數(shù)會(huì)有所不同。

基于流的事件源 - 如果您創(chuàng)建 Lambda 函數(shù)處理來(lái)自基于流的服務(wù)(Amazon Kinesis Data Streams 或 DynamoDB 流)的事件,則每個(gè)流的分區(qū)數(shù)量是并發(fā)度單元。如果您的流有 100 個(gè)活動(dòng)分區(qū),則最多會(huì)有 100 個(gè) Lambda 函數(shù)調(diào)用并發(fā)運(yùn)行。然后,每個(gè) Lambda 函數(shù)按照分區(qū)到達(dá)的順序處理事件。

并非基于流的事件源 - 如果您創(chuàng)建 Lambda 函數(shù)處理來(lái)自并非基于流的事件源(例如,Amazon S3 或 API 網(wǎng)關(guān))的事件,則每個(gè)發(fā)布的事件是一個(gè)工作單元。因此,這些事件源發(fā)布的事件數(shù)(或請(qǐng)求數(shù))影響并發(fā)度。

您可以使用以下公式來(lái)估算并發(fā) Lambda 函數(shù)調(diào)用數(shù)。

events (or requests) per second * function duration

例如,考慮一個(gè)處理 API Gateway 的 Lambda 函數(shù)。假定 Lambda 函數(shù)平均用時(shí) 0.3 秒,API Gateway 每秒請(qǐng)求 1000 次。因此,Lambda 函數(shù)有 300 個(gè)并發(fā)執(zhí)行。

?

具體信息參考Lambda 函數(shù)并行執(zhí)行

AWS Lambda 部署限制

項(xiàng)目 默認(rèn)限制
Lambda 函數(shù)部署程序包大小 (壓縮的 .zip/.jar 文件) 50 MB
每個(gè)區(qū)域可以上傳的所有部署程序包的總大小 75GB
可壓縮到部署程序包中的代碼/依賴項(xiàng)的大小 (未壓縮的 .zip/.jar 大小).注意每個(gè) Lambda 函數(shù)都會(huì)在其的 /tmp 目錄中接收到額外的 500 MB 的非持久性磁盤空間。該 /tmp 目錄可用于在函數(shù)初始化期間加載額外的資源,如依賴關(guān)系庫(kù)或數(shù)據(jù)集。 250MB
環(huán)境變量集的總大小 4 KB
本文內(nèi)容主要參考 AWS Lambda 官方文檔,詳細(xì)信息請(qǐng)?jiān)L問(wèn) https://docs.aws.amazon.com/z...
參考鏈接

AWS Lambda 開(kāi)發(fā)入門

創(chuàng)建部署程序包 (Python)

Lambda 函數(shù)并行執(zhí)行

高并發(fā)解決方案

如何優(yōu)化網(wǎng)站高并發(fā)訪問(wèn)?

高并發(fā)的解決方案

Serverless開(kāi)發(fā)編程思想

一個(gè)簡(jiǎn)單的 Serverless 架構(gòu)例子

使用lambda帶來(lái)的架構(gòu)優(yōu)勢(shì)


最后,感謝女朋友支持。

歡迎關(guān)注(April_Louisa) 請(qǐng)我喝芬達(dá)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/41258.html

相關(guān)文章

  • kong系列:admin-api使用

    摘要:注意,此標(biāo)志不反映數(shù)據(jù)庫(kù)本身的健康狀況。每一個(gè)匹配給定路線的請(qǐng)求都將被提交給它的相關(guān)服務(wù)。字段解釋是否必填協(xié)議列表,。 部署好kong之后,則需要將我們自己的接口加入到kong中管理,kong提供了比較全面的restful api,每個(gè)版本會(huì)有所不同,下面的記錄基于kong v0.14.x kong的8001端口是resful admin api,服務(wù)、路由、配置都是通過(guò)這個(gè)端口進(jìn)行管...

    Dionysus_go 評(píng)論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥(niǎo)教程框架中文手冊(cè)入門目標(biāo)使用搭建通過(guò)對(duì)數(shù)據(jù)增刪查改沒(méi)了純粹占行用的拜 后端API入門學(xué)習(xí)指北 了解一下一下概念. RESTful API標(biāo)準(zhǔn)] 所有的API都遵循[RESTful API標(biāo)準(zhǔn)]. 建議大家都簡(jiǎn)單了解一下HTTP協(xié)議和RESTful API相關(guān)資料. 阮一峰:理解RESTful架構(gòu) 阮一峰:RESTful API 設(shè)計(jì)指南 RESTful API指南 依賴注入 D...

    Jeffrrey 評(píng)論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥(niǎo)教程框架中文手冊(cè)入門目標(biāo)使用搭建通過(guò)對(duì)數(shù)據(jù)增刪查改沒(méi)了純粹占行用的拜 后端API入門學(xué)習(xí)指北 了解一下一下概念. RESTful API標(biāo)準(zhǔn)] 所有的API都遵循[RESTful API標(biāo)準(zhǔn)]. 建議大家都簡(jiǎn)單了解一下HTTP協(xié)議和RESTful API相關(guān)資料. 阮一峰:理解RESTful架構(gòu) 阮一峰:RESTful API 設(shè)計(jì)指南 RESTful API指南 依賴注入 D...

    sf190404 評(píng)論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥(niǎo)教程框架中文手冊(cè)入門目標(biāo)使用搭建通過(guò)對(duì)數(shù)據(jù)增刪查改沒(méi)了純粹占行用的拜 后端API入門學(xué)習(xí)指北 了解一下一下概念. RESTful API標(biāo)準(zhǔn)] 所有的API都遵循[RESTful API標(biāo)準(zhǔn)]. 建議大家都簡(jiǎn)單了解一下HTTP協(xié)議和RESTful API相關(guān)資料. 阮一峰:理解RESTful架構(gòu) 阮一峰:RESTful API 設(shè)計(jì)指南 RESTful API指南 依賴注入 D...

    Airmusic 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<