1.初始的网站访问量低, 所以一个应用服务器就够了。随着用户访问越来越多,数据越来越大,那么就需要更好的性能。所以就将一个服务器分为三个服务器:应用服务器,文件服务器,数据库服务器。
1.1应用服务器需要处理业务逻辑,需要更好的cpu
1.2文件服务器需要存储更多的文件,所以需要更大的硬盘
1.3数据库服务器 需要快速的检索数据,所以需要更好的内存
应用和数据分离后,大大优化了网站性能和并发处理能力。但随着用户越来越多,数据库压力越来越大,网站的性能也会越来越差,所以就需要进一步的优化网站。
1.4使用缓存优化网站
按天猫,京东,百度搜索引擎分析来看,用户经常搜索的关键词、天猫上常被点击的产品,且购买了的产品等,这些都是用户常用的数据,如果我们将这些热门数据缓存起来,那么就能减少数据库服务器的压力。
1.4.1 网站缓存分为两种缓存:本地缓存和分布式缓存。本地缓存请求访问速度快,但是会与应用服务器争夺内存。分布式缓存是将缓存放在远程服务器上,可以通过集群的方式。理论上可以做到无内存容量限制。
1.5 数据库压力的问题可以通过缓存解决,但是在单一应用服务器中,在如双11时,访问高峰期时,单一应用服务器请求连接有限。
1.5. 1 使用应用服务器集群 来解决单一应用服务器请求连接有限的瓶颈。
对于网站架构来说,只要能够通过增加服务器的方式来改善负载压力,就可以用同样的方式改善系统性能。从而提高系统的可伸缩性。
通过负载均衡来调度服务器,可将用户的访问请求分发到各个应用服务器中,在应用服务器集群中,若是集群中的应用服务器处理连接请求达到瓶颈,就可以通过在集群中添加更多的应用服务器来分配连接请求。
1.6 使用数据库读写分离。
在使用了缓存集群来解决了数据库读操作,但是在高并发时,数据库写操作、缓存过期等问题时,同样会造成数据库瓶颈。所以就可以通过数据库读写分离,来进一步优化数据库压力。这里一般通用的就是用两台数据库服务器,主从数据库服务器,在数据库有写操作时,主数据库通过主从复制功能往另一台从数据库服务器中同步更新数据。应用服务器使用专门的访问模块,从数据库从服务器中读取数据。
1.6.1 使用反向代理和cdn加速优化网站访问速度。
有研究表明,不同地区的网络延迟不同,网站的延迟正在和用户丢失率成正比,所以我们有必要优化网站访问速度。
cdn服务器是部署在网络提供商的机房中,使用户在访问网站的时候,可以从最近的网络机房中获取到数据。
反向代理服务器是部署在网站的中心机房中,用户访问的时候,首先到达的是反向代理服务器,如果服务器中缓存着用户的数据,直接将数据返回给用户。两种方式都是为了很快的将数据显示给用户。
1.6.2 同理,文件服务器和数据库服务器在数据越来越多的时候,还是得使用分布式集群来解决网站压力。
2.0 使用nosql和搜索引擎。
nosql和搜索引擎都是互联网的技术手段,对分布式有更好的支持,应用服务器使用同一数据访问模块来处理多数据源的问题。
3.0 使用消息队列对数据进行分发
4.网站架构模式
为了解决网站高并发、大数据处理、高可靠运行等一系列问题,
4.1 分层
分层是企业网站最常用的一种模式,将系统在横向维度分层,每个层处理单一的业务,使上层对下层的依赖和调用组成一个完整的系统。
在网络协议中7层分层,电脑系统中软件、硬件等也是分层。那大型网站也可以使用分层为:服务层、数据层、应用层。
应用层:处理业务的逻辑问题和视图的展示
服务层: 为应用层提供服务,如用户管理服务等。
数据层:提供数据提供访问,如文件、缓存、数据库、搜索引擎
4.2 分割
如果说分层是横向切分,那么分割就是纵向切分,将业务进行纵向切分,如应用层,将业务中的各个功能细分,越大的网站的业务切分就更加复杂。
4.3 分布式
分割和分层都是为了方便分布式的部署,
4.34 集群
4.35 缓存
4.36 异步
4.37 冗余
4.38 自动化
4.39 安全
5.性能测试指标
1.响应时间
指从发起一个请求到网站返回响应数据的过程,测试平均响应时间,一般都是将一次请求进行上万次模拟请求,然后除以一万,得到的时间就是响应时间。
2.并发数
并发数是指系统在同一时间中,能处理请求的数目,这也反应了系统的负载能力。
网站总用户数《 网站在线用户《 系统并发数。在测试程序中,使用多线程模拟大用户并发,一般都是在两次请求中设置一个随机的等待时间。这个时间叫做思考时间。
3.吞吐量
指单位时间中,系统处理请求数量,有hps(每秒事务处理数),tps(每秒http请求数),qps(每秒查询数)
系统的并发数由小增大,系统的吞吐量逐渐增加,当吞吐量到达到一个极限时,吞吐量就会随系统的并发数增加而减少,达到系统崩溃点后,系统资源被用完,吞吐量降为0.
响应时间在这一段中的变化:先是小幅段上升,当吞吐量到达极限时,响应时间巨快速增加,当系统吞吐量为0,崩溃后,系统失去响应。
4.性能计数器
包括系统负载system load,内存使用情况,磁盘使用情况,对象和线程数,cpu使用数等,给这些设置数据指标,可以在根据这些数据指标来设置阈值,及时向系统发出警报。
6 架构
6.1 web网站性能优化
6.1.1 浏览器优化
1.减少http请求数,如css,js,图片这些可以合并,这样就能一次发起http请求,请求到所有的文件,一张图片可以合成多张。
2. 使用浏览器缓存,像网站的logo,css,js都是常用且固定的东西,就可以使用缓存,只需要在网页中设置cache-control和expire。
3. 启用压缩,一些静态资源都可以压缩后在进行传输。
4. 减少cookie传输,每一次的http请求都会附带cookie值,所以cookie中最好少存值
5. cdn加速,其实就是数据缓存在网络服务器商,用户在访问的时候,直接将缓存的数据返回给用户。
6. 反向代理,当用户访问到某些资源时,就将静态资源缓存在反向代理服务器中,其他人再来访问的时候,就将缓存的数据也返回。
6.2 应用服务器性能优化
1. 应用服务器主要就是网站的业务代码,应用服务器的优化,大概就是集群、缓存、异步等。