大型网站技术架构(二)

性能

性能测试指标

响应时间(Response-Time)
  • 概念: 应用执行一个操作需要的时间,包括从发出请求开始到收到最后响应数据所需时间
  • 常用方法: 重复请求计算平均值,即为平均响应时间
    常用系统操作响应时间表.png
并发数
  • 概念: 系统能够同时处理请求的数目,这个数字也反映了系统的负载
  • 常用方法: 通过多线程模拟并发用户(注:并不是多线程不停请求,而是在两次请求间加入一个随机等待时间,这个时间被称为思考时间)
吞吐量
  • 概念: 单位时间内系统处理的请求数量,体现系统的整体处理能力,常用的有TPS(每秒事务数),HPS(每秒HTTP请求数),QPS(每秒查询数)
  • 吞吐量/并发数/响应时间三者关系: 吞吐量是每天通过收费站的车辆数量,并发数是正在行驶的车辆数目,响应时间是车速.车辆少时,车速快,收费少;车辆稍多,车速略受影响,收费增加;车辆继续增多,高速堵车,车速变慢,收费变少;车辆继续增加超过极限,高速瘫痪,车走不动,高速费也收不着,此刻资源耗尽
  • 网站优化目的: 改善用户体验的响应时间,提高系统吞吐量, 最大限度利用服务器资源
    并发用户访问响应时间曲线.png
性能计数器
  • 概念: 描述服务器或操作系统性能的一些数据指标,包括System Load/对象与线程数/内存使用/CPU使用/磁盘与网络I/O等指标
  • 系统负载: System Load即系统负载,指当前正在被CPU执行和等待被CPU执行的进程数目总和,是反映系统忙闲程度的重要指标.Load理想值是CPU数目;Load值低于CPU数目时,表示CPU有空闲;Load值高于CPU数目时,表示进程在排队等待CPU调度,表示系统资源不足,影响应用程序执行性能;Linux系统中使用top命令查看,该值是三个浮点数,表示最近1分钟,10分钟,15分钟的运行队列平均进程数
    在Linux命令行查看系统负载.jpg

性能测试方法

性能测试
  • 概念: 以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期
  • 测试目标: 评估系统性能是否符合需求及设计目标
负载测试
  • 概念: 对系统不断地增加并发请求以增加系统压力,直到系统的某项或多项性能指标达到安全临界值
  • 测试目标: 评估当系统因为突发事件超出日常访问压力的情况下,保证系统正常运行情况下能够承受的最大访问负载压力
压力测试
  • 概念: 超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力
  • 测试目标: 评估可能导致系统崩溃的最大访问负载压力
稳定性测试
  • 网站的日常运行区间: a-b段
  • 系统的最大负载点: c点
  • 系统的崩溃点: d点
    性能测试曲线.png

性能测试报告

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

性能优化策略

性能分析
  • 排查性能瓶颈方法: 检查请求处理的各个环节的日志,分析哪个环节响应时间不合理;检查监控数据,分析影响性能的主要因素是内存/磁盘/网络/CPU,是代码问题还是架构设计不合理,或者系统资源确实不足
性能优化
  • 分为Web前端性能优化/应用服务器性能优化/存储服务器性能优化
Web前端性能优化
  • 浏览器访问优化
  • 减少HTTP请求
  • 使用浏览器缓存
  • 启用压缩
  • CSS放在页面最上面/JavaScript放在页面最下面(加载JS可能会阻塞整个页面)
  • 减少Cookie传输
  • CDN加速
  • 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
存储服务器性能优化
  • 机械硬盘 VS 固态硬盘
  • 机械硬盘: 快速顺序读写,慢速随机读写特性
  • 机械硬盘: 数据存储在可持久记忆的硅晶体上,可靠性和性价比有待提高
  • B+树 VS LSM树
  • RAID VS HDFS
  • RAID: 廉价磁盘冗余队列, 改善磁盘的访问延迟, 增强磁盘可用性和容错能力, 实现数据在多块磁盘上的并发读写和数据备份
  • HDFS: 以块(Block)为单位管理文件内容,一个文件被分割成若干个Block,每写完一个Block,HDFS将其自动复制到另外两台机器上,保证每个Block有三个副本
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354