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

資訊專欄INFORMATION COLUMN

AWS-Lambda 使用入門

RobinQu / 1133人閱讀

摘要:例如,控制臺使用調用類型,因此當您使用控制臺調用函數時,控制臺將顯示返回的值。如果別名用于調用函數,將為別名指向的版本。

場景:現在需要開發一個前后端分離的應用,后端采用 RESTful API 最為方便,但是如果這個后端服務會在一天中的某些時候有高并發的情況,使用什么樣的架構最為簡單呢?

剛思考這個問題的時候我想到的解決方案可能有以下幾種:

使用CDN內容分發網絡,減少主服務器的壓力

使用LVS服務器負載均衡

使用緩存

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

代碼層,優化代碼(使用性能更好的語言等

?

但以上的幾個方法都需要關注服務器的存儲和計算資源,以便隨時調整以滿足更高的性能,并且高并發的請求也是分時段的,配置了更高性能的服務器在訪問量變低的時候也是資源浪費。

這個時候可以使用 FaaS(Functions as a Service) 架構,跟傳統架構不同在于,他們運行于無狀態的容器中,可以由事件觸發,短暫的,完全被第三方管理,功能上FaaS就是不需要關心后臺服務器或者應用服務,只需關心自己的代碼即可。其中AWS Lambda是目前最佳的FaaS實現之一。

AWS Lambda

AWS Lambda 是一項計算服務,使用時無需預配置或管理服務器即可運行代碼。AWS Lambda 只在需要時執行代碼并自動縮放。借助 AWS Lambda,幾乎可以為任何類型的應用程序或后端服務運行代碼,而且無需執行任何管理。現在 AWS Lambda 支持 Node.js、Java、C# 和 Python。

使用場景

Lambda 常見的應用場景有以下幾種:

將Lambda 作為事件源用于 AWS 服務(比如音頻上傳到 s3后,觸發 Lambda 音頻轉碼服務,轉碼音頻文件

通過 HTTPS (Amazon API Gateway) 實現的按需 Lambda 函數調用(配合 API Gateway創建簡單的微服務

按需 Lambda 函數調用(使用自定義應用程序構建您自己的事件源)

計劃的事件(比如每天晚上12點生成報表發送到指定郵箱

下圖是將Lambda 作為事件源用于 AWS 服務案例的一個執行流程圖:

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

通過上面的步驟,我們了解了如何使用一個 Lambda 函數,現在我們看下如何構建 Lambda 函數。

如何構建Lambda 創建 Lambda 函數

在創建 Lambda 函數時,需要指定一個處理程序(此處理程序是代碼中的函數),AWS Lambda 可在服務執行代碼時調用它。在 Python 中創建處理程序函數時,使用以下一般語法結構。

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

在該語法中,需要注意以下方面:

event - AWS Lambda 使用此參數將事件數據傳遞到處理程序。此參數通常是 Python dict 類型。它也可以是 liststrintfloatNoneType 類型。

context - AWS Lambda 使用此參數向處理程序提供運行時信息。此參數為 LambdaContext 類型。

(可選)處理程序可返回值。返回的值所發生的狀況取決于調用 Lambda 函數時使用的調用類型:

如果使用 RequestResponse 調用類型(同步執行),AWS Lambda 會將 Python 函數調用的結果返回到調用 Lambda 函數的客戶端(在對調用請求的 HTTP 響應中,序列化為 JSON)。例如,AWS Lambda 控制臺使用 RequestResponse 調用類型,因此當您使用控制臺調用函數時,控制臺將顯示返回的值。

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

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

context對象

在執行 Lambda 函數時,它可以與 AWS Lambda 服務進行交互以獲取有用的運行時信息,例如:

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

與正在執行的 Lambda 函數關聯的 CloudWatch 日志組和日志流。

返回到調用了 Lambda 函數的客戶端的 AWS 請求 ID。可以使用此請求 ID 向 AWS Support 進行任何跟進查詢。

如果通過 AWS 移動軟件開發工具包調用 Lambda 函數,則可了解有關調用 Lambda 函數的移動應用程序的更多信息。

Context 對象方法 (Python)

context 對象提供了以下方法:

get_remaining_time_in_millis()

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

Context 對象屬性 (Python)

context 對象提供了以下屬性:

function_name

正在執行的 Lambda 函數的名稱。

function_version

正在執行的 Lambda 函數版本。如果別名用于調用函數,function_version 將為別名指向的版本。

invoked_function_arn

ARN 用于調用此函數。它可以是函數 ARN 或別名 ARN。非限定的 ARN 執行 $LATEST 版本,別名執行它指向的函數版本。

memory_limit_in_mb

為 Lambda 函數配置的內存限制(以 MB 為單位)。您在創建 Lambda 函數時設置內存限制,并且隨后可更改此限制。

aws_request_id

與請求關聯的 AWS 請求 ID。這是返回到調用了 invoke 方法的客戶端的 ID。 注意如果 AWS Lambda 重試調用(例如,在處理 Kinesis 記錄的 Lambda 函數引發異常的情況下)時,請求 ID 保持不變。

log_group_name

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

log_stream_name

CloudWatch 日志流的名稱,可從該日志流中查找由 Lambda 函數寫入的日志。每次調用 Lambda 函數時,日志流可能會更改,也可能不更改。如果 Lambda 函數無法創建日志流,則該值為空。當向 Lambda 函數授予必要權限的執行角色未包括針對 CloudWatch Logs 操作的權限時,可能會發生這種情況。

identity

通過 AWS 移動軟件開發工具包進行調用時的 Amazon Cognito 身份提供商的相關信息。它可以為空。identity.cognito_identity_ididentity.cognito_identity_pool_id

client_context

通過 AWS 移動軟件開發工具包進行調用時的客戶端應用程序和設備的相關信息。它可以為空。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由移動客戶端應用程序設置的自定義值的 dict。client_context.env由 AWS 移動軟件開發工具包提供的環境信息的 dict

示例

查看以下 Python 示例。它有一個函數,此函數也是處理程序。處理程序通過作為參數傳遞的 context 對象接收運行時信息。

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

此示例中的處理程序代碼只打印部分運行時信息。每個打印語句均在 CloudWatch 中創建一個日志條目。如果您使用 Lambda 控制臺調用函數,則控制臺會顯示日志。

日志記錄

您的 Lambda 函數可包含日志記錄語句。AWS Lambda 將這些日志寫入 CloudWatch。如果您使用 Lambda 控制臺調用 Lambda 函數,控制臺將顯示相同的日志。

以下 Python 語句生成日志條目:

print 語句。

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

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

查找日志

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

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

在響應標頭中,當您以編程方式調用 Lambda 函數時 - 如果您以編程方式調用 Lambda 函數,則可添加 LogType參數以檢索已寫入 CloudWatch 日志的最后 4 KB 的日志數據。AWS Lambda 在響應的 x-amz-log-results 標頭中返回該日志信息。有關更多信息,請參閱Invoke。

如果您使用 AWS CLI 調用該函數,則可指定帶有值 Tail --log-type parameter 來檢索相同信息。

在 CloudWatch 日志中 - 要在 CloudWatch 中查找您的日志,您需要知道日志組名稱和日志流名稱。可以使用代碼中的 context.logGroupNamecontext.logStreamName 屬性來獲取此信息。在運行 Lambda 函數時,控制臺或 CLI 中生成的日志將會向您顯示日志組名稱和日志流名稱。

函數錯誤

如果 Lambda 函數引發異常,AWS Lambda 會識別失敗,將異常信息序列化為 JSON 并將其返回。考慮以下示例:

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

在調用此 Lambda 函數時,它將引發異常,并且 AWS Lambda 返回以下錯誤消息:

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

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

注意事項 AWS Lambda 限制

AWS Lambda 在使用中會強加一些限制,例如,程序包的大小或 Lambda 函數在每次調用中分得的內存量。

每個調用的 AWS Lambda 資源限制

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

每個區域的 AWS Lambda 賬戶限制

資源 默認限制
并發執行數 1000

并發執行是指在任意指定時間對您的函數代碼的執行數量。您可以估計并發執行計數,但是,根據 Lambda 函數是否處理來自基于流的事件源的事件,并發執行計數會有所不同。

基于流的事件源 - 如果您創建 Lambda 函數處理來自基于流的服務(Amazon Kinesis Data Streams 或 DynamoDB 流)的事件,則每個流的分區數量是并發度單元。如果您的流有 100 個活動分區,則最多會有 100 個 Lambda 函數調用并發運行。然后,每個 Lambda 函數按照分區到達的順序處理事件。

并非基于流的事件源 - 如果您創建 Lambda 函數處理來自并非基于流的事件源(例如,Amazon S3 或 API 網關)的事件,則每個發布的事件是一個工作單元。因此,這些事件源發布的事件數(或請求數)影響并發度。

您可以使用以下公式來估算并發 Lambda 函數調用數。

events (or requests) per second * function duration

例如,考慮一個處理 API Gateway 的 Lambda 函數。假定 Lambda 函數平均用時 0.3 秒,API Gateway 每秒請求 1000 次。因此,Lambda 函數有 300 個并發執行。

?

具體信息參考Lambda 函數并行執行

AWS Lambda 部署限制

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

AWS Lambda 開發入門

創建部署程序包 (Python)

Lambda 函數并行執行

高并發解決方案

如何優化網站高并發訪問?

高并發的解決方案

Serverless開發編程思想

一個簡單的 Serverless 架構例子

使用lambda帶來的架構優勢


最后,感謝女朋友支持。

歡迎關注(April_Louisa) 請我喝芬達

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41258.html

相關文章

  • kong系列:admin-api使用

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

    Dionysus_go 評論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數據增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...

    Jeffrrey 評論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數據增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...

    sf190404 評論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數據增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...

    Airmusic 評論0 收藏0

發表評論

0條評論

RobinQu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<