程序员BUGTB|图解大型网站技术架构演变过程


1、大型网站的特点
【程序员BUGTB|图解大型网站技术架构演变过程】高并发 , 大流量:PV量巨大 。 即页面浏览量;用户每1次对网站中的每个网页访问均被记录1次 。 用户对同一页面的多次访问 , 访问量累计 。
高可用:7*24小时不间断服务 。
海量数据:需要储存、管理海量数据 , 需要使用大量服务器 。
用户分布 广泛 , 网络情况复杂:为全球用户提供服务 , 用户分布范围广 。
安全环境恶劣:黑客攻击多 。
需求快速变更 , 发布频繁:快速适应市场 , 满足用户需求 。
渐进式发展:慢慢地运营出大型网站 。
2、大型网站架构演变过程
初始阶段网站架构

程序员BUGTB|图解大型网站技术架构演变过程
本文插图

一台Server就刚需—应用程序、数据库、文件等所有资源都集中在一台Server上 , 典型案例:基于LAMP架构的PHP网站 。
应用和数据服务分离

程序员BUGTB|图解大型网站技术架构演变过程
本文插图

三台Server平天下—业务发展 , 单台不再适应业务的发展 , 将应用和数据分离后成三台Sever(应用服务器、文件服务器与数据库服务器) 。 分离后三台Server对硬件资源的需求各不相同:应用服务器需要更快更强大的CPU , 而数据库服务器需要更快的硬盘和更大的内存 , 文件服务器则需要更大的硬盘 。
使用缓存改善网站性能

程序员BUGTB|图解大型网站技术架构演变过程
本文插图

3+N的Server模式—减少数据库访问压力 , 提高网站的数据访问速度 。 缓存又可以分为:本地缓存和远程缓存(可以是分布式的) , 本地缓存访问速度快 , 但数据量有限;远程分布式缓存可以集群 , 因此容量不受限制 。
使用应用服务器集群改善网站并发处理能力

程序员BUGTB|图解大型网站技术架构演变过程
本文插图

集群—解决高并发、海量数据问题的常用手段 , 实现系统的可伸缩性 。 通过负载均衡调度器 , 可将用户访问分发到集群中的某台Server上 , 应用服务器的负载压力不再成为整个网站的瓶颈 。
数据库读写分离

程序员BUGTB|图解大型网站技术架构演变过程
本文插图

随着用户量的增加 , 数据库成为最大的瓶颈 , 改善数据库性能常用的手段是进行读写分离以及分表 , 读写分离顾名思义就是将数据库分为读库和写库 , 通过主备功能实现数据同步 。 分库分表则分为水平切分和垂直切分 , 水平切换则是对一个数据库特大的表进行拆分 , 例如用户表 。 垂直切分则是根据业务不同来切换 , 如用户业务、商品业务相关的表放在不同的数据库中 。
使用反向代理和CDN加速网站响应

程序员BUGTB|图解大型网站技术架构演变过程
本文插图

CDN和反向代理的基本原理都是缓存 , 区别在于CDN部署在网络提供商的机房 , 而反向代理则部署在网站的中心机房 。 使用CDN和反向代理的目的都是尽早返回数据给用户 , 一方面加快用户访问速度 , 另一方面也减轻后端服务器的负载压力 。
使用分布式文件系统和分布式数据库系统

程序员BUGTB|图解大型网站技术架构演变过程
本文插图

用户一天天增加 , 业务量越来越大 , 产生的文件越来越多 , 单台的文件服务器已经不能满足需求 。 需要分布式的文件系统支撑 。
使用NoSQL和搜索引擎

程序员BUGTB|图解大型网站技术架构演变过程
本文插图

NoSQL和搜索引擎都是源自互联网的技术手段 , 对可伸缩的分布式特性具有更好的支持 。 应用服务器则通过一个统一数据访问模块访问各种数据 , 减轻应用程序管理诸多数据源的麻烦 。
业务拆分

程序员BUGTB|图解大型网站技术架构演变过程
本文插图

随着业务进一步扩展 , 应用程序变得非常臃肿 , 这时我们需要将应用程序进行业务拆分 , 如百度分为新闻、网页、图片等业务 。 每个业务应用负责相对独立的业务运作 。 业务之间通过消息进行通信或者同享数据库来实现 。
分布式服务

程序员BUGTB|图解大型网站技术架构演变过程
本文插图

这时我们发现各个业务应用都会使用到一些基本的业务服务 , 例如用户服务、订单服务、支付服务、安全服务 , 这些服务是支撑各业务应用的基本要素 。 我们将这些服务抽取出来利用分部式服务框架搭建分布式服务 。


    推荐阅读