1、不一样视角下的网站高性能指标,以及其优化
一、开发人员的视角
开发人员关注的主要是应用程序自己及其相关子系统的性能,包括响应延迟、系统吞吐量、并发处理能力、系统稳定性等技术指标。优化网站性能的主要手段包括 使用缓存加速数据读取,使用集群提升吞吐能力,使用异步消息加快请求响应及实现削峰,使用代码优化手段改善网站性能。
二、运维人员视角
运维人员更关注基础设施性能和资源利用率,如网络运营商的宽带能力、服务器硬件的配置、数据中心网络架构、服务器和网络带宽的资源利用率等。主要优化手段有建设优化骨干网、使用高性价比定制服务器、利用虚拟化技术优化资源利用等
2、性能测试指标
一、响应时间
打开一个网站 几秒
在数据库中查询一条记录(有索引) 十几毫秒
机械磁盘一次寻址定位 4毫秒
从机械磁盘顺序读取1MB数据 2毫秒
从SSD磁盘顺序读取1MB数据 0.3毫秒
从远程分布式缓存Redis读取一个数据 0.5毫秒
从内存中读取1MB数据 十几微秒
JAVA程序本地方法调用 几微秒
网络传输2KB数据 1微秒
二、并发数
名词解释,指的是系统可以同时处理请求的数目,这个数字也反映了系统的负载特性。对于网站而言,并发数即网站并发用户数,指同时提交请求的用户数目。
网站系统用户数》》网站在线用户数》》网站并发数
三、吞吐量
指单位时间内系统处理的请求数量,体现系统的总体处理能力。对于网站,能够用 “请求数/秒” 或者是“页面数/秒”来衡量,也能够用 “访问人数/天” 。TPS (每秒事务数)是吞吐量的一个经常使用量化指标,此外还有HPS(每秒HTTP请求数)、QPS(每秒查询数)
四、性能计数器
它是描述服务器或操做系统性能的一些数据指标。包括System Load、对象与线程数、内存使用、CPU使用、磁盘与网络IO等指标。这些指标也是系统监控的重要参数,对这些值设置报警阀值,当监控系统发现性能计数器超过阀值时,就向运维和开发人员报警
3、性能优化
一、前端性能优化
a、减小HTTP请求数目,图片合并,JS合并,CSS合并 aJax合并
b、使用浏览器缓存 主要是缓存一些静态资源 CSS JS Logo 图标 等 能够经过设置HTTP中Cache-Control和Expires的属性,可设定浏览器缓存,几天 甚至几个月
在某些时候,静态文件资源变化须要及时应用到客户端浏览器,这种状况能够经过改变文件名实现。
c、启用压缩
一些文本文件压缩率高达 80% 启用压缩能够有效减小HTTP传输的数据量,不只下降带宽还减小传输时间。(反作用是 压缩对服务器的CPU形成压力)
d、Css放在页面最上面、JS 放在页面最下面
浏览器会在下载完全部CSS后对页面进行渲染,而JS正好相反,浏览器在加载JS的同时 会当即执行JS,有可能会堵塞整个页面,形成页面显示缓慢所以JS 最好放最下面,CSS放页面上面
e、减小cookie传输
一方面,Cookie包含在每次请求和响应中,太大的Cookie会严重影响数据传输。另外一方面 对于某些静态资源的访问 如CSS,SCRIPT等,发送Cookie没有意义,能够考虑静态资源使用独立域名访问,避免请求静态资源时发送Cookie
二、CDN加速
CDN 的本质仍然是一个缓存,并且将数据缓存在离用户最近的地方,使用户以最快速度得到数据,即所谓网络访问第一跳
因为CDN不熟在网络运营商的机房,这些运营商有事终端网络的服网络服务提供商,所以用户请求路由的第一跳就到达了CDN服务器,当CDN中存在浏览器请求的资源时,直接从CDN返回给浏览器,最短路径返回响应,加快用户访问速度,减小数据中心负载压力。这个技能能够极大的改善网页打开速度
三、反向代理
传统代理服务器位于浏览器的一侧,代理浏览器将HTTP请求发送到互联网上,而反向代理服务器位于网站机房一侧,代理网站Web服务器接收HTTP请求,而后将请求转发给后端的WEB服务器,至关于一个网络安全屏障。此外,还能够将热点缓存内容保存于Web服务器上,减轻后端压力。同时,反向代理还能够实现负载均衡,改善整个网站高并发能力
4、应用服务器性能优化
一、分布式缓存
网站性能优化第必定律:优先考虑使用缓存优化性能
缓存的基本原理,缓存是指将数据存储在相对较高访问速度的存储介质中,以供系统处理。一方面缓存访问速度快,能够减小数据访问的时间,另外一方面若是缓存的数据是通过计算处理获得的,那么被缓存的数据无需重复计算便可直接使用。
缓存的本质是一个内存Hash表,在网站应用中,数据缓存以一对Key,Value的形式存储在内存Hash表中,Hash表数据读写的时间复杂度为O(1)。
缓存主要用来存放那些读写比很高、不多变化的数据,如商品的类目信息,热门词的搜索列表信息,热门商品信息等。
二、合理使用缓存
不合理使用缓存非但不能提升系统的性能还会成为系统的累赘,甚至风险。实践中缓存滥用的情景家常便饭,这样很差哦
a、频繁修改的数据,若是缓存中保存的数据,就会在数据写入缓存后,应用还来不及读取缓存,数据就已经失效的情形,徒增系统负担。通常来讲,数据的读写比在2:1以上,即写入一次缓存,在数据更新前至少读取两次,缓存才有意义。
b、没有热点的访问,缓存使用内存做为存储,内存资源宝贵而有限,不可能将全部数据都缓存起来,只能将最新访问的数据缓存起来,而将历史数据清理出缓存。若是应用系统访问数据没有热点,不遵循二八定律,即大部分数据访问并无集中在小部分数据上,那么缓存就没有意义,由于大部分数据尚未被再次访问就已经被挤出缓存了
c、数据不一致与脏读,通常会对缓存数据设置失效时间,一旦超过失效时间,就要从数据库中从新加载,所以应用要容忍必定时间的数据不一致,如卖家已经编辑了商品属性,可是须要过一段时间才能被买家看到
d、缓存可用性,缓存是为提升数据读取性能的,缓存数据丢失或者缓存不可用不会影响到应用程序的处理--它能够从数据库直接获取数据。可是当缓存没法正常工做时,全部压力都要集中到数据库中,若是数据库没法承受突如其来的压力,整个系统就崩了。经过 主从缓存,一台崩了,另外一台启动,能够解决问题。可是这种设计有违缓存的初衷,缓存不该该被当作一个可靠的数据源来使用,经过分布式缓存,将数据分散在多台服务器中,即便一台缓存服务器崩了,也只是缺失了部分数据,重启后,再从数据库恢复便可
e、缓存预热,缓存中存放的是热点数据,热点数据又是缓存系统利用LRU(最近醉酒未用算法) 对不断访问的数据筛选淘汰出来,
f、缓存穿透,若是由于不恰当的业务、或者恶意攻击持续高并发地请求某个不存在的数据,因为缓存没有保存该数据,全部请求都会落到数据库上,会对数据库形成很大压力,甚至崩溃。一个简单的策略是将不存在的数据也缓存起来,设置为null
g、分布式缓存架构,分布式缓存不熟在多个服务器组成的急群众,以集群方式提供缓存服务,其架构方式有两种,一种是以Memcache为表明的不互相通讯的分布式缓存,经过必定的hash算法,来分配某个缓存应该存放的地点,服务器之间不进行通讯,这样的缓存集群能够很容易实现扩容。
h、多利用异步操做。使用消息队里将调用异步化,可改善网站的扩展性。好比记日志,作一些计算等操做,放后台作,先将数据返回给用户,这个仍是要看业务需求,有必定限制,不是什么业务均可以这么作的
i、使用集群,memcache redis
j、代码优化,资源复用,线程池(redis/mysql链接池)
k、存储性能优化,即:硬件性能提高,不少,好比 硬盘,机械硬盘->固态硬盘 有些服务器须要更好的CPU
总结:网站性能优化技术是在网站性能遇到问题的解决方案。而网站性能问题不少事在用户高并发访问时产生的,因此网站性能优化的主要工做时改善高并发用户访问状况下的网站响应速度。