ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

一文吃透事件驱动架构:Serverless Examples的S3/SQS/SNS/Kinesis全链路实战

一文吃透事件驱动架构:Serverless Examples的S3/SQS/SNS/Kinesis全链路实战 一文吃透事件驱动架构Serverless Examples的S3/SQS/SNS/Kinesis全链路实战【免费下载链接】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.项目地址: https://gitcode.com/gh_mirrors/exa/examplesServerless Examples是 Serverless Framework 官方的无服务器架构示例库收录了上百个可直接部署到 AWS Lambda 的样板项目。本文将带你用其中的 S3、SQS、SNS、Kinesis 四类事件驱动示例快速吃透事件驱动架构EDA的核心套路如何让系统事件来了才干活实现松耦合、高可用的全链路处理 什么是事件驱动架构为什么无服务器场景特别需要它事件驱动架构Event-Driven Architecture的核心思想是组件之间不直接互相调用而是通过事件解耦。事件源上传了一个文件、产生了一条消息发出信号下游消费者按需订阅处理。对比项请求-响应架构事件驱动架构耦合度调用方必须等处理完成立即返回后台异步处理容错性下游挂掉则整体失败队列缓冲 自动重试弹性伸缩需预估峰值事件来了才创建实例零事件零成本在 Serverless 场景下这个优势被放大到极致Lambda 函数天然就是事件触发器S3 丢一个文件、SQS 进一条消息函数就被唤醒处理完即休眠。Serverless Examples 恰好为每一种主流事件源都准备了现成模板本文按S3 → SQS → SNS → Kinesis → 工作流编排的顺序逐一拆解。S3 事件驱动文件一上传链路自动启动S3 是事件驱动架构里最常见的入口事件源。仓库提供了多个不同语言/深度的示例双桶文件复制aws-node-s3-file-replicator/Node.js和 aws-golang-s3-file-replicator/Go。向输入桶上传文件后Lambda 自动监听s3:ObjectCreated事件并复制到输出桶。其 serverless.yml 用serverless-lift插件的storageconstruct 声明两个桶s3事件直接绑定桶名无需手写 CloudFormation。音频自动转写aws-node-simple-transcribe-s3/上传 .wav 文件即触发 Transcribe 转写JSON 结果回写 S3——上传即处理的经典管道。图片智能识别aws-node-rekognition-analysis-s3-image/配合 lib/imageAnalyser.js 识别图片内容。经验S3 事件适合做入口层但 S3 通知只重试有限次数真正重要的数据流建议让 S3 事件把任务投递给 SQS/SNS下一节把可靠性交给消息队列。SQS 生产者-消费者事件驱动全链路的核心骨架SQSSimple Queue Service是事件驱动架构的缓冲带仓库提供了四个循序渐进的示例1. 最小可用骨架aws-node-sqs-workeraws-node-sqs-worker/ 演示标准的生产者-消费者模式producer函数由httpApi事件触发POST /produce收到请求后把 JSON 投进JobsQueue立即返回 202调用方无需等待处理完成consumer函数由sqs事件源触发以batchSize: 10批量消费消息并处理。事件绑定全部声明在 serverless.yml 中生产端通过QUEUE_URL环境变量拿到队列地址逻辑代码见 handler.js。2. 完整架构图aws-ruby-sqs-with-dynamodbaws-ruby-sqs-with-dynamodb/ 是最全链路的示例API Gateway → producer Lambda → SQS → worker Lambda → DynamoDB失败消息进死信队列DLQ并触发 CloudWatch 邮件告警。整体事件链路如下图中紫色椭圆区域是serverless-lift插件自动创建的SQS 队列、worker、DLQ、CloudWatch 告警部署时一行 YAML 即可搞定——这正是事件驱动 IaC 的便利性。请求参数用dry-schema校验后生成彩票优惠券记录存入 DynamoDB结果可在控制台验证3. 进阶变体示例特点适合学习点aws-python-sqs-worker/Python Liftqueueconstruct自带 DLQPython 生态的事件处理aws-node-typescript-sqs-standard/通过消息体 消息属性两种通道传数据TS 类型化事件负载DLQ 是生产环境的保命符worker 处理失败的消息最终落到死信队列而不是丢失并可通过 CloudWatch 告警第一时间通知到邮箱SNS 发布-订阅一个事件多方消费如果 SQS 是一对一缓冲SNSSimple Notification Service就是一对多广播生产者只发一次消息所有订阅者都能收到。仓库的 aws-node-text-analysis-via-sns-post-processing/ 是教科书级的用法addNote函数暴露 HTTP 端点POST /notes收到文本后立刻返回把分析工作交给 SNS消息发布到analyzeNote主题由analyzeNote函数订阅处理只有情感分数达标的内容才会被保存。serverless.yml 中 SNS 主题 ARN 由${aws:accountId}和${aws:region}在部署时自动拼装sns: Publish权限也一并声明零手工配置。README 里点明了队列/主题的相对优势见 addNote.js 与 analyzeNote.js支持自动重试、背压back-off防止并发爆炸——直接 Lambda 调 Lambda 可没有这些能力。Kinesis 流式事件高吞吐的实时数据管道当事件量从每分钟几十条涨到每秒上万条就该用 Kinesis Data Streams 了。aws-node-typescript-kinesis/ 演示完整闭环建流serverless.yml 中用原生 CloudFormation 声明AWS::Kinesis::StreamShardCount: 1、保留 24 小时生产producer函数接收 HTTP POST通过PutRecordCommand写事件——注意 kinesis/producer.ts 里用randomUUID()作为分区键保证记录均匀分布到各分片消费consumer函数绑定stream: type: kinesis事件流中每有新记录就被唤醒处理。典型场景IoT 遥测数据、应用日志、点击流实时分析——生产端和消费端完全解耦任一侧扩缩容互不影响。组合拳Step Functions 编排多事件链路单条链路用队列就能解决但复杂业务流程先并行执行两步 → 等三天 → 查天气 → 条件分支需要状态机编排。仓库的 aws-ruby-step-functions/ 用组织美好周末这个趣味场景演示了完整状态机并行买票 订车位 → 等待 → 查天气 → 按结果走成功或取消分支详细流程如下事件源与编排器组合后你获得的是S3 触发入口 → SNS/SQS 缓冲解耦 → Lambda 处理 → Step Functions 编排长流程 → 失败进 DLQ 告警的完整事件驱动全链路。快速上手三步部署你的第一条事件链路1️⃣ 拿到代码只需 clone 一次git clone https://gitcode.com/gh_mirrors/exa/examples2️⃣ 进入感兴趣的示例目录安装依赖cd examples/aws-node-sqs-worker npm install3️⃣ 部署并观察事件流动serverless deploy部署输出会给出各端点地址。对 SQS 示例向POST /produce发一条 JSON然后用serverless logs -f consumer -t实时查看消费者日志亲眼看消息在事件链路中流转 ⚡️。选型速查表你的场景该用哪个事件源你的需求推荐事件源仓库对应示例文件/对象上传后处理S3 事件aws-node-s3-file-replicator/削峰、重试、解耦后台任务SQS 队列aws-node-sqs-worker/一个事件通知多个订阅者SNS 主题aws-node-text-analysis-via-sns-post-processing/高吞吐实时数据流Kinesis 流aws-node-typescript-kinesis/表数据变更捕获归档DynamoDB Streamsaws-node-dynamodb-stream-processing/跨函数长流程编排Step Functionsaws-ruby-step-functions/总结事件驱动架构不是玄学它就三件事选对事件源、把事件放进正确的通道S3/SQS/SNS/Kinesis、让消费者可靠地处理并兜底失败。Serverless Examples 用可运行的代码把这三件事讲透了S3 事件做入口上传即触发SQS 做缓冲解耦 重试 DLQ 是生产标配SNS 做广播一鱼多吃Kinesis 扛吞吐实时流处理Step Functions 把多条链路编排成可靠工作流。每个示例都自带 README.md 级别的详细文档和一键serverless deploy部署脚本照着跑一遍你对事件驱动架构的理解就会从看过概念变成动手做过全链路。【免费下载链接】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.项目地址: https://gitcode.com/gh_mirrors/exa/examples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表