AWS 官方架构博客:运行在 AWS 上的响应式微服务架构

查看原文

发布于 2014 年的响应式宣言描述了响应式系统的必须特征:responsiveness, resiliency, elasticity, and being message driven, 其中岁重要的特征是最后一项。这意味着整个系统需要设计成异步的,面向消息的。

例如设计实时的广告追踪系统,流量忽大忽小,系统要面对突如其来的流量高峰。很多数据又要尽可能放在内存已保证快速响应。程序中的非实时的功能,让另外的程序慢慢消费它们。这么一看,系统主要可以拆分为数据收集,核心数据存储,实时接口,非实时消费等部分。

实例程序基于 Java8 框架 Vert.x, 运行在 JVM 上,IO 库使用 Netty。基本的并发模型是是 actor-like,写起代码来基本上就是实现 Verticle 接口,和一个 single event bus 通信,收发消息。Vert.x 使用 Reactor Pattern,进程里有多个 event loops。如果有同步的调用,那就丢到专用的 worker pool 里面去调用,避免堵塞事件循环。主事件循环处理 HTTP 请求和健康检查。请求数据会经过不算太大的缓存层。整个请求数据处理由 AWS Lambda function 处理,存储在 DynamoDB 里面。为了降低 latency,常见的做法是把程序部署到不同的 AWS Regions 里面,尽可能接近客户所在的区域。