在 AWS 上设计支持百万级到千万级用户的系统
一、需求沟通
1、用例
1. 用户进行读或写请求
- 服务进行处理,存储用户数据,然后返回结果
2. 服务需要从支持小规模用户开始到百万用户
- 在我们演化架构来处理大量的用户和请求时,讨论一般的扩展模式服务高可用
2、算数
二、答案
1、概要设计
Web Server用来读、写、存储
2、扩展设计,用户+
- 运用纵向扩展: 选择一台更大容量(性能更好)的服务器
- 密切关注指标,确定如何扩大规模
- 使用基本监控来确定瓶颈:CPU、内存、IO、网络等:CloudWatch, top(如下图), nagios, statsd, graphite等
-
何时扩容?取决于用户的增长速度和扩容的难易程度,一般达到80%就影响性能了。
3、扩展设计,用户++
这一步是把计算和存储分开,用Web Server来算,用数据库来存。
4、扩展设计,用户+++
这一步是把Read API和Write API从Web Server里面分离出来,另外加上LB, DNS, CDN。
5、扩展设计,用户++++
这一步数据库存储读写分离,分成读数据库和写数据库,对于Read API加上缓存
6、扩展设计,用户+++++
自动扩容:全程监控,流量突然上去了,把手头有的机器全部堆上去,当流量下来的时候,再把机器自动地撤下来。
7、扩展设计,用户++++++
(1)Write API和Write API Async数据是完全相同的,差别是时效不一样,Write API可能时效只有20秒,时间一过,就写不进去了,但是Write API Async得到的是全部数据,放到消息队列里,然后通过Worker Service将数据异步写入数据库中。
(2)将NoSQL从对象存储中拆出来
(3)数据库做分片儿