如果说 EKS 是"大脑",RDS 和 MSK 是"记忆",那么今天我们聊的这四位,就是负责传递信号 和指挥动作的关键角色。
1. 黄金搭档:SNS & SQS (异步消息与解耦)
这两个服务经常一起出现,统称为**"消息中间件"**,但分工截然不同。
📢 Amazon SNS (Simple Notification Service) ------ "大喇叭"
-
核心逻辑 :发布/订阅 (Pub/Sub) 与 广播 (Push)。
-
一句话解释:你往 SNS 发一条消息,它会立刻把这条消息"推"给所有订阅了它的人(可以是邮件、短信、HTTP 接口,也可以是 SQS 队列)。
-
区块链场景 :"充值成功"事件广播。
-
当扫链程序发现一笔充值,它只需要通知 SNS。
-
SNS 会同时触发:1. 财务系统入账;2. 风控系统扫描;3. App 推送通知用户。
-
📮 Amazon SQS (Simple Queue Service) ------ "储物柜"
-
核心逻辑 :点对点 (P2P) 与 缓冲 (Pull)。
-
一句话解释:它是一个无限大的缓冲区。消息发进来后会存在这里(默认 4 天),直到下游的消费者系统(EKS Pod)有空闲了,主动来把消息取走处理。
-
区块链场景 :"削峰填谷"与"任务防丢"。
-
遇到热门 NFT 铸造(Mint)活动,瞬间涌入 10 万个请求。
-
如果没有 SQS,你的后端直接崩溃。
-
有了 SQS,请求先排队。后端按每秒处理 100 个的节奏慢慢消化,系统稳如泰山。
-
⚡ 最佳实践:Fan-out (扇出模式)
在生产架构中,SNS 和 SQS 是配合使用的。
-
架构 :
EKS(生产者)->SNS Topic->多个 SQS Queues->EKS(消费者) -
优势 :解耦。如果"邮件服务"挂了,对应的 SQS 队列会帮它把消息攒着,等它修好了一起发,一条数据都不会丢。
2. 流程指挥官:AWS Step Functions (工作流编排)
处理简单的任务用 SQS 够了,但处理复杂、耗时、有状态的业务,必须用 Step Functions。
-
核心痛点 :区块链业务充满了"等待"。例如,提现后要等 12 个区块确认(可能 10 分钟),如果用 Java 代码写个
Thread.sleep(600000),服务器资源全被浪费了。 -
核心逻辑 :状态机 (State Machine)。你画一张流程图,AWS 帮你执行每一步。
🛠️ 核心功能
-
Wait (等待):完全不消耗计算资源地等待指定时间(如等待区块确认)。
-
Retry (重试):如果 KMS 签名失败或链上拥堵,自动按指数退避策略重试(第1秒、第5秒、第30秒...)。
-
Callback (回调) :支持暂停流程,发送邮件给管理员,等待人工审批(点击"同意")后再继续执行。
⛓️ 区块链场景:自动化提现流程
一个标准的 Step Functions 提现流如下:
-
Start:接收提现请求。
-
Risk Check:调用 Lambda 查风控。如果金额 > 10 BTC -> 跳转到"人工审批"。
-
Sign & Broadcast:调用 KMS 签名并推送到 AMB 节点。
-
Wait Loop:
-
检查链上确认数。
-
没够 12 个? -> Wait 1 分钟 -> 回到上一步。
-
够了? -> 下一步。
-
-
Notify:更新 RDS 余额,调用 SNS 通知用户。
3. 前端实时门户:AWS AppSync (实时推送)
这是提升用户体验的"临门一脚"。
-
核心痛点:用户充值后,总是习惯性地疯狂下拉刷新网页看钱到没到。这会对后端 API 造成巨大的无效压力。
-
核心逻辑 :GraphQL + WebSockets (Real-time)。
🚀 核心功能
-
按需查询 (GraphQL):前端想要什么字段就传什么,不再像 REST API 那样返回一大堆无用数据,节省带宽。
-
实时订阅 (Subscriptions) :这是最炸裂的功能。前端与 AppSync 保持一个长连接。一旦后端(如 Step Functions)修改了数据库里的余额,AppSync 会毫秒级主动把新余额"推"给用户的手机。
📱 区块链场景
-
钱包余额变动:链上确认一完成,App 顶部余额数字自动跳动。
-
实时行情 K 线:交易所的最新成交价实时推送到浏览器。
-
交易状态更新:提现从"处理中"变为"已完成",无需刷新,状态栏颜色自动变绿。
4. 总结:它们在你的全家桶里如何协作?
让我们把所有组件串起来,看一个**"用户提现"**的全生命周期:
-
用户发起 :用户在手机 App 点击提现 -> 请求发给 WAF/ALB -> EKS。
-
任务削峰 :EKS 验证参数后,将提现任务丢进 SQS(防止瞬时流量冲垮系统)。
-
流程启动 :Step Functions 监听 SQS,取走任务,开始"签名-广播-等待确认"的漫长流程。
-
人工介入 :如果是大额,Step Functions 暂停,通过 SNS 发短信给老板。老板审批后流程继续。
-
完结推送:流程结束,Step Functions 更新 RDS 数据库。
-
前端感知 :AppSync 监测到数据库变化,通过 WebSocket 瞬间通知用户手机:"提现已到账"。
📊 运维选型建议表
| 组件 | 你的需求 | 推荐选择 |
|---|---|---|
| SNS | 我要通知很多人(系统+用户),我要发邮件/短信。 | ✅ 必选 |
| SQS | 我要解耦上下游,我要防止系统被流量冲垮,我要保证任务绝不丢失。 | ✅ 必选 (配合 SNS) |
| Step Functions | 我有复杂的业务逻辑(判断、循环、等待),我需要人工审核步骤。 | ✅ 强烈推荐 |
| AppSync | 我想让用户不刷新页面也能看到数据更新,我想用 GraphQL。 | ✅ 强烈推荐 (前端体验) |
这四个组件加上你已有的 EKS、MSK 和 RDS,就构成了一套高可用、高性能、自动化的顶级区块链后端架构。