您的位置:首页 > 运维架构 > 网站架构

大型Web网站优化总结<一>

2018-01-16 13:14 148 查看

大型的网络网站优化总结<一>


我们先说大型网站都具备哪些特点:


高并发,大流量
高可用
海量数据
用户分布广泛,网络情况复杂
安全环境恶劣
需求快速变更,发布频繁
渐进式发展

网站性能是决定我们如何去做优化,优化哪些方面

1.用户:网站浏览速度的快慢(用户体验)通信(网速)时间,查找(数据库)时间,解析(语言
- >浏览器)时间指的就是网站打开的快慢
2.开发人员:系统的性能(响应延迟,并发数,吞吐量(I
/ O读写量),系统稳定性,高可用性);
3.运维人员:资源的利用率

优化一之浏览器优化

浏览器

1.减少HTTP请求(铬谷歌代理店,火狐的火狐请求)

 
  js,css:每个js或css都不能让其单独算一个请求
 
  像js合并成一个或几个文件<link>引入common,body【方法:合并文件】
 
  img小图片(像li标签的点,这写点也是一个图片,也是链接)引入雪碧图的概念:即把每个小图标定位到指定的位置,背景看成大图
2.浏览使用器缓存
 
  即一次性把所需的数据加入缓存中
3.减少cookie的传输  

    name、value、expire、path、domain、secure

    name    必需。规定 cookie 的名称。

    value    必需。规定 cookie 的值。 单个value值最大4KB

    expire    可选。规定 cookie 的过期时间。

    path    可选。规定 cookie 的服务器路径(作用率)。

    domain    可选。规定 cookie 的域名(有效期)。

    secure    可选。规定是否通过安全的 HTTPS 连接来传输 cookie。

    

    Safari(苹果)不支持flash  但h5可以

    Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。

 Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。

 Internet Explorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。

      注:多字节字符计算为两个字节。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。
      注:  浏览器一般只允许存放300个Cookie,每个站点最多存放50个Cookie,每个Cookie的大小限制为4KB。

4.启用压缩

   
JS和CSS如:铬和百度样式的源代码只有一行(减少解析空格和换行的时间)
 
  把空格和换行都去除(在线CSS格式化工具即可)

5.js放最下面,CSS放最上面,加载错误只会少了一块空白, 加载报错会加载不出来 

6.
CSS雪碧的基本原理是把你的网站上用到的一些图片整合到一张单独的图片中,从而减少你的网站的HTTP请求数量。

优化二之网络运营商优化

网络运营商
CDN原理:
 
  .CDN是一个经济的策略性部署的整体系统,从技术上全面解决由于网络带宽小,用户访问量大,网点分布不均而产生的用户访问网站响应速度慢的根本原因
 
  CDN目的是通过在现有的互联网中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,解决互联网网络拥塞状况,提高用户访问网站的响应速度
.CDN内容分发网络,本质是一个缓存,得花钱买部署在网络运营商(网通和电信,双网通)的机房那里该节点部署区域和数量加快站点是密切相关的重要加快或域名部分缓存:是指数据存储在相对的I
/ O操作较快的介质中。    

好处:
节约时间:
 
  1.计算时间
 
  2.读取时间
 
  3.传输时间
IP:我们访问网站时,IP记录的次数
PV:指页面访问的次数

坏处:
 
  1.花钱
 
  2.数据不一致,容易引起脏读。

   
脏读:事务1更新了记录,但没有提交,事务2读取了更新后的行,然后事务T1回滚,现在T2读取无效。

优化三之缓存(合理使用缓存)

1.缓存热点:大量的人看

2.高读写比(至少是2:1缓存才有意义),不经常改变高读写比(2/1)的热点
3.缓存内容原则:八二原则(80%的访问量落在20
%的页面上)
需要注意的事项: 
缓存穿透,缓存预热,缓存雪崩等问题。  


缓存雪崩

缓存雪崩可能是因为数据未加载到缓存中,或者缓存同时时大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。
解决思路:
1,采用加锁计数,或者使用合理的队列数量来避免缓存失效时对数据库造成太大的压力。这种办法虽然能缓解数据库的压力,但是同时又降低了系统的吞吐量
0.2,分析用户行为,尽量让失效时间点均匀分布避免缓存雪崩的出现。
3,如果是因为某台缓存服务器宕机,可以考虑做主备,比如:Redis的主备,但是双缓存涉及到更新事务的问题,更新可能读到脏数据,需要好好解决。


缓存穿透

缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库中查询。
解决思路:
1 ,如果查询数据库也为空,则直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库,这种办法最简单粗暴
2,根据缓存数据的关键的规则。例如我们公司是做机顶盒的,缓存数据以苹果为重点,苹果是有规则,如果不符合规则就过滤掉,这样可以过滤一部分查询。在做缓存规划的时候,关键有一定规则的话,可以采取这种办法。这种办法只能缓解一部分的压力,过滤和系统无关的查询,但是无法根治
3,采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的BitSet中,不存在的数据将会被拦截掉,从而避免了对底层存储系统的查询压力。关于布隆过滤器,详情查看:基于BitSet的布隆过滤器(Bloom
Filter)


缓存预热(洗澡先烧热水)

单机网络系统情况下比较简单。
解决思路:
1,直接写个缓存刷新页面,上线时手工操作下
2,数据量不大,可以在WEB系统启动的时候加载

3,搞个定时器定时刷新缓存,或者由用户触发都行。

分布式缓存系统,如Memcached,Redis,比如缓存系统比较大,由十几台甚至几十台机器组成,这样预热会复杂一些。

memcache优点:简单的通信协议;丰富的客户端程序;高性能的优化协议(libevent支持事件触发的网络通信程序库)

解决思路:
1,写个程序去跑
2,单个缓存预热框架。
注:缓存预热的目标就是在系统上线前,将数据加载到缓存中。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐