# 架构演化过程

<mark style="color:red;">**架构目标：**</mark>

* **高可用**
* **高性能**
* **易扩展**
* **可伸缩**
* **安全**

## 初期

首先，使用 [<mark style="color:blue;">**LAMP**</mark>](#user-content-fn-1)[^1] 快速地搭建一个原型系统。**在这个原型系统中，应用程序、数据库、文件服务均部署在一台服务器上。**

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

## 读写分离

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

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

## 增加缓存层

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

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

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

## 分库、分表

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

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

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

[^1]: Linux、Apache、MySQL、PHP
