大型网站技术架构(二)

2020-07-05  本文已影响0人  Aplha

性能

性能测试指标

响应时间(Response-Time)
并发数
吞吐量
性能计数器

性能测试方法

性能测试
负载测试
压力测试
稳定性测试

性能测试报告

反映上述性能测试曲线的规律

性能优化策略

性能分析
性能优化
Web前端性能优化
  • 减少HTTP请求
  • 使用浏览器缓存
  • 启用压缩
  • CSS放在页面最上面/JavaScript放在页面最下面(加载JS可能会阻塞整个页面)
  • 减少Cookie传输
  • CDN一般缓存静态资源,如图片/文件/CSS/Script脚本/静态网页


    利用CDN的网站架构.png
  • 安全功能
  • 缓存功能: 内部通知反向代理服务器缓存失效,反向代理重新加载缓存


    利用反向代理的网站架构.png
应用服务器性能优化
  • 网站性能优化第一定律: 优先考虑使用缓存优化功能
  • 缓存的基本原理: 将数据存储在相对较高访问速度的存储介质中;本质是一个内存Hash表,数据读写复杂度O(1);存放读写比很高/很少变化的数据


    Hash表存储例子.png
  • 合理使用缓存


    使用缓存存取数据.png
  1. 频繁修改的数据: 一般来说,数据读写比在2:1以上,缓存才有意义
  2. 没有热点的访问: 大部分数据还没有被再次访问就被挤出缓存
  3. 数据不一致与脏读: 数据更新时更新缓存会带来数据不一致问题
  4. 缓存可用性: 缓存雪崩(缓存服务崩溃,数据库无法承受压力而宕机,导致网站不可用)
  5. 缓存预热(warm up): 启动时加载数据库到缓存预热;利用LRU(最近最久未用算法)淘汰缓存数据
  6. 缓存穿透: 恶意攻击持续高并发请求不存在的数据,由于缓存未保存,给数据库带来很大压力,甚至崩溃.简单对策是将不存在的数据也缓存起来
  7. 分布式缓存架构:一种以JBoss Cache为代表的需要更新同步的分布式缓存(所有服务器保存相同的缓存数据,受限于单一服务器内存空间),一种以Memcached为代表的互不通信的分布式缓存(应用程序通过一致性Hash等路由算法选择缓存服务器访问缓存数据,具备良好的可伸缩性)


    需要更新同步的JBoss Cache.png
    不互相通信的Memcached.jpg
  • 消息队列: 任何可以晚点做的事情都应该晚点再做


    不使用消息队列服务器.jpg
    使用消息队列服务器.jpg
    使用消息队列消除并发访问高峰.jpg
  • 负载均衡


    利用负载均衡技术改善性能.jpg
  • 多线程: 使用多线程原因为IO阻塞和多CPU,最大限度使用CPU.启动线程数 = [任务执行时间 / (任务执行时间-IO等待时间)] * CPU内核数
  • 资源复用: 系统运行时,尽量减少开销很大的系统资源的创建和销毁,如数据库连接/网络通信连接/线程/复杂对象等.主要有两种模式单例(Singleton)和对象池(Object Pool)
  • 数据结构: 程序 = 数据结构 + 算法
  • 垃圾回收: JVM分代垃圾回收机制


    JVM分代垃圾回收机制.jpg
存储服务器性能优化
  • 机械硬盘: 快速顺序读写,慢速随机读写特性
  • 机械硬盘: 数据存储在可持久记忆的硅晶体上,可靠性和性价比有待提高
  • RAID: 廉价磁盘冗余队列, 改善磁盘的访问延迟, 增强磁盘可用性和容错能力, 实现数据在多块磁盘上的并发读写和数据备份
  • HDFS: 以块(Block)为单位管理文件内容,一个文件被分割成若干个Block,每写完一个Block,HDFS将其自动复制到另外两台机器上,保证每个Block有三个副本
上一篇 下一篇

猜你喜欢

热点阅读