外链论坛

 找回密码
 立即注册
搜索
查看: 23|回复: 0

大型网站性能优化全面总结(意见保藏)

[复制链接]

2328

主题

164

回帖

9911万

积分

论坛元老

Rank: 8Rank: 8

积分
99111823
发表于 2024-7-27 08:34:38 | 显示全部楼层 |阅读模式

把握性能优化的关联知识,特备针对大型网站大流量的应用至关重要,今天重点分享大型网站性能优化内容@mikechen

应用服务器性能优化

应用服务器便是处理网站业务的服务器,网站的业务代码都安排这儿,是网站研发繁杂,变化最多的地区,优化手段重点有缓存、集群和异步等。

网站性能优化第必定律:优先思虑运用缓存优化性能。

缓存的本质是一个内存Hash表,网站应用中,数据缓存以一对Key,Value的形式存储在内存Hash表中。缓存重点用来存放哪些读写比很高、很少变化的数据。

二八定律:80%的拜访落在20%的数据上

运用缓存需要重视的问题:

把频繁修改的数据放入缓存。容易显现数据写入缓存后,应用还来不及读取缓存,数据就已然失效的情形,徒增系统包袱通常来讲,数据的读写比在2:1以上,缓存才有道理热点的拜访 缓存运用的内存资源非常宝贵,只能将最新拜访的数据缓存起来,而把历史数据清理出缓存。即缓存资源应该留给20%的热点数据。数据不一致与脏读。通常会对缓存设置失效时间,超过失效时间,就要从数据库重新加载。因此呢应用要忍受一按时间的数据不一致。另一种策略是数据更新时立即更新缓存,不外会带来更加多的系统开销和事务一致性的问题。缓存可用性。业务发展到必定周期时,缓存会承担大部分数据拜访的压力,数据库已然习惯了有缓存的日子,因此当缓存服务器崩溃时,数据库会由于完全不可承受如此大的压力而宕机,从而引起全部网站不可用。这种状况叫作作缓存雪崩,出现这种故障,乃至不可简单地重启缓存服务器和数据库服务器来恢复网站拜访处理方式:1、缓存热备(当某台服务器宕机时,将缓存拜访切换到热备服务器上。);2、缓存服务器集群缓存预热。缓存中存放的是热点数据,热点数据是缓存系统用LRU对持续拜访的数据筛选出来的,这个过程需要较长的时间。新起步的缓存系统任何数据,此时系统的性能和数据库负载都不太好。因此呢能够选取起步缓存是就把热点数据预加载好。缓存穿透。由于不恰当的业务或恶意攻击,连续高并发地拜访某一个不存在的数据,倘若缓存不保留该数据,就会有海量的请求压力落在数据库上。简单的处理方式是把请求的不存在的数据放进缓存,其value是null。

对应能够思虑的分布式缓存有memcached、redis,降低对数据库的读操作。

数据库SQL性能优化

最后便是思虑数据库端的性能优化,倘若拜访量巨大,除了sql优化外,还会触及到分库分表、读写分离、利用数据库中间件来处理(下面架构师系列有讲),这儿再也不重复。

1.对查找进行优化,要尽可能避免全表扫描,首要思虑在 where 及 order by 触及的列上创立索引。

2.应尽可能避免在 where 子句中对字段进行 null 值判断,否则将引起引擎放弃运用索引而进行全表扫描,如:

select id from t where num is null

3.应尽可能避免在 where 子句中运用 != 或 <> 操作符,否则将引擎放弃运用索引而进行全表扫描。

4.应尽可能避免在 where 子句中运用 or 来连接要求倘若一个字段有索引,一个字段索引,将引起引擎放弃运用索引而进行全表扫描。

5.in和 not in 要慎用,否则会引起全表扫描,如:

select id from t where num in(1,2,3)

针对连续的数值,能用 between就不要用 in 了:

select id from t where num between 1 and 3

6.针对多张大数据量(这儿几百条就算大了)的表JOIN,要先分页再JOIN,否则规律读会很高。

7.索引并不是越多越好,索引固然能够加强相应的 select 的效率,但同期降低了 insert 及 update 的效率,由于 insert 或 update 时有可能会重建索引,因此怎么样建索引需要谨慎思虑,视详细状况而定。一个表的索引数最好不要超过6个,若太多则应思虑有些不常运用到的列上建的索引是不是有 必要。

8.尽可能运用数字型字段,若只含数值信息的字段尽可能不要设计为字符型,这会降低查找和连接的性能,并会增多存储开销。这是由于引擎在处理查找和连 接时会逐个比较字符串中每一个字符,而针对数字型而言只需要比较一次就够了。

9.尽可能避免向客户端返回大数据量,若数据量过大,应该思虑相应需要是不是恰当

10.尽可能避免大事务操作,加强系统并发能力。

Web前端性能优化

Web前端指网站业务规律需要优化,包含

1.浏览器加载

2.网站视图模型

3.照片服务

4.CDN服务等

重点优化手段有优化浏览器拜访运用反向代理,CDN等。

1.浏览器拜访优化

(1)减少http请求

HTTP协议是无状态的应用层协议,寓意着每次HTTP请求都需要简历通信链路,进行数据传输,而在服务器端,每一个HTTP都需要起步独立的线程去处理,这些通信和服务的开销都很昂贵,减少HTTP请求的数目可有效加强拜访性能。

减少HTTP请求的重点手段是:

合并CSS,以及压缩CSS体积合并JavaScript,以及压缩JS体积合并照片

将浏览器一次拜访需要的JavaScript,CSS合并成一个文件,这般浏览器就只需要一次请求。多张照片合并成一张,倘若每张照片都有区别的超链接,可经过CSS偏移响应鼠标点击操作,构造区别的URL。

(2)运用浏览器缓存

对一个网站而言,CSS,JavaScript,Logo,图标等这些静态资源文件更新的频率都比较低,而这些文件又几乎是每次HTTP请求都需要的,倘若将这些文件缓存在浏览器中,能够极好地改善性能。经过设置HTTP头中Cache-Control和Expires属性,可设定浏览器缓存,缓存时间能够是数天乃至是几个月。有时候,静态资源文件变化需要即时应用到客户端浏览器,这种状况能够经过改变文件名实现,例如通常会在JavaScript后面加上一个版本号,使浏览器刷新修改的文件。

(3)启用压缩

在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效较少通信传输的数据量。文本文件的压缩效率科大80%以上。

(4)CSS放在页面最上面,JavaScript放在页面最下面

浏览器会在下载完所有CSS之后对全部页面进行渲染,因此呢最好的做法是将CSS放在页面最上面,让浏览器尽快下载CSS。JS则想法,浏览器在加载JS后立即执行,有可能会阻塞全部页面,导致页面表示缓慢,因此呢JS最好放在页面最下面。

(5)减少Cookie传输

一方面,Cookie包括在每次请求和响应中,太大的Cookie会严重影响数据传输,因此呢那些数据需要写入Cookie需要谨慎思虑尽可能减少Cookie中传输的数据量。另一方面,针对某些静态资源的拜访,如CSS,JS等,发送Cookie道理能够思虑静态资源运用独立域名拜访,避免请求静态资源时发送Cookie,减少Cookie传输的次数。

2.CDN加速

CDN(Content Distribute Network,内存分发网络)的本质上仍然是一个缓存,况且将数据缓存在离用户近期地区,是用户以最快速度获取数据,即所说网络拜访第1跳。

CDN通常缓存的是静态资源,如照片,文件,CSS,Script脚本,静态网页等,然则这些文件拜访频率很高,将其缓存在CDN可极重改善网页的打开速度。

3.反向代理

传统代理服务器位置于浏览器一边,代理浏览器将HTTP请求发送到互联网上,而反向代理服务器位置于网站机房一边,代理网站Web服务器接收HTTP请求。和传统代理服务器能够守护浏览器安全同样,反向代理服务器拥有守护网站安全的功效,来自互联网的拜访请求必须经过代理服务器,相当于在Web服务器和可能的网络攻击之间创立了一个屏障。

除了安全功能,代理服务器能够经过配置缓存功能加速Web请求,当用户第1拜访静态内容的时候,静态内容就被缓存在反向代理服务器上,这般当其他用户拜访该静态内容的时候,就能够直接从反向代理服务器返回,加速Web请求响应速度,减轻服务器负载要。

以上

更加多分布式架构系列、阿里架构师进阶系列,请查看以下文案

阿里架构师进阶从0到1所有合集(意见保藏)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-9-8 10:47 , Processed in 0.072982 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.