動(dòng)架構(gòu):Serverless Examples的S3/SQS/SNS/Kinesis全鏈路實(shí)戰(zhàn))
一文吃透事件驅(qū)動(dòng)架構(gòu)Serverless Examples的S3/SQS/SNS/Kinesis全鏈路實(shí)戰(zhàn)【免費(fèi)下載鏈接】examplesServerless Examples – A collection of boilerplates and examples of serverless architectures built with the Serverless Framework on AWS Lambda, Microsoft Azure, Google Cloud Functions, and more.項(xiàng)目地址: https://gitcode.com/gh_mirrors/exa/examplesServerless Examples是 Serverless Framework 官方的無服務(wù)器架構(gòu)示例庫收錄了上百個(gè)可直接部署到 AWS Lambda 的樣板項(xiàng)目。本文將帶你用其中的 S3、SQS、SNS、Kinesis 四類事件驅(qū)動(dòng)示例快速吃透事件驅(qū)動(dòng)架構(gòu)EDA的核心套路如何讓系統(tǒng)事件來了才干活實(shí)現(xiàn)松耦合、高可用的全鏈路處理 什么是事件驅(qū)動(dòng)架構(gòu)為什么無服務(wù)器場(chǎng)景特別需要它事件驅(qū)動(dòng)架構(gòu)Event-Driven Architecture的核心思想是組件之間不直接互相調(diào)用而是通過事件解耦。事件源上傳了一個(gè)文件、產(chǎn)生了一條消息發(fā)出信號(hào)下游消費(fèi)者按需訂閱處理。對(duì)比項(xiàng)請(qǐng)求-響應(yīng)架構(gòu)事件驅(qū)動(dòng)架構(gòu)耦合度調(diào)用方必須等處理完成立即返回后臺(tái)異步處理容錯(cuò)性下游掛掉則整體失敗隊(duì)列緩沖 自動(dòng)重試彈性伸縮需預(yù)估峰值事件來了才創(chuàng)建實(shí)例零事件零成本在 Serverless 場(chǎng)景下這個(gè)優(yōu)勢(shì)被放大到極致Lambda 函數(shù)天然就是事件觸發(fā)器S3 丟一個(gè)文件、SQS 進(jìn)一條消息函數(shù)就被喚醒處理完即休眠。Serverless Examples 恰好為每一種主流事件源都準(zhǔn)備了現(xiàn)成模板本文按S3 → SQS → SNS → Kinesis → 工作流編排的順序逐一拆解。S3 事件驅(qū)動(dòng)文件一上傳鏈路自動(dòng)啟動(dòng)S3 是事件驅(qū)動(dòng)架構(gòu)里最常見的入口事件源。倉庫提供了多個(gè)不同語言/深度的示例雙桶文件復(fù)制aws-node-s3-file-replicator/Node.js和 aws-golang-s3-file-replicator/Go。向輸入桶上傳文件后Lambda 自動(dòng)監(jiān)聽s3:ObjectCreated事件并復(fù)制到輸出桶。其 serverless.yml 用serverless-lift插件的storageconstruct 聲明兩個(gè)桶s3事件直接綁定桶名無需手寫 CloudFormation。音頻自動(dòng)轉(zhuǎn)寫aws-node-simple-transcribe-s3/上傳 .wav 文件即觸發(fā) Transcribe 轉(zhuǎn)寫JSON 結(jié)果回寫 S3——上傳即處理的經(jīng)典管道。圖片智能識(shí)別aws-node-rekognition-analysis-s3-image/配合 lib/imageAnalyser.js 識(shí)別圖片內(nèi)容。經(jīng)驗(yàn)S3 事件適合做入口層但 S3 通知只重試有限次數(shù)真正重要的數(shù)據(jù)流建議讓 S3 事件把任務(wù)投遞給 SQS/SNS下一節(jié)把可靠性交給消息隊(duì)列。SQS 生產(chǎn)者-消費(fèi)者事件驅(qū)動(dòng)全鏈路的核心骨架SQSSimple Queue Service是事件驅(qū)動(dòng)架構(gòu)的緩沖帶倉庫提供了四個(gè)循序漸進(jìn)的示例1. 最小可用骨架aws-node-sqs-workeraws-node-sqs-worker/ 演示標(biāo)準(zhǔn)的生產(chǎn)者-消費(fèi)者模式producer函數(shù)由httpApi事件觸發(fā)POST /produce收到請(qǐng)求后把 JSON 投進(jìn)JobsQueue立即返回 202調(diào)用方無需等待處理完成consumer函數(shù)由sqs事件源觸發(fā)以batchSize: 10批量消費(fèi)消息并處理。事件綁定全部聲明在 serverless.yml 中生產(chǎn)端通過QUEUE_URL環(huán)境變量拿到隊(duì)列地址邏輯代碼見 handler.js。2. 完整架構(gòu)圖aws-ruby-sqs-with-dynamodbaws-ruby-sqs-with-dynamodb/ 是最全鏈路的示例API Gateway → producer Lambda → SQS → worker Lambda → DynamoDB失敗消息進(jìn)死信隊(duì)列DLQ并觸發(fā) CloudWatch 郵件告警。整體事件鏈路如下圖中紫色橢圓區(qū)域是serverless-lift插件自動(dòng)創(chuàng)建的SQS 隊(duì)列、worker、DLQ、CloudWatch 告警部署時(shí)一行 YAML 即可搞定——這正是事件驅(qū)動(dòng) IaC 的便利性。請(qǐng)求參數(shù)用dry-schema校驗(yàn)后生成彩票優(yōu)惠券記錄存入 DynamoDB結(jié)果可在控制臺(tái)驗(yàn)證3. 進(jìn)階變體示例特點(diǎn)適合學(xué)習(xí)點(diǎn)aws-python-sqs-worker/Python Liftqueueconstruct自帶 DLQPython 生態(tài)的事件處理aws-node-typescript-sqs-standard/通過消息體 消息屬性兩種通道傳數(shù)據(jù)TS 類型化事件負(fù)載DLQ 是生產(chǎn)環(huán)境的保命符worker 處理失敗的消息最終落到死信隊(duì)列而不是丟失并可通過 CloudWatch 告警第一時(shí)間通知到郵箱SNS 發(fā)布-訂閱一個(gè)事件多方消費(fèi)如果 SQS 是一對(duì)一緩沖SNSSimple Notification Service就是一對(duì)多廣播生產(chǎn)者只發(fā)一次消息所有訂閱者都能收到。倉庫的 aws-node-text-analysis-via-sns-post-processing/ 是教科書級(jí)的用法addNote函數(shù)暴露 HTTP 端點(diǎn)POST /notes收到文本后立刻返回把分析工作交給 SNS消息發(fā)布到analyzeNote主題由analyzeNote函數(shù)訂閱處理只有情感分?jǐn)?shù)達(dá)標(biāo)的內(nèi)容才會(huì)被保存。serverless.yml 中 SNS 主題 ARN 由${aws:accountId}和${aws:region}在部署時(shí)自動(dòng)拼裝sns: Publish權(quán)限也一并聲明零手工配置。README 里點(diǎn)明了隊(duì)列/主題的相對(duì)優(yōu)勢(shì)見 addNote.js 與 analyzeNote.js支持自動(dòng)重試、背壓back-off防止并發(fā)爆炸——直接 Lambda 調(diào) Lambda 可沒有這些能力。Kinesis 流式事件高吞吐的實(shí)時(shí)數(shù)據(jù)管道當(dāng)事件量從每分鐘幾十條漲到每秒上萬條就該用 Kinesis Data Streams 了。aws-node-typescript-kinesis/ 演示完整閉環(huán)建流serverless.yml 中用原生 CloudFormation 聲明AWS::Kinesis::StreamShardCount: 1、保留 24 小時(shí)生產(chǎn)producer函數(shù)接收 HTTP POST通過PutRecordCommand寫事件——注意 kinesis/producer.ts 里用randomUUID()作為分區(qū)鍵保證記錄均勻分布到各分片消費(fèi)consumer函數(shù)綁定stream: type: kinesis事件流中每有新記錄就被喚醒處理。典型場(chǎng)景IoT 遙測(cè)數(shù)據(jù)、應(yīng)用日志、點(diǎn)擊流實(shí)時(shí)分析——生產(chǎn)端和消費(fèi)端完全解耦任一側(cè)擴(kuò)縮容互不影響。組合拳Step Functions 編排多事件鏈路單條鏈路用隊(duì)列就能解決但復(fù)雜業(yè)務(wù)流程先并行執(zhí)行兩步 → 等三天 → 查天氣 → 條件分支需要狀態(tài)機(jī)編排。倉庫的 aws-ruby-step-functions/ 用組織美好周末這個(gè)趣味場(chǎng)景演示了完整狀態(tài)機(jī)并行買票 訂車位 → 等待 → 查天氣 → 按結(jié)果走成功或取消分支詳細(xì)流程如下事件源與編排器組合后你獲得的是S3 觸發(fā)入口 → SNS/SQS 緩沖解耦 → Lambda 處理 → Step Functions 編排長(zhǎng)流程 → 失敗進(jìn) DLQ 告警的完整事件驅(qū)動(dòng)全鏈路??焖偕鲜秩讲渴鹉愕牡谝粭l事件鏈路1?? 拿到代碼只需 clone 一次git clone https://gitcode.com/gh_mirrors/exa/examples2?? 進(jìn)入感興趣的示例目錄安裝依賴cd examples/aws-node-sqs-worker npm install3?? 部署并觀察事件流動(dòng)serverless deploy部署輸出會(huì)給出各端點(diǎn)地址。對(duì) SQS 示例向POST /produce發(fā)一條 JSON然后用serverless logs -f consumer -t實(shí)時(shí)查看消費(fèi)者日志親眼看消息在事件鏈路中流轉(zhuǎn) ??。選型速查表你的場(chǎng)景該用哪個(gè)事件源你的需求推薦事件源倉庫對(duì)應(yīng)示例文件/對(duì)象上傳后處理S3 事件aws-node-s3-file-replicator/削峰、重試、解耦后臺(tái)任務(wù)SQS 隊(duì)列aws-node-sqs-worker/一個(gè)事件通知多個(gè)訂閱者SNS 主題aws-node-text-analysis-via-sns-post-processing/高吞吐實(shí)時(shí)數(shù)據(jù)流Kinesis 流aws-node-typescript-kinesis/表數(shù)據(jù)變更捕獲歸檔DynamoDB Streamsaws-node-dynamodb-stream-processing/跨函數(shù)長(zhǎng)流程編排Step Functionsaws-ruby-step-functions/總結(jié)事件驅(qū)動(dòng)架構(gòu)不是玄學(xué)它就三件事選對(duì)事件源、把事件放進(jìn)正確的通道S3/SQS/SNS/Kinesis、讓消費(fèi)者可靠地處理并兜底失敗。Serverless Examples 用可運(yùn)行的代碼把這三件事講透了S3 事件做入口上傳即觸發(fā)SQS 做緩沖解耦 重試 DLQ 是生產(chǎn)標(biāo)配SNS 做廣播一魚多吃Kinesis 扛吞吐實(shí)時(shí)流處理Step Functions 把多條鏈路編排成可靠工作流。每個(gè)示例都自帶 README.md 級(jí)別的詳細(xì)文檔和一鍵serverless deploy部署腳本照著跑一遍你對(duì)事件驅(qū)動(dòng)架構(gòu)的理解就會(huì)從看過概念變成動(dòng)手做過全鏈路。【免費(fèi)下載鏈接】examplesServerless Examples – A collection of boilerplates and examples of serverless architectures built with the Serverless Framework on AWS Lambda, Microsoft Azure, Google Cloud Functions, and more.項(xiàng)目地址: https://gitcode.com/gh_mirrors/exa/examples創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考