架构演化过程

架构目标:

  • 高可用

  • 高性能

  • 易扩展

  • 可伸缩

  • 安全

初期

首先,使用 快速地搭建一个原型系统。在这个原型系统中,应用程序、数据库、文件服务均部署在一台服务器上。

因为应用程序、数据库、文件服务均位于一台服务器上,当流量增大时,系统性能会很快陷入瓶颈。因此,接下来需要将使用至少三台服务器分别作为应用服务器、数据库服务器和文件服务器。

读写分离

通常这种模式的设计可能在较长的一段时间里都能够满足需求。但随着网站用户数量的增加,共享数据库服务器的压力会越来越大。

减少压力的第一步是增加用于并行读取的从服务器,将读写分离。这样做主要是考虑到网站的请求主要由用户浏览产生,因此写请求远少于读请求。

增加缓存层

如果用户数量继续增加,读性能依然不足,那么下一步常见的办法是增加缓存,如 Memcached、Redis。

这种方案能够极大的提升读性能,尤其是在缓存命中率高的情形下。

但是这种方案无法保证数据一致性,因此需要关注缓存数据库的缓存过期和失效策略,尽可能降低缓存数据与数据库数据的不一致性。此外,最好为缓存服务器配置高可用方案,以防出现缓存雪崩问题。

分库、分表

虽然增加缓存能够缓解读请求的压力,但是写请求压力的增加问题还是没有得到解决。

此时,可以采取业务分库的方案,将归属与不同业务的表拆分到不同的数据库中,部署到不同的数据库服务器上。

对于一些大表,可以采用分表的方案,将大表拆分成多个小表。