架构演化过程
架构目标:
高可用
高性能
易扩展
可伸缩
安全
初期
首先,使用 快速地搭建一个原型系统。在这个原型系统中,应用程序、数据库、文件服务均部署在一台服务器上。
因为应用程序、数据库、文件服务均位于一台服务器上,当流量增大时,系统性能会很快陷入瓶颈。因此,接下来需要将使用至少三台服务器分别作为应用服务器、数据库服务器和文件服务器。
读写分离
通常这种模式的设计可能在较长的一段时间里都能够满足需求。但随着网站用户数量的增加,共享数据库服务器的压力会越来越大。
减少压力的第一步是增加用于并行读取的从服务器,将读写分离。这样做主要是考虑到网站的请求主要由用户浏览产生,因此写请求远少于读请求。
增加缓存层
如果用户数量继续增加,读性能依然不足,那么下一步常见的办法是增加缓存,如 Memcached、Redis。
这种方案能够极大的提升读性能,尤其是在缓存命中率高的情形下。
但是这种方案无法保证数据一致性,因此需要关注缓存数据库的缓存过期和失效策略,尽可能降低缓存数据与数据库数据的不一致性。此外,最好为缓存服务器配置高可用方案,以防出现缓存雪崩问题。
分库、分表
虽然增加缓存能够缓解读请求的压力,但是写请求压力的增加问题还是没有得到解决。
此时,可以采取业务分库的方案,将归属与不同业务的表拆分到不同的数据库中,部署到不同的数据库服务器上。
对于一些大表,可以采用分表的方案,将大表拆分成多个小表。