欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


欢迎跳转到本文的原文链接:https://honeypps.com/architect/how-to-improve-performance-of-website/

概述

  性能是网站的一个重要指标,除非是没得选择(比如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 定律
    –充分利用存储空间等计算资源,尽量增大问题规模以产生更好/更精确的解。
    比如:你要设法让每个老婆都在干活,别让她们闲着。

欢迎跳转到本文的原文链接:https://honeypps.com/architect/how-to-improve-performance-of-website/


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


如何提升网站的性能?相关推荐

  1. 十个提升网站访问性能的方法

    什么是网页的性能?为什么网页性能比较重要?中间有哪些挑战和解决方案?本文从前端工程师的角度,列举了一些架构设计案例,介绍如何提高网站访问性能.比如:合理用力压缩技术,减小http请求数,cdn,延迟等 ...

  2. 如何通过优化服务器提升网站的SEO排名

    在当今数字化时代,拥有一个高效.稳定的服务器对于网站的成功至关重要.然而,服务器不仅仅是为了提供网站的基本运行,它还可以对搜索引擎优化(SEO)起到关键作用,于是就有了多IP站群服务器这样对SEO非常 ...

  3. 如何利用全站加速,提升网站性能和用户体验?

    随着网络技术的发展,越来越多的应用基于互联网发布,再好的应用,如果打开速度慢,10个用户会有9个用户选择离开,相关统计数据显示,每增加0.1秒的加载延迟,将会导致客户活跃度下降1%.在目前获客成本较高 ...

  4. 基调网络提供网页首屏监测技术 助力互联网应用企业提升网站性能

    易观国际(Analysys International)近期针对主要银行网站质量监测显示:从网站连接成功率来看,各大银行整体表现有所提升.从网站首页接入的首屏时间来看,大部分银行的表现仍不够理想,部分 ...

  5. 如何让你的Nginx 提升10倍性能?

    来源:www.zcfy.cc/article/10-tips-for-10x-application-performance-nginx-22.html 原文:https://www.nginx.co ...

  6. 如何提升深度学习性能?数据、算法、模型一个都不能少

    https://www.toutiao.com/i6635808175893250564/ 2018-12-17 12:04:48 该文来自DataCastle数据城堡(DataCastle2016) ...

  7. 提升网站优化排名的前提是什么?

    网站优化是一件长期的工作,为了能够给网站排名奠定良好的基础,优化人员就一定要做好网站的优化基础,那么怎样才能确保网站更利于优化,更有助于排名提升呢?使得网站高排名需要网站具备什么特性?接下来,我们就一 ...

  8. IIS网站服务器性能优化指南

    Windows Server自带的互联网信息服务器(Internet Information Server,IIS)是架设网站服务器的常用工具,它是一个既简单而又麻烦的东西,新手都可以使用IIS架设一 ...

  9. 合理提升WEB前端性能

    前端的优化包括四个部分:HTML结构优化.CSS样式优化.JS行为优化.服务器的优化.合理的前端优化不仅能够提升网站加载速度,而且能够更好的提升用户体验和团队开发效率.所以前端性能优化的重要性是不言而 ...

最新文章

  1. c语言程序设计基础程序改错,c程序设计程序改错题_相关文章专题_写写帮文库...
  2. Keepalived+LVS+Nginx负载均衡之高可用
  3. C++头文件中预编译宏的目的
  4. shell 字符串操作(长度,查找,替换)详解
  5. post postman 传值_postman参数传递
  6. 一个整形数组中最大值求和问题(3)
  7. 经纬度画轨迹图_实战Python制作炫酷的个人3D动态足迹图
  8. QT的QListWidget类的使用
  9. CSS3动画(典型模板)
  10. Fiori navigation logic ( Route )
  11. 计算机二级证书在学校哪里领取,计算机二级证书去哪里领取
  12. cut命令详解(转)
  13. WordPress 首页显示摘要
  14. 几种关系型数据库比较
  15. Ajax请求中async属性
  16. java环境64位_JAVA环境配置(WIN10之64位)
  17. Excel游戏—制作数字炸弹小游戏
  18. 百家讲坛之易中天品三国MP3全集
  19. Web课程设计-仿当当网-增删改查-java+jsp+mysql-期末大作业
  20. STMCubeMX+Proteus仿真DHT11(数码管显示)

热门文章

  1. log4j 2.x 架构
  2. JAVA基本数据类型和String类型的转换
  3. pytorch教程龙曲良16-20
  4. 竞价推广账户创意撰写的技巧之核心思路
  5. CSS魔法堂:那个被我们忽略的outline
  6. Python 爬取斗图啦图片
  7. data source from bit.ly
  8. mysql 终端操作
  9. Java学习笔记50:JSONObject与JSONArray的使用
  10. 关于bacula网络备份软件的安装以及配置3