《大型网站技术架构(核心原理与案例分析》拜读总结,第四章——瞬时响应:网站的高性能架构)

?网站性能是客观指标,可具体体现在响应时间,吞吐量等技术指标。
一:网站性能测试:
1.不同视角下网站性能:
1.用户视角:用户在浏览器上直观感受到的网站响应速度,包括用户计算机和网站服务器的通信时间,网站服务器处理时间,用户计算机浏览器构造请求解析响应数据的时间。

【《大型网站技术架构(核心原理与案例分析》拜读总结,第四章——瞬时响应:网站的高性能架构)】通过优化HTML样式,利用浏览器端的并发和异步特性,调整浏览器缓存策略,使用CDN,反向代理等手段。
2.开发人员视角:响应时间,系统吞吐量,并发处理能力,稳定性等


通过使用缓存加速数据读取,使用集群提高吞吐量,使用异步消息加快请求响应及实现削峰,代码优化


3.运维人员视角:网络运营商的带宽能力,服务器硬件配置,资源利用率等

通过建设优化骨干网,使用高性价比定制服务器,用虚拟化技术实现
2.性能测试指标:
1.响应时间《大型网站技术架构(核心原理与案例分析》拜读总结,第四章——瞬时响应:网站的高性能架构)
文章图片

2.并发数
3.吞吐量
4.性能计数器:内存使用,CPU使用,磁盘与网络IO
system load :系统负载,指被CPU和等待CPU处理的进程数目总和。




性能优化:
二.web前端:业务逻辑之前的部分,包括浏览器加载,网站视图模型,图片服务,CDN等
主要手段:优化浏览器访问,反向代理,CDN
1.浏览器访问优化:
1.减少http请求:合并CSS,合并JS,合并图片,减少浏览器的请求次数。
2.使用浏览器缓存:把更新频率较低的CSS,JS,LOGO,缓存在浏览器中,通过设置HTTP头的
Cache-control和Expires设置浏览器缓存,缓存时间。

文件要更新时,通过更改文件名,更新HTML文件中的引用。应采用批量更新,不要一次性全部更新,应有间隔的一个个更新,以免用户浏览器缓存大量失效,集中更新缓存,造成度武器负载陡增。

3.启用压缩:服务器压缩文件,浏览器解压文件,减少通信传输数据量。但在压缩对服务器和浏览器有一定的压力,通信宽带良好,而服务器资源不足时权衡考虑。
4.CSS放最上面,JS放页面最下面
浏览器会下载完全部CSS才渲染页面,而js相反,加载后立即执行,有可能会阻塞页面,如果页面解析时就需要JS,则不适合放最下面。
5.减少cookie传输。
2.CDN加速
本质还是缓存,把数据缓存在离用户最近的地方,加速获取速度。
缓存一些静态资源:图片,文件,JS,CSS,静态页面等。
3.反向代理
反向代理服务器位于网站机房。
除了保护网站安全,还可配置缓存加速WEB请求,当用户第一次访问静态内容时,缓存在反向代理服务器上,其他用户再访问时直接从缓存取;还能实现负载均衡,构建集群,提升并发情况下性能。
三.应用服务器优化:处理网站业务的服务器
优化手段:缓存,集群,异步
1.分布式缓存:
缓存的本事是一个内存的HASH表,数据已以K,V形式存储在HASH表中。
主要用来缓存读写频率高,很少变化的数据
当一台缓存服务器宕机时,只有部分数据丢失,重新从数据库读取这小部分数据不会对数据库产生很大影响。
缓存预热:在缓存系统启动时把热点数据加载好
缓存穿透:因为不恰当的业务或者恶意攻击持续高并发的访问某个不存在的缓存,所有请求回落到数据库上,一个简单地对策是将不存在的数据也换存起来(Value为null)
分布式缓存架构:
JBoss Cache 为代表的需要更新同步的分布式缓存:某台服务器缓存有更新时会通知其他服务器更新缓存数据,当集群规模较大时,代价惊人,很少在大型网站使用。
Memcached 互不通信的缓存架构,应用程序通过一致性Hash等路由算法选择缓存服务器访问数据。
2.异步操作:使用消息队列将调用异步化,可改善扩展性和性能。
由于数据写入消息队列后立即返回给用户,数据在后续操作中可能失败,因此使用异步消息队列
需适当修改业务流程配合,如订单提交后,提交到队列,不能立即返回订单提交成功。
3.集群:用负载均衡为应用构建由多个服务器组成的集群,将并发请求分发到不同服务器上处理。
4.代码优化:1.多线程: !.将对象设计为无状态对象(对象无成员变量或成员变量也为无状态对象)
!.使用局部变量,
!.并发访问资源时,使用锁。
2.资源复用:单例,对象池(连接池,线程池)
3.数据结构
4.垃圾回收

四.存储性能优化:
1.机械硬盘,固态硬盘
2.B+树:专门针对磁盘优化的N叉排序树
LSM树:许多NoSQL使用的数据结构,可看做一个N阶合并树
3.RAID:廉价磁盘冗余阵列:改善磁盘访问延迟
HDFS:以块为单位管理文件内容,程序写文件时,每写完一个块,复制到另2台机器上。
对文件处理计算时,通过MapReduce并发计算任务框架,可启动多个计算子任务同时读取文件的多个块,并发处理。
NameNode:在HDFS中只有一份,管理文件名block的分配
DataNode:bushuzai HDFS集群所有机器上,存储数据。

    推荐阅读