如何提升网站的性能?

news/2024/7/20 14:59:07 标签: 数据库, 前端, 内存管理

概述

  性能是网站的一个重要指标,除非是没得选择(比如12306),否则用户无法忍受一个响应缓慢的网站。一个打开缓慢的网站会导致严重的用户流失,很多时候网站性能问题是网站架构升级优化的触发器。可以说性能是网站架构设计的一个重要方面,任何软件架构设计方案都必须考虑可能会带来的性能问题。
  也正是因为性能问题几乎无处不在,所以优化网站性能的手段也非常多,从用户浏览器到数据库,影响用户请求的所有环节都可以进行性能优化。
  在浏览器端,可以通过浏览器缓存、使用页面压缩、合理分布页面、减少Cookie传输等改善性能。
  还可以使用CDN,将网站静态内容分发至离用户最近的网络服务商机房,使用户通过最短访问路径获取数据。可以在网站机房部署反向代理服务器,缓存热点文件,加快请求响应速度,减轻应用服务器负载压力。(Nigix)
  在应用服务器端,可以使用服务器本地缓存和分布式缓存,通过缓存在内存中的热点数据处理用户请求,加快请求处理过程,减轻数据库负载压力。(Redis, Memecache, JBoss Cache, Ehcache)
  也可以通过异步操作将用户请求发送至消息队列等待后续任务处理,而当前请求直接返回给用户。(RabbitMq, Kafka)
  在网站有很多用户高并发请求的情况下,可以将多台应用服务器组成一个集群共同对外服务,提高整体处理能力,改善性能。
  在代码层面,也可以通过使用多线程、改善内存管理等手段优化性能。
  在数据库服务器端,索引、缓存、SQL优化等性能优化手段都已经比较成熟。而方兴未艾的NoSQL数据库通过优化数据模型、存储结构、伸缩特性等手段在性能方面的优势也日趋明显。(MongoDB, HBase)
  衡量网站性能有一系列指标,重要的有响应时间、TPS、系统性能计数器等,通过测试这些指标以确定系统设计是否达到目标。这些指标也是网站监控的重要参数,通过监控这些指标可以分析系统瓶颈,预测网站容量,并对异常指标进行报警,保障系统可用性。
  对于网站而言,性能符合预期仅仅是必要条件,因为无法预知网站可能会面临的访问压力,所以必须要考察系统在高并发访问情况下,超出负债设计能力的情况下可能会出现的性能问题。网站需要长时间持续运行,还必须保证系统在持久运行且访问压力不均匀的情况下保持稳定的性能特性。


性能测试指标

  1. 响应时间
  2. 并发数
  3. 吞吐量
  4. 性能计数器

性能测试方法

  性能测试是一个不断对系统增加访问压力,以获得系统性能指标、最大负载能力、最大压力承受能力的过程。
  性能测试方法:

  1. 性能测试: 以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期。
  2. 负载测试
    对系统不断地增加并发请求以增加系统压力,知道系统的某项或多项性能指标达到安全临界值,如某种资源已经呈饱和状态,这是继续对系统施加压力,系统的处理能力不但不提高,反而会下降。
  3. 压力测试 超过安全负载的情况下,对系统继续施加压力,知道系统崩溃或不能再处理请求,一次获得系统最大压力承受能力。
  4. 稳定性测试
    被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定。在不同生成环境、不同时间点的请求压力是不均匀的,呈波浪特性,因此为了更好地模拟生产环境,稳定性测试也不应均与地对系统施加压力。

性能优化

  根据网站分层架构,性能优化可分为:web前端性能优化、应用服务器性能优化、存储服务器性能优化。

  1. web前端性能优化
    • 浏览器访问优化:减少http请求;使用浏览器缓存;启用压缩;css放在页面最上面、javaScript放在页面最下面;减少Cookie传输
    • CDN加速
    • 反向代理
  2. 应用服务器性能优化
    • 分布式缓存(Redis等)
    • 异步操作(消息队列)
    • 使用集群(负载均衡)
    • 代码优化
  3. 存储性能优化
    • 机械硬盘vs固态硬盘
    • B+树 vs LSM树
    • RAID vs HDFS

代码优化
- 多线程(Q:怎么确保线程安全?无锁机制有哪些?)
- 资源复用(单例模式,连接池,线程池)
- 数据结构
- 垃圾回收

多线程三大定律
1. Amdahl 定律
–Gene Amdahl 发现在计算机体系架构设计过程中,某个部件的优化对整个架构的优化和改善是有上限的。这个发现后来成为知名的Amdahl 定律。
比如:即使你有10个老婆,也不能一个月把孩子生下来。
2. Gustafson 定律
–Gustafson假设随着处理器个数的增加,并行与串行的计算总量也是可以增加的。Gustafson定律认为加速系数几乎跟处理器个数成正比,如果现实情况符合Gustafson定律的假设前提的话,那么软件的性能将可以随着处理个数的增加而增加。
比如:当你有10个老婆,就会要生更多的孩子。
3. Sun-Ni 定律
–充分利用存储空间等计算资源,尽量增大问题规模以产生更好/更精确的解。
比如:你要设法让每个老婆都在干活,别让她们闲着。


http://www.niftyadmin.cn/n/999358.html

相关文章

qq互联平台配置网站回调域避免出现“redirect uri is illegal(100010)”

qq互联平台配置网站回调域避免出现“redirect uri is illegal(100010)”,通过腾讯开放平台在线解码工具,解决qq互联平台配置网站回调域配置问题。 大家在配置qq互联平台网站回调域的时候可能会出现的情况,切图: 我通过搜索“在线…

第四回:星夜急返桑梓地 浊泪再洒旧书院[林大帅作品连载]

第四回:星夜急返桑梓地 浊泪再洒旧书院 诗曰: 夏雨送别梦乍醒,一朝重返绪难平, 旧院门锁石头路,咫尺两心忘多情。 却说林二送文会学妹一干人等起身之后,便返眼科大楼。这午间伙计,先生回的回&#xff…

log4j讲解

2019独角兽企业重金招聘Python工程师标准>>> 关于log4j的日志操作 发表于2年前(2014-08-13 17:57) 阅读(1643) | 评论(1) 37人收藏此文章, 取消收藏 赞0 log4j 日志 三大框架 目录[-] 可以设置级别: debu…

站内站,配置伪静态,在网站目录里再搭建一个网站

站内站,配置伪静态,在网站目录里再搭建一个网站,将网站程序上传到网站新建目录,网站配置伪静态,一个目录站就这样搭建成了。 做一个站内站,在网站目录里新建一个文件夹,上传wordpress程序到文件…

C和指针 (pointers on C)——第一章:高速启动

大多数人并不认为有几类人猿学校计划非常赞同C学习好,然后看多本书。 仅仅作为读书笔记写。有时还包括一些题目和答案。 这样的公开栏,这两种玉引砖敲,对于自勉,鼓励王!第一章:手 我每次都是复习的来写。我…

Android读写文件

用文件进行数据存储1.存储到android自带的存储空间中Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。public class FileService { private Context context; public FileService(Context co…

python + django + bootstrap + uWSGI + nginx 环境搭建

2019独角兽企业重金招聘Python工程师标准>>> 原文:http://www.huangdc.com/103 在了解 uWSGI 之前,我们不妨先了解一下 python http服务器? 要使 Python 写的程序能在 Web 上被访问,还需要搭建一个支持 Python 的 H…

poj 1061 青蛙的约会(扩展欧几里得)

Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对…