读书笔记:网站架构之性能篇

目录:前端

1、网站性能测试算法

2、Web前端性能优化数据库

3、应用服务器性能优化(重点)浏览器

4、存储性能优化缓存


PS:本文为《大型网站技术架构 & 核心原理与案例分析(李智慧 著)》一书的读书笔记安全


// =======================================================================================性能优化


网站性能测试服务器


1、不一样视角下的网站性能网络

一、用户视角:直观视觉感觉数据结构

二、开发人员视角:响应延迟、吞吐量、并发处理能力等

三、运维人员视角:基础设置资源利用率


2、性能测试指标

一、响应时间:请求从发出处处理完接收的时间

二、并发数:同时处理请求的数量,即同时提交请求的用户数

三、吞吐量:单位时间内处理请求的数量

*:随着并发数增大:系统吞吐量先逐渐增长到极限,以后反而降低;系统响应时间先是小幅上升,当吞吐量达到极限后快速上升

四、性能计数器:服务器监控指标,如CPU、内存、磁盘IO、网络IO


3、性能测试(压测)方法

*:不断增长系统访问压力(并发请求数),以获取系统性能指标数据


4、性能测试(压测)报告

*:要可以反应压测的系统性能曲线规律,阅读者能评估系统性能是否能知足需求


// ===========================================================


Web前端性能优化


1、浏览器访问优化

一、减小http请求:每次独立的http请求的通讯和服务开销都很昂贵,可经过合并CSS、JS、图片等方式减小http请求数

二、使用浏览器缓存:经过设置http头的Cache-Control和Expires属性设定浏览器缓存,将CSS、JS、图片等较少变动的资源缓存下来

三、启用压缩:文件压缩可减小通信传输的数据量,文本压缩率可达80%以上,但压缩解压会增长计算压力(权衡)

四、CSS渲染放最上面,JS功能脚本放最下面:使用户视觉感觉先已经看到页面


2、CND加速

*:部署在网络运营商机房,用户请求路由的第一条就到达CND服务器,有效下降请求时间


3、反向代理

*:部署在网站机房内,用户请求先到达反向代理服务器,有3个主要功能

一、加速Web请求:经过配置缓存功能来实现

二、安全:在用户请求和应用服务器间创建一个屏障

三、负载均衡:均匀分发请求到应用服务器


// ===========================================================


应用服务器性能优化


1、分布式缓存(memcache)

*:网站性能优化第必定律:优先考虑缓存

一、缓存的基本原理:本质为内存Hash表

*:数据以Key、Value对形式存储在内存Hash表中。经过Hash(Key)获得HashCode,即Value对应内存的位置

二、合理使用缓存

*:不适合缓存的数据:频繁修改(写致使缓存中的数据失效)、没有热点、一致性要求高(缓存设有失效时间,这段时间内可能有脏数据)

*:缓存预热:缓存刚起来时为空数据,最好在使用前预加载数据库数据

*:缓存雪崩:当缓存服务器崩溃时,全部请求会落到数据库致使数据库宕机。好的方法是使用分布式缓存服务器提升缓存可用性

*:缓存穿透:不正确或者恶意的请求可能落在某个不存在的Key致使频繁读数据库,一个简单对策将不存在的Key也缓存起来

三、分布式缓存架构

*:一种是以JBossCache为表明的,每一个缓存服务器数据相同,需同步更新的分布式缓存(不多用)

*:一种是以Memcache为表明的,每一个缓存服务器数据部相同,之间不须要通讯的分布式缓存。应用程序经过一致性Hash等路由算法选择具体的缓存服务器

四、Memcache的特色

*:简单的通行协议:TCP的,一套基于简单文本的自定义协议(一个命令关键字+一组命令操做数,如get <key>)

*:丰富的客户端程序:几乎支持全部主流语言(由于通讯协议简单)

*:高性能的网络通讯:基于Libevent,提供稳定的长链接

*:高效的内存管理::简单固定的内存空间分配,slab_class=>slab=>chunk

*:互不通讯的集群架构:客户端路由算法一致性Hash更成为数据存储伸缩性架构的范例


2、异步操做

*:使用消息队列将调用异步化,可改善网站的扩展性

*:消息队列:用户请求发送给消息队列后当即返回,再由消费队列的消费者进程将消息异步写入数据库,具备很好的削峰做用


3、使用集群

*:利用集群解决高并发问题,前端用负载均衡技术将请求均匀分发到多台服务器上(不仅仅局限在应用服务器)


4、代码优化

一、多线程

*:线程的优势:比进程更轻量,占用更少系统资源,切换代价更小

*:使用多线程的2个主要缘由:IO阻塞(阻塞时能够调用其余线程处理)和多CPU(最大限度使用CPU)

*:线程数估算公式:启动线程数 = [ 任务执行时间 / ( 任务执行时间 - IO等待时间 ) ] * CPU核数

*:线程安全问题实质:多线程并发对某块内存进行修改操做(对象、内存、文件、数据库等)

*:线程安全问题解决思路:对象设计为无状态,使用局部变量,并发访问加锁等

二、资源复用

*:开销较大的系统资源:数据库链接,网络Socket链接,线程,复杂对象等

*:资源复用的2个方法:单例模式和对象池,均可以防止没必要要的建立和销毁操做

三、数据结构和算法

*:灵活组合数据结构和算法优化程序执行复杂度,如Hash等


// ===========================================================


存储性能优化


1、机械硬盘和固态硬盘

一、机械硬盘:每次访问数据都须要移动磁头臂(物理运动),故数据连续访问和随机访问性能表现差异大

二、固态硬盘:没有机械装置,数据存储于硅晶体中,有更好的性能。可靠性,性价比还有待提高,但逐步取代机械硬盘是早晚的事


2、B+树和LSM树

一、因为机械硬盘具备快速顺序读写,慢速随机读写的特性,故应用程序选择存储结构和算法极为重要

二、B+树是一种专门针对磁盘存储而优化的N叉排序树,目前数据库多采用两级索引,树的层次最多三层

三、LSM树能够看为一个N阶合并树,数据写操做都在内存中进行,目前许多NoSQL都采用LSM树做为主要数据结构


3、RAID和HDFS

一、RAID,即廉价磁盘冗余阵列,主要是为了改善磁盘访问延迟,增长磁盘可用性和容错能力(数据在多块磁盘并发读写和数据备份)

二、HDFS,即分布式文件系统,Hadoop的文件系统,系统在整个存储集群的多台服务器上进行数据并发读写和备份

相关文章
相关标签/搜索