使用AWS CloudWatch 调优Lambda函数 | 技术头条
戳藍字“CSDN云計算”關注我們哦!
技術頭條:干貨、簡潔、多維全面。更多云計算精華知識盡在眼前,get要點、solve難題,統統不在話下!
譯者:風車牛馬
整理:劉丹
Kyle Galbraith,高級軟件工程師,AWS認證專業解決方案架構師。Kyle Galbraith開門見山的提到:“對于使用Serverless和AWS Lambda的新人來說,通常我們會為他們提供需要的功能。我們編碼時會考慮服務會做什么,它會依賴什么?!?/span>
?
當涉及到提供新服務時,需要對一些性能做出預測。估計有多少內存來提供功能;大致了解了運行函數并退出所需的時間,無服務器架構允許我們快速部署。
?
如果我們預測和估計錯誤呢?內存不足或將時間限制設置的較低,就會出現大量錯誤。亞馬遜網絡服務不會出現這些問題,這是一種責任。同時AWS為我們提供了一些工具和方法,允許我們自己檢查這些問題。
?
本文我們將研究如何使用AWS CloudWatch來更好地理解Lambda函數——實際使用了多少內存和執行時間。在此基礎上,可以調整功能,以平衡成本問題,同時不降低性能。
AWS CloudWatch
?
早在去年11月,AWS就發布了CloudWatch。幾乎所有的AWS服務都會創建某種類型的日志,這些日志通常包含許多關于服務器的有價值的信息。
?
該版本發布之前,需要幾跳地址獲取這些數據并將其可視化。雖然可以對日志組執行基本查詢,但很多時候,必須將日志轉存到能夠查詢的地方。
?
CloudWatch 避免了這樣的負擔,可以直接查詢所感興趣的數據點。例如,查詢函數實際使用了多少內存,針對各種不同的AWS服務編寫自己的定制查詢。這對于生成特定服務器的報告和可視化非常有用。
?
我們下面來探索CloudWatch如何優化分配的內存,從而節省一點錢。注意,CloudWatch 中運行查詢的價格是每GB掃描數據0.005美元,所以要注意查詢的數據量。
?
舉個例子——AWS Lambda函數
?
我們首先假設一個實際應用的場景,已經過分分配了Lambda函數的內存。
?
我編寫了一個Lambda函數自動創建MailChimp活動。該函數通過查詢一個谷歌列表來獲取一周的文章,然后使用電子郵件模板創建MailChimp活動。
?
這個函數一周運行一次,所以不會耗盡資源。但我們假設這個函數每周被調用10,000次。想象一下,這樣跟得上嗎? 下面開始詳細討論。
?
首先看看為這個連續不斷的函數準備了多少內存,可以通過serverless.yml文件來看到。
?
有趣的是,我們在這個YAML文件中沒有看到任何有關內存的內容,為什么?這意味著使用了無服務器框架的默認內存值,為這個函數提供了1024 MB的內存。
?
對于讀取列表并調用MailChimp API的函數,我們真的需要這些內存嗎?也許吧,但實際上我們可以通過使用CloudWatch得到答案。
?
確定超配的內存
?
CloudWatch 附帶了許多開箱即用的示例查詢。您可以使用它們查看最近的CloudTrail事件、查詢VPC流日志、查看Route53區域正在接收多少請求等等。
?
這里感興趣的是超配給內存的查詢。我們可以通過登錄到AWS控制臺,然后進入CloudWatch來查詢結果。一旦進入CloudWatch服務,我們就可以選擇日志下面的鏈接。
進入CloudWatch 頁面后,我們可以選擇Sample Queries下拉菜單,然后打開Lambda選項。在這里,我們看到“Determine the amount of overprovisioned memory sample query” (查詢過量內存的數量),然后選擇它。如下所示:
?
查詢的結果有已分配的內存、最小使用量、平均使用量、最大使用量,并計算內存的過度分配情況。在選擇的時間段內(默認為1小時)進行計算。
?
在查詢編輯器中,我們還看到一個下拉菜單,它允許我們選擇查詢的AWS資源。
?
我們看到這個函數過去四周運行了四次。假設這個函數每周被調用10,000次,函數在過去4周內被調用了40000次。可以得出以下結果。
?
我們所分配的內存是976 MB,但是平均內存使用量只有95 MB,這意味著函數被超額分配了881 MB。只使用提供的內存的9%意味著什么呢?
?
最簡單的答案是,我們在浪費資源,因此也在浪費金錢。讓我們來看看價格細分。
?
Lambda函數提供1024 MB內存,每次調用大約需要7000毫秒執行。對于每周10,000次調用,我們的成本分解如下所示。
?
以每GB每秒0.00001667美元的速率,我們得到的總成本為:
?
在此計算中,還有幾美分需要考慮到請求的成本,但是在這個場景中,這些成本非常小。
老實說,一個月運行4萬次的函數每月5美元似乎不算太糟。實際上不太值得您花時間優化它,但是為了方便討論,假設將內存更改為128mb,這將如何影響我們的成本?
?
以每GB每秒0.00001667美元的速率,我們得到的總成本為:
?
哇,現在比1024 MB內存時便宜88%。好吧,這有什么大不了的,每個月只能省下4美元,可能不會對你的AWS賬單產生明顯的影響。
?
但是請記住,當我們使用無服務器框架來提供Lambda函數時,1024 MB是提供給它的默認內存。那么4-5名開發人員組成的團隊需要將該Lambda函數遷移到無服務器架構時,情況會怎樣? 他們是否對實際需要的內存做了足夠分析?也許會吧,也許不會。
?
進一步假設有300個Lambda函數,它們的性能和我們的例子相似。當我們的功能供大于求時,無服務器架構的成本將是每月4.66 x 300美元是1398.00美元。如果我們對內存進行調優,成本會顯著降低,每月0.58 x 300美元是174美元。對于如此小的變化,差異是巨大的。
?
其他要點
?
對于上述示例,我們將內存從1024 MB減少到128 MB,并且函數的性能沒有改變,函數仍然在7秒內完成了其功能。
?
然而情況并不總是這樣。在某些運行情況下,將所分配的內存更改88%將會更改函數執行所需的時間。如果減少內存導致增加6倍的時間來完成,那么反而影響了性能和效率。
?
另一方面,增加內存分配可以更快的調用。對于上述示例函數,我們可以將內存從1024 MB更改為2048 MB,并將執行時間從7秒降低到3.5秒。這意味著我們可以將函數的執行時間縮短一半,而不需要比1024 MB時多花一分錢。
?
要記住的是,可以根據需要對內存分配進行微調。超過900 MB的過剩內存,明顯說明您可以縮減內存。能否調整到128mb可能會根據具體情況而定。
?
結論
?
Serverless是一種非常強大的體系結構,可以帶來很多好處。節省成本,讓開發人員將精力放在業務驅動而不是服務器上。但是,如果沒有正確地配置和調優函數,成本效益就會很快消失。
?
要對分配給函數的內存進行調優,CloudWatch 是一個很好的方法。正如在示例函數中看到的,我們可以將函數調優到它實際使用的值(節省88%)。內存是成本控制的一個杠桿。另外,它還能以同樣的成本獲得性能優勢。
福利
掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!
推薦閱讀:
圖解分布式架構的發展和演進 | 技術干貨
Docker 系列學習文章 | 什么是容器云?
任正非:華為海思芯片不是“備胎”!
揭秘清華 AI 學堂班:姚期智擔任首席教授,2019 年首批招收 30 人
Google Android 向華為“閉源”!華為手機迎來至暗時刻!
"兩年前我對區塊鏈的了解為零, 兩年后我成了工程師" 我是如何得到第一份工作的?
《使女的故事》大火,AI是背后最大推手?
真香,朕在看了!
總結
以上是生活随笔為你收集整理的使用AWS CloudWatch 调优Lambda函数 | 技术头条的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 290种零食大统计,谁能唤起80、90后
- 下一篇: 楼上家家没有住人楼下住户下水堵塞造成的损