流量优化:
防盗链
前端优化:
减少http请求
添加异步请求
启用浏览器缓存和文件压缩
cdn加速
建立独立图片服务器
服务端优化:
页面静态化
并发处理(比如多线程、多进程)
队列处理
数据库优化
数据库缓存(redis、memcache、mongodb等)
分库分表、分区操作
读写分离
负载均衡
web服务器优化
负载均衡
通过lvs的三种基本模式实现负载均衡
mycat数据库中间件实现负载均衡
qps:每秒请求或查询的数量,每秒响应请求数(如http请求)
吞吐量:单位时间内处理的请求数量(通常由qps与并发数决定)
响应时间:从请求发出到收到并且响应所花时间
pv:综合浏览量,即页面浏览量或点击量(如果一个用户刷新一个页面若干次也只能算一个pv),一个访客在24小时内访问的页面数量。同一个人浏览你的网站同一个页面,只算一次pv
uv:独立访客,一定时间范围内相同访客多次访问网站,只计算为一个独立访客
日网站带宽=pv/统计时间(换算到秒)*平均页面大小(单位kb)*8(峰值一般是平均的倍数,根据实际情况来定)
并发连接数不等于qps,qps是每秒http请求数量,并发连接数是系统同时处理的请求数量
常用性能测试工具:
ab、wrk、http_load、web bench、siege、apache jmeter
ab全程apache benchmark,模拟多个访问者同时对某一url地址进行访问,它的测试目标基于url,可以测试apache、nginx、lighthttp、tomcat、iis等web服务器的压力
注意事项:
测试机器与被测试机器要分开
不对线上服务做压力测试
观察测试工具ab所在机器,以及被测试的前端机的cpu,内存,网络等都不超过最高限度的75%
防盗链(当流量很大,但访问量没有响应大的时候,考虑这种情况)
可以减轻服务器压力
工作原理:通过referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址,一旦检测到来源不是本站即进行阻止或者返回指定页面
referer:
nginx模块ngx_http_referer_module用来阻挡来源非法的域名请求。nginx指令valid_referers,全局变量$invalid_referer。
为什么加none:因为通过浏览器访问本身就是空,要确保通过浏览器也可以访问
(可以通过伪造referer来进行盗链)
加密签名:
使用第三方模块HttpAccessKeyModule实现Nginx防盗链
减少http请求
只有10%-20%响应时间花在接收请求的html文档上,剩下的80%-90%时间花在html文档所引用的组件(图片、js、css、flash等)进行的http请求上
改善:
合并组件数量:
压缩js、css等(去掉空格、回车)
合并js、css等
图标放到一个图片上(图片地图)
图片使用base64编码减少页面请求数:
http缓存
缓存分类:
200 ok (from memory cache):(浏览器调试工具显示)
304 not modified:协商缓存,本地缓存失效,会去服务端请求,带头信息过去,让服务器判断该资源在服务端是否过期,如果没过期,告诉浏览器继续使用本地缓存。(快速,发送的数据少,只返回基本的响应头信息,不发送实际响应体)
200 ok:以上两种缓存都失败,服务器返回完整响应。没用到缓存,相对较慢
(其中,本地缓存最快,无需请求服务器)
适合做缓存的内容:
不变的图像,如logo、图标等
js、css静态文件
可下载的内容,媒体文件
建议使用协商缓存:
html文件(数据可能变化)
常变动的图片
经常修改的js、css文件
(js、css文件的加载可以加入文件的签名来拒绝缓存,如index.css?签名、index.签名.js)
不建议做缓存的内容:
用户隐私等敏感数据
经常改变的的api数据接口
nginx本地缓存配置:
例子:
图片压缩:
压缩工具:tinypng、jpegMini、imageOptim
gzip压缩
cdn(内容分发网络):
cdn服务商:bat、七牛等
动态语言静态化:
将php等动态语言逻辑代码生成静态html文件
(一般框架中自带该功能。步骤:判断是否有xx.html文件,无则生成,有则返回文件内容)
并发处理:
swoole、golang等
例子:异步发送邮件、短信等
数据库缓存:
mysql自带查询缓存,但一般不用
redis、memcache等
redis持久化:aof、快照
比如社交系统(微博等)的关注关系、session存入redis、
mysql数据层优化
数据表数据类型优化
如:ip地址,用整型存比字符串型更节省空间(php用ip2long转换存入数据库)
索引优化
sql语句优化
存储引擎优化
数据表结构设计的优化
数据库服务器架构的优化
(详情:https://blog.51cto.com/5660061/2386930)
web服务器的负载均衡
七层负载均衡:基于url等应用层信息的负载均衡
如nginx的proxy:
功能强大、性能卓越、运行稳定
配置灵活简单
能自动剔除工作不正常的后端服务器
上传文件使用异步模式
支持多种分配策略,可以分配权重,分配方式灵活
四层负载均衡:如lvs