大型网站架构演化
网站架构设计的目标
高可用、高性能、易扩展、可伸缩、安全。
网站的价值在于它能为用户提供什么价值,在于网站能做什么,不在于网站怎么做的。
不是所有的问题都可以通过技术来解决。
有的时候调整业务也是很好的一种方式。
技术是用来解决业务问题的,业务的问题也可以尝试通过业务的手段去解决。
网站架构演化发展历程
初始阶段
应用服务和数据服务分离
一台服务器逐渐不能满足需求,越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足。
将存储和应用服务器分开。
缓存
80% 的业务访问集中在 20% 的数据上。
缓存又可以有两种方案:
- 缓存在应用服务器的本地缓存;
- 访问速度较快,但是收到内存限制。
- 专门的分布式缓存服务器;
- 理论上不受内存容量限制。
应用服务器集群
使用集群是网站解决高并发、海量数据问题的常用手段。
数据库读写分离
网站使用缓存后,绝大部分数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。
大部分主流数据库提供主从热备功能,配置主从关系,将数据同步,利用这一功能进行读写分离,改善数据库负载压力。
反向代理和 CDN 加速
CDN 和 反向代理的基本原理都是缓存。
CDN 部署在网络提供商的机房,用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;
反向代理部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。
分布式文件系统和分布式数据库
文件服务器正常,文件太多放不下了。
分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常大的时候才使用。
不到不得已时,网站常用的数据库拆分手段是业务分库,不同业务使用不同数据库部署在不同的机器上。
NoSQL 和搜索引擎
网站业务愈加复杂,对数据存储和检索的需求也越来越复杂,网站需要使用一些菲关系数据库技术如 NoSQL 和非数据库查询技术如搜索引擎。
业务拆分
纵向拆分。
服务拆分
横向拆分。
提供一些统一的常用的相同的业务操作。
业务部门、基础服务器部门、数据部门等等。
EOF