大型网站技术架构读书笔记--性能优化

性能测试

性能测试指标: 响应时间,并发数,吞吐量,性能计数器(负载)
性能测试方法: 性能测试(最佳运行点),负载测试(最大负载点),压力测试(崩溃点),稳定性测试

Web前端性能优化

浏览器访问优化

  • 减少http请求: 合并CSS、合并JavaScript,合并图片
  • 使用浏览器缓存: 设置Http头的Cache-Control和Expires属性
  • 启用压缩: 对静态资源如Html、CSS、JavaScript进行压缩
  • 页面CSS尽量靠上、JS靠下
  • 减少Cookie传输

CDN加速

CDN(Content Distribute Network)内容分发网络
CDN本质上也是缓存,即将各种可缓存静态资源缓存在距离用户最近的CDN服务器上,加快反应速度

反向代理

反向代理服务器可以实现网站安全保护、配置缓存加速、实现负载均衡等功能

  • 正向代理: 代理服务器替代用户去访问目标服务器,如翻墙、加速访问、客户端访问授权、隐藏访问者行踪
  • 反向代理: 代理服务器接收用户请求,从原始服务器取数据并返回给用户,但用户认为访问的是原始服务器

可以给原始服务器设置防火墙仅允许反向代理服务器访问来保护原始服务器安全

PS. a,b,c三个人,正向代理是a通过b向C借钱,a知道c的存在 。反向代理是a向b借钱,b又向c借,a不知道c的存在。

应用服务器优化

网站性能优化第一定律:优先考虑使用缓存优化性能

分布式缓存

缓存将数据存储在高速介质中,减少数据访问时间及数据重复计算的时间。
缓存的本质是一张内存Hash表,读写时间复杂度为O(1)。

合理使用缓存

  • 缓存修改次数少的数据
  • 缓存热点数据,及长访问的数据
  • 缓存不一致及脏读,合理规划缓存失效或者修改逻辑
  • 缓存可用性,防止缓存服务器挂掉
  • 缓存预热,加载应用或数据库时提前缓存热点数据
  • 缓存穿透

异步操作

使用MQ服务器调用异步化提升网站性能。

用户请求发送到消息队列立即返回,然后由消息队列的消费者进程处理获取并处理数据,然后返回最终结果。

消息队列通过异步处理实现了良好的削峰作用

使用集群

使用负载均衡构建多台服务器组成的服务器集群,将并发访问通过负载均衡服务器分发到多台服务器处理

代码优化

  • 多线程: 注意线程安全
  • 资源复用: 单例(Singleton)、对象池(Object Pool),如线程池,数据库连接池
  • 数据结构与算法
  • 垃圾回收

存储性能优化

  • 机械硬盘or固态硬盘
  • 关系型数据库 or NoSQL
  • RAID or HDFS