web网站优化

1.web前端优化

  • 减少http次数,比如合并css javascript文件

  • 使用浏览器缓存,静态文件设置http头Cache-Control和Expires属性。更新静态文件时,避免一次更新多个文件,应该一个文件一个文件间隔更新,避免用户浏览器的缓存大量失效,集中更新静态文件,造成服务器压力陡增

  • 启用压缩,文本压缩率比较高,压缩省带宽耗CPU,选择平衡点

  • css先加载,js垫底。让css文件尽早下载完开始渲染页面,避免js动作阻塞页面。HTTP2可以使用Server Push 特性,尽早推送静态资源

  • 减少cookie传输,比如静态资源使用独立域名,避免获取静态资源传输无用的cookie

  • CDN加速,花点钱,性价比高

  • 反向代理:比如nginx,很多选择

2.应用服务器优化

  • 分布式缓存:

    不可过度依赖缓存,缓存总归是不可靠的。

    读写比小于2:1,缓存无意义。

    上线时注意缓存预热,必要时专门准备预热脚本。

    避免缓存穿透:如果因为不恰当的业务或者恶意攻击,持续高并发访问某个不存在的数据,由于缓存中没有该数据,导致压力落到数据库,简单对策,将不存在的数据也缓存起来,只是value为null

  • 分布式缓存架构简述

    Jboss Cache为代表的需要同步更新的分布式缓存,每台缓存机器数据相同,缺点是缓存的体量小,受限于单机容量。常用于企业系统,大型网站少用。

    Memcached为代表的集中式缓存集群,使用一致性hash存取数据,每台机器存储一部分数据,合起来才是缓存总量

    Memcache采用固定空间分配,将内存分为一组slab,每个slab里又分为一组chunk。不同slab的chunk大小不同,每个slab内不chunk相同,然后根据数据的size大小,选择最小的适合的slab存储,实现按需存储。所以,数据大小应该均匀分布,否则大量数据集中在个别slab,导致其他slab浪费。

3.存储性能优化

  • 传统关系型数据库多使用两级索引的B+树,NoSQL多使用LSM。LSM写数据都会创建一个新记录(修改记录新数据值,删除打上删除标记),这些数据在内存中仍然是一个排序树,当数据量超过预定的阀值,将内存的数据与磁盘数据合并。查找先内存后磁盘。

4. 应用服务器设计要点

  • 服务无状态:应用服务器不保存任何状态,从而每台服务器绝对对等,请求给谁都能得到相同的处理结果,负载均衡器才能故障转移,不影响业务逻辑

  • 集群环境下session管理:

    session绑定。利用负载均衡器的源地址hash算法,总是将同一个IP的请求分发给同一个应用服务器(也可以根据cookie,同一个用户的请求分发给同一个应用服务器,这个时候负载均衡器必须工作在HTTP协议层)。适合小规模,存在单点故障,某台应用服务器故障,它负责的一部分用户无法完成业务。

    利用cookie记录session,每次请求将session信息发送给服务器,服务器修改后返回session信息。缺点是:浪费带宽,有损性能;重度依赖cookie,如果客户端关闭cookie,方案失败

    推荐:独立部署session服务器集群,这种方案本质上是将有状态和无状态的应用服务器分离。session服务器利用分布式缓存等技术包装一下,存储session信息。更高级的,利用session服务器做SSO

  • 异步队列对于削峰效果显著,但是受限于业务逻辑,不是所有业务都适合异步处理

  • 设计降级机制:高峰期,关闭非核心应用或接口带来的访问,确保核心应用或接口可用。比如淘宝双十一期间,关闭“收货”,"评价"等业务,腾出资源做秒杀。

  • 幂等设计:请求某个服务成功,因为网络原因没有收到响应,会重复调用,这种重试不可避免。设计成幂等接口,调用多次无副作用。比如转账接口,必须强校验,避免重试,导致逻辑错误。

5.几种负载均衡介绍

  • HTTP重定向负载均衡:利用HTTP协议,均衡器302返回真实的一组服务器地址,重定向机器成为瓶颈

  • DNS域名解析负载均衡:DNS中配置多个记录,比如 my.com IN A 111.1.1.1 my.com IN A 111.1.1.2等等。每次域名解析请求到来,就会根据负载均衡算法返回其中一个IP地址。缺点是DNS是多级解析,每级都可能有缓存,所以配置有变动时生效时间长;而且DNS控制权在域名服务商手里,可操作的空间有限

  • 反向代理:反向代理收到请求,根据均衡算法,将请求转发至后面真实服务器,然后将响应写回客户端。反向代理可能会成为瓶颈。

  • IP负载均衡:请求到达均衡器,均衡器在系统内核进程获取数据包,根据均衡算法,修改数据包的目的地址,同时将源地址修改为自身。从而真实服务器处理请求后,将响应写给均衡器,均衡器再返回给客户端。如果不修改源地址,则该均衡器充当真实服务器集群的网关服务器,所有的数据自然也能流经均衡器。

  • 数据链路层负载均衡:请求到达均衡器,均衡器修改数据包中的MAC地址,改为真实服务器的地址,请求转发到真实服务器,处理后,直接返回客户端。此方式又称为三角传输,由于不修改IP,需配置真实服务器虚拟IP与均衡器IP一致,请求进来通过MAC地址分发,请求出去,直接写给客户端,均衡器压力小,又称为DR,直接路由。LVS是Linux最好的数据链路层负载均衡器。

扩展性:在对现有系统影响最小的情况下,系统功能可以持续扩展或提升。说的是功能层面的事。

伸缩性:通过增加或减少自身资源规模(比如机器数量)来增强或减少系统的处理事务的能力。说的是系统吞吐能力层面的事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值