1、大型网站的特点
- 高并发,大流量:PV量巨大。即页面浏览量;用户每1次对网站中的每个网页访问均被记录1次。用户对同一页面的多次访问,访问量累计。
- 高可用:7*24小时不间断服务。
- 海量数据:需要储存、管理海量数据,需要使用大量服务器。
- 用户分布 广泛,网络情况复杂:为全球用户提供服务,用户分布范围广。
- 安全环境恶劣:黑客攻击多。
- 需求快速变更,发布频繁:快速适应市场,满足用户需求。
- 渐进式发展:慢慢地运营出大型网站。
2、大型网站架构演变过程
- 初始阶段网站架构
一台Server就刚需—应用程序、数据库、文件等所有资源都集中在一台Server上,典型案例:基于LAMP架构的PHP网站。
- 应用和数据服务分离
三台Server平天下—业务发展,单台不再适应业务的发展,将应用和数据分离后成三台Sever(应用服务器、文件服务器与数据库服务器)。分离后三台Server对硬件资源的需求各不相同:应用服务器需要更快更强大的CPU,而数据库服务器需要更快的硬盘和更大的内存,文件服务器则需要更大的硬盘。
- 使用缓存改善网站性能
3+N的Server模式—减少数据库访问压力,提高网站的数据访问速度。缓存又可以分为:本地缓存和远程缓存(可以是分布式的),本地缓存访问速度快,但数据量有限;远程分布式缓存可以集群,因此容量不受限制。
- 使用应用服务器集群改善网站并发处理能力
集群—解决高并发、海量数据问题的常用手段,实现系统的可伸缩性。通过负载均衡调度器,可将用户访问分发到集群中的某台Server上,应用服务器的负载压力不再成为整个网站的瓶颈。
- 数据库读写分离
随着用户量的增加,数据库成为最大的瓶颈,改善数据库性能常用的手段是进行读写分离以及分表,读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切换则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务不同来切换,如用户业务、商品业务相关的表放在不同的数据库中。
- 使用反向代理和CDN加速网站响应
CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,而反向代理则部署在网站的中心机房。使用CDN和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。
- 使用分布式文件系统和分布式数据库系统
用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求。需要分布式的文件系统支撑。
- 使用NoSQL和搜索引擎
NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持。应用服务器则通过一个统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。
- 业务拆分
随着业务进一步扩展,应用程序变得非常臃肿,这时我们需要将应用程序进行业务拆分,如百度分为新闻、网页、图片等业务。每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者同享数据库来实现。
- 分布式服务
这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。我们将这些服务抽取出来利用分部式服务框架搭建分布式服务。