AWS強大的lambda
自從幾年前換工作後,我所參與的項目一直都是基於AWS雲服務的架構,我慢慢對serverless的相關基礎建設有了一定了解和實踐經驗。其中lambda是我心中最強大的serveless服務,是很好的高併發業務解決方案。
- 什麼是lambda
lambda是AWS提供的一種無服務器的計算服務,根據請求流量自動擴展應用服務,
-
按需付費
因爲是無服務器,所以無需提前準備(租用)好物理服務器。按照計算次數(請求次數)來收取費用,非常節省運維成本。 -
支持高併發
目前默認對每個賬號的每個region(區域)最大併發執行數是1000,也就是說如果同一秒來了1000個計算請求,那麼它可以最多併發處理1000個請求。最大併發執行數可以根據實際需求進行調整和設置。 -
事件驅動
lambda可以被多種事件(event)觸發執行,比如HTTP請求,數據庫操作,文件上傳等等。
-
支持多種編程語言
lambda可以支持多種編程語言,比如Node.js, Python, Java, Go, Ruby以及.NET Core(C#),基本覆蓋了主流編程技術,可以選擇我們項目中對應實用的編程語言進行開發。特別是對NodeJS和Python的SDK最爲全面,這也是很多公司選擇AWS lambda的原因之一。
- lambda如何創建
有兩種方式可以創建lambda,一種是通過AWS控制檯進行創建,通過創建頁面的引導進行相關設置,在線編寫lambda的邏輯處理代碼。另一種就是通過上傳代碼包,從而創建lambda。
對於代碼包(通常是zip包)是有大小限制的,最大不能超過250M。所以如果你的zip包太大,可以選擇將這些代碼打包成鏡像,然後再上傳到AWS。
- lambda的常見實用場景
最常見的一個使用案例是文件處理後需要進一步處理的業務。例如視頻網站在用戶上傳了原始視頻後,需要對視頻進行壓縮,然後把壓縮文件重新寫入s3,併發送通知給用戶,比如用郵件的方式。
那麼對於這種併發量無法簡單估算且處理邏輯比較清晰的場景,可以選擇用lambda去完成。lambda的代碼流程:
-
s3 event去觸發lambda,傳遞message給lambda function。
-
lambda對message中的s3文件進行下載,然後壓縮,生成新的文件。
3)lambda上傳新生成的文件到s3,並寫入記錄到數據庫。
4)lambda通過AWS簡單郵件服務(SES)發送通知郵件給用戶。
代碼如下所示:
const AWS = require('aws-sdk');
const ses = new AWS.SES();
exports.handler = async (event) => {
const params = {
Destination: {
ToAddresses: ['[email protected]']
},
Message: {
Body: {
Text: {
Data: 'Hello, this is the email body.'
}
},
Subject: {
Data: 'Subject of the email'
}
},
Source: '[email protected]'
};
try {
const result = await ses.sendEmail(params).promise();
console.log('Email sent:', result);
return {
statusCode: 200,
body: JSON.stringify('Email sent successfully!')
};
} catch (error) {
console.error('Error sending email:', error);
return {
statusCode: 500,
body: JSON.stringify('Error sending email.')
};
}
};
Lambda還有更多實際的配置和使用案例,比如怎麼和SQS、SNS服務進行集成,我會在後續的博客中繼續聊。