#高性能网站架构方案
##WEB前端性能优化
一般来说,WEB前端指网站业务逻辑之前的部分,包括浏览器加载、网站视图、图片服务、CDN服务等,主要优化手段有优化浏览器访问、使用反向代理、CDN等
- 一、浏览器访问优化
- 1.减少HTTP请求
- 2.使用浏览器缓存:更新频率低的静态资源
- 3.在服务器端对文件进行压缩
- 4.CSS放在最前面,JavaScript放在最后面
- 5.减少cookie的传输
- 二、使用CDN加速:将数据缓存在距离用户最近的地方,加快了用户访问速度,减少了数据中心负载压力
- 三、反向代理 当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从发现代理服务器返回,加速响应速度,减轻WEB服务器负载压力。
应用服务器就是处理网站业务逻辑的服务器,网站的业务代码都部署在这里。 优化手段有缓存、集群、异步。
-
一、分布式缓存
-
1.缓存的基本原理 缓存是指将数据存储在访问速度相对较高的存储介质中,以供系统处理。 一方面缓存访问速度快,可以较少数据访问的时间; 另一方面,如果缓存的数据经过计算处理得到的,那么被缓存的数据无需重复计算即可直接使用,因此缓存还起到较少计算时间的作用。 缓存的本质是一个内存Hash表,网站应用中,数据缓存以Key、value的形式存储。Hash表数据读写的时间复杂度为O(1)
-
2.合理使用缓存
- ① 频繁修改的数据
- ② 没有热点的数据
- ③ 数据不一致与脏读
- ④ 缓存可用性
- ⑤ 缓存预热
- ⑥ 缓存穿透
-
3.分布式缓存架构
-
4.Memcache
-
二、异步 任何可以晚点做的事情都应该晚点做 使用消息队列将调用异步化
-
一、SQL优化
-
1.在WHERE 语句中,尽量避免对索引字段进行计算操作;
-
2.LIMIT 基数比较大时,使用between
-
3.不要以字符格式声明数字,要以数字格式声明字符值。(日期同样)否则会使索引无效,产生全表扫描。
-
4.不要 使用 count( id), 而 应该 是 count(*)。
-
5.尽量不要使用NULL
-
6.使用批量插入
-
7.使用JOIN时,应该是小结果集驱动大结果集,即结果集相对小的作为左表,相对大的作为右表
-
8.不要进行不必要的排序操作
-
9.对复杂SQL进行拆分,比如将多个JOIN查询或子查询修改为多次单表查询,既能提升效率,也方便后期维护
-
10.根据集合的相关理论,对SQL的条件表达式进行等价代换,比如AND操作,当前面的表达式为FALSE时,就不会执行后面的表达式,所以要将为FALSE可能性大的条件放在前面。
-
二、索引 不要在建立的索引的数据列上进行下列操作:
-
a.避免对索引字段进行计算操作
-
b.避免在索引字段上使用not,<>,!=
-
c.避免在索引列上使用IS NULL和IS NOT NULL
-
d.避免在索引列上出现数据类型转换
-
e.避免在索引字段上使用函数
-
避免建立索引的列中使用空值。
-
三、数据库设计
- 范式与反范式
-
1.分区、水平分表、垂直分表,以减少单表数据量
-
2.使用联合主键,将关联表的主键直接存储起来,反范式设计
-
3.将非关系型的数据迁移到NOSQL
-
四、数据库配置