在 AWS 上设计支持百万级到千万级用户的系统

 

一、需求沟通

1、用例
1. 用户进行读或写请求

  • 服务进行处理,存储用户数据,然后返回结果

2. 服务需要从支持小规模用户开始到百万用户

  • 在我们演化架构来处理大量的用户和请求时,讨论一般的扩展模式服务高可用

2、算数

在 AWS 上设计支持百万级到千万级用户的系统

在 AWS 上设计支持百万级到千万级用户的系统

 

二、答案

1、概要设计

Web Server用来读、写、存储

在 AWS 上设计支持百万级到千万级用户的系统

 

2、扩展设计,用户+

  • 运用纵向扩展: 选择一台更大容量(性能更好)的服务器
  • 密切关注指标,确定如何扩大规模
  • 使用基本监控来确定瓶颈:CPU、内存、IO、网络等:CloudWatch, top(如下图), nagios, statsd, graphite等
  • 何时扩容?取决于用户的增长速度和扩容的难易程度,一般达到80%就影响性能了。

在 AWS 上设计支持百万级到千万级用户的系统

3、扩展设计,用户++

这一步是把计算和存储分开,用Web Server来算,用数据库来存。

在 AWS 上设计支持百万级到千万级用户的系统

4、扩展设计,用户+++

这一步是把Read API和Write API从Web Server里面分离出来,另外加上LB, DNS, CDN。

在 AWS 上设计支持百万级到千万级用户的系统

5、扩展设计,用户++++

这一步数据库存储读写分离,分成读数据库和写数据库,对于Read API加上缓存

在 AWS 上设计支持百万级到千万级用户的系统

6、扩展设计,用户+++++

自动扩容:全程监控,流量突然上去了,把手头有的机器全部堆上去,当流量下来的时候,再把机器自动地撤下来。

在 AWS 上设计支持百万级到千万级用户的系统

7、扩展设计,用户++++++

(1)Write API和Write API Async数据是完全相同的,差别是时效不一样,Write API可能时效只有20秒,时间一过,就写不进去了,但是Write API Async得到的是全部数据,放到消息队列里,然后通过Worker Service将数据异步写入数据库中。

(2)将NoSQL从对象存储中拆出来

(3)数据库做分片儿

在 AWS 上设计支持百万级到千万级用户的系统