阅读:大型网站技术架构.技术原理与案例分析(二)

Posted by 启示录 Blog on May 31, 2016

logo

不同视角下的网站性能 1、用户关注的角度是如何能快速使用到对应的服务或功能。 2、开发人员关注的是TPS(每秒事务处理能力)、QPS(每秒查询数)、并发能力、响应延迟、吞吐量(throughput)、稳定性、HPS(每秒HTTP请求数) 3、运维人员关注的是基础设施性能、资源利用率、带宽、服务器硬件等

网站前端性能优化: 1、浏览器访问优化:减少HTTP(无状态)请求,每次请求需要重新建立连接。合并css、JS。Google的pagespeed可以提供这样的优化。 2、使用浏览器缓存,使用expires和cache-control控制,但是如果要更新多个缓存文件时一定要分时间间隔更新,否则同时更新多个文件会造成用户浏览器大量缓存失效,这会照成服务器压力陡然增加,网络堵塞等 3、启用GZIP压缩html,css、js等文件,但是要记住GZIP压缩是需要耗费服务器计算资源的、在HTML中,CSS在head部分,js在尾部、减少cookie传输(css,js等就没有必要发送cookie了) 4、CDN加速(资源缓存到用户就近的服务器上) 5、反向代理(所谓的反向代理指服务器端代理Web服务器接受用户请求,然后根据规则将请求转发到对应的服务器处理)实现负载均衡。

网站应用服务器性能优化:

1、分布式缓存: (1)、网站优化第一准则就是优先考虑缓存,对使用频繁、计算过程复杂得到的数据、读多于写的数据使用缓存。缓存的本质就是内存hash表,KV的形式。计算K对应的hashcode然后通过hash索引找到对应的数据。很多网站的数据访问都符合二八原则,80%的访问落在20%的数据上。 (2)、合理使用缓存:修改频繁的不使用、没有热点访问的不使用(有些热点数据可以使用LRU原则清除)、注意数据的不一致性(db与缓存数据不一致)、缓存可用性,即时缓存服务器宕机也能维持业务的正常运行,缓存服务不可用时要小心缓存雪崩、对于初始化系统可以尝试使用缓存预热(warm up)、小心缓存穿透(访问缓存中不存在的数据时,访问落到db上会造成数据库压力,这里尤其是要小心此类情况被恶意利用)

memcached的内存分配采用固定大小形式,把内存空间分为多组slab,一组slab有分多个chunk,数据存放会选择一个比它本身大的chunk存入。一个chunk只能存储一个数据。

2、使用消息队列对将数据处理与调用异步化。消息队列就是把用户请求送达消息队列之后返回结果。然后由消息队列完成后面的数据持久化存储(写数据可能失败),对于敏感的交易处理建议经过消息队列存储数据成功后返回结果。以免出错(消息队列比喻成灌油到瓶子中的漏斗)”任何可以晚点做的事情都应该晚点再做”

3、使用负载均衡处理高频处理