读书笔记-构建高性能Web站点

基本概念


  1. 带宽:通常说的带宽比如8M带宽,是指主机与互联网运营商的交换机之间的数据传输速度,因为数据链路层的流量是通过控制接收方实现的。而百兆网卡则是指网卡的发送速度为100Mbit/s,则是指网卡发送数据的速度
  2. 吞吐率:单位是reqs/s,指服务器的并发能力,就是单位时间内服务器处理的请求数.最大吞吐率是指单位时间内服务器能够处理的最大请求数.通常使用压力测试的方法通过模拟足够数目的并发用户数,分别连续发送一定的Http请求,并统计测试持续的总时间,计算出基于这种压力下的吞吐率,即为一个平均计算值.注意在压力测试中提到的每个用户连续发送请求是指在发送一个请求并接收到相应数据后再发送下一个请求.所以1个用户连续向服务器发送1000个请求与100个用户连续向服务器发送10个请求给服务器造成的压力是不一样的,后者造成的压力更大,因为同一时刻网卡接收缓存区排队的请求更多.
  3. 吞吐率要在一个前提下得出,那就是压力和请求资源的性质,压力一般包含两部分,即并发用户数和总请求数,也就是模拟多个用户同时向服务器发送多少个请求.请求资源性质则是请求的Url所代表的资源的描述,比如1kb的静态文件或者包含19次数据库查询的动态内容.所以吞吐率的前提包括:
    • 并发用户数:某一时刻同时向服务器发送请求的用户数目

      • 服务器最多支持多少并发用户数,即最大并发用户数也是有一定前提的,即满足服务器和和用户所期待的最大收益,失去前提那么最大并发数会更大,但用户体验会很糟,比如等待时间过长,服务器吞吐率会变的很低
      • 一个用户可能会给服务器带来两个或者更多的并发用户数压力
    • 总请求数
    • 请求资源描述
  4. 长连接:本身是Tcp通信的一种普通方式,即在一次Tcp连接中持续发送多分数据而不断开连接.与之对应的是短连接,也就是建立连接后发送一份数据便断开,然后再次建立连接发送下一份数据,周而复始.Http长连接需要浏览器和服务器共同协作,一方面浏览器需要保持一个Tcp连接并重复利用,另一方面服务器不能过早的主动关闭连接.目前浏览器都支持长连接,表现在发出的Http请求数据头中包含长连接的声明:Connection:Keep-Alive.对于长连接的有效使用,关键的一点在于长连接超时设置,即什么时候关闭长连接,这个设置同时出现在浏览器和web服务器上,因为双方都可以主动关闭连接.如IE7 默认的超时时间是1分钟,Web服务器则会在配置文件中提供超时设置。浏览器与服务器超时设置不一致时以最短的超时时间为准

缓存


  1. 缓存机制包括整页缓存,局部缓存,数据缓存,代码解释器缓存以及web服务器缓存等
  2. 对于动态网页,页面缓存的内容实际上就是动态网页输出的HTML。一个动态网页根据url参数的不同会生成不同结果,对于每种结果都必须生成对应的缓存文件.缓存文件文件必须标记过期时间,动态页面每次都要对缓存进行过期检查.过期检查一般有两种方法:
    • 根据缓存文件的创建时间和缓存的有效期长度,计算当前时间缓存文件是否过期
    • 根据缓存文件的过期时间判断当前时间缓存文件是否过期
  3. 缓存文件除了放在磁盘中,还可以放到内存中(memcached),也可以放在独立的缓存服务器中,利用memcached可以很容易将缓存存到其他服务器
  4. 缓存有效期是一个需要斟酌的值,有效期过大可以提高缓存命中率,但动态网页的内容得不到及时更新,有效期过小则需要频繁创建缓存。除了不断调整缓存有效期之外,缓存机制还提供了一个有效的缓存控制途径,可以在任何时候强制清空所有缓存
  5. 静态化内容的更新策略包含如下两种,它们可以互相弥补,共同应用在站点的静态化方案中
    • 在数据更新时重新生成静态化内容
    • 定时重新生成静态化内容

浏览器缓存


  1. 尽可能让web站点的内容缓存在用户浏览器中,这样可以一定程度减少浏览器的计算开销。浏览器一般会在用户的文件系统中创建一个目录,用于存放缓存文件,并给每个缓存文件打上一些必要的标记,比如过期时间
  2. 缓存协商的过程: 首先浏览器向web服务器请求内容时,web服务器会告诉浏览器哪些内容可以被缓存,浏览器对这些内容进行缓存后,当再次向服务器请求这些内容时,就会询问服务器是否可以使用本地的缓存,服务器收到询问就会做出回应,到底是允许浏览器使用本地缓存还是将最新的内容传回浏览器
  3. 协商方法有两种:
    • Last-Modified:动态程序可以在返回给浏览器的Http响应头添加最后修改时间,这个时间是GMT时间.浏览器再次请求相同内容时会在Http请求头里添加  If-Modified-Since:时间 ,这表示在询问服务器请求的内容在这个时间之后是否有更新.对于静态内容web服务器会自己进行浏览器缓存是否过期的检查,如果是动态内容则需要动态程序自己来检查. 如果内容没有更新,返回给浏览器的http相应头会包含304 Not Modified的信息,表示web服务器告诉浏览器这个内容没有更新,浏览器可以使用本地缓存的内容,同时服务器也没有将内容正文传给浏览器
    • ETag协商,ETag是一串编码,web服务器可以自由定义ETag的格式和实现,如以文件内容的md5值作为ETag。Web服务器返回的相应头里会包含ETag值,web浏览器询问改内容是否发生变化时则会在请求头里添加 If-None-Match:ETag值。
  4. 浏览器缓存截止日期:使用Expires标记可以告诉浏览器缓存过期的时间,暗示浏览器在缓存过期之前可以直接使用缓存,不用询问服务器,这样可以节省宽带和服务器处理等开销。对于静态内容web服务器在默认情况下不会开启Expires标记,对于动态内容Expires标记仍然需要程序自身添加,类似于之前的Last-Modified.要注意的是Expires是服务器的时间,如果用户本地时间与服务器时间不一致,可能影响到本地缓存的有效期检查.Http协议还有一个Cache-Control的标记可以弥补Expires的不足,格式是Cache-Control:max-age=<second>,它表示缓存过期的相对时间,单位是秒,而且是相对于浏览器本地时间而言。Http响应头同时包含Expires和Cache-Control时浏览器会优先考虑Cache-Control的值
  5. 如何请求页面:
    • Ctrl+F5:强制刷新,不适用缓存协商,获取所有内容的最新版本
    • F5:允许浏览器在请求中附加必要的缓存协商,但不允许浏览器直接使用本地缓存,也就是能让Last-Modified发挥作用,但对Expires无效
    • 转到按钮:浏览器会对所有没有过期的内容直接使用本地缓存,Expires标记只对这种方式有效

Web服务器缓存



。。。。。。。。。。

时间: 2024-10-24 14:26:39

读书笔记-构建高性能Web站点的相关文章

【读书笔记】2016.12.10 《构建高性能Web站点》

本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 1.1 等待的真相 1.2 瓶颈在哪里 1.3 增加带宽 1.4 减少网页中的HTTP请求 1.5 加快服务器脚本计算速度 1.6 使用动态内容缓存 1.7 使用数据缓存 1.8 将动态内容静态化 1.9 更换Web服务器软件 1.10 页面组件分离 1.11 合理部署服务器 1.12 使用负载均衡 1.1

学习笔记大型《构建高性能web站点》

吞吐率 ab -n1000 -c 100 http://new.dangdang.com/ 测试结果重点关注:1个Requests per second,2个Time per request 影响吞吐率的因素: 并发策略.I/O模型.I/O性能.CPU核数.程序本身逻辑复杂度 1.CPU并发计算 系统负载: cat proc/loadavg 结果:0.00 0.00 0.00 1/130 12041 左边三个数字代表1.5.15分钟的系统负载,数字越小,系统响应速度越快 学习笔记大型<构建高性能

《构建高性能 Web站点》笔记

书名:构建高性能Web站点 出版社: 电子工业出版社 ISBN:9787121170935 一  绪论 等待的时间: (1) 数据在网络上的传输时间 (2) 站点服务器处理请求并生成回应数据的时间 (3) 浏览器本地计算和渲染的时间 二  数据的网络传输 数据如何发送 (1) 应用程序通过系统函数库接口(如send)向内核发出系统调用 (2) 系统内核将数据从用户态内存区复制到由内核维护的内核缓冲区(这块地址空间的大小有限,需要发送的数据以队列的形式进入) (3) 内核通知网卡来取数据,网卡将数

构建高性能Web站点(修订版)笔记

构建高性能Web站点(修订版)2012.6 p14 '反馈机制':逐包确认 --> 小batch连续发送 一定需要全局编址吗?(可以使用邻居路由+端到端IBE) 电磁波速度:铜线中电信号2.3*10^8,光纤约2*10^8(全反射增加了传输距离) 系统负载:/proc/loadavg 上下文切换:Nmon IOWait(注意一点:磁盘IO是串行的!) 减少系统调用... ZeroCopy?AIO? strace:每次请求都要检测.htaccess?(哦,设置了AllowOverride all)

《构建高性能web站点》随笔 无处不在的性能问题

前言– 追寻大牛的足迹,无处不在的“性能”问题. 最近在读郭欣大牛的<构建高性能Web站点>,读完收益颇多.作者从HTTP.多级缓存.服务器并发策略.数据库.负载均衡.分布式文件系统多个方面娓娓道来,洋洋洒洒,甚是精彩,想来让人心旷神怡.     但“纸上得来终觉浅,绝知此事要躬行”,要消化本书的内容,绝不是一件简单的事情,更重要的还是实践.在实践和学习的过程中,我会把自己的经验和感悟分享出来,一方面权当做笔记,另一方面,对于后来的童鞋,希望能提供一丝一毫的帮助,不胜欣慰.     由于是读书

构建高性能web站点

以下为阅读<构建高性能web站点>郭欣 著 第一章的重点总结 1.等待的真相 a) 在用户等待的时间里,大概发生了以下几部分时间: i. 数据在网络上传输的时间:包括两个部分,浏览器端主机发出请求经过网络到达服务器的时间,服务器回应数据经过网络到达浏览器主机的时间.也称为响应时间,他的决定因素主要包括发送的数据量和网络带宽.站点服务器处理请求并回应数据的时间- ii. 站点服务器处理请求并生成回应数据的时间.主要消耗在服务器端,包括非常多的环节,我们一般用"每秒处理请求数"

构建高性能web站点-阅读笔记(一)

看完前9章,也算是看完一半了吧,总结一下. 郭欣这个名字或许并不响亮,但是这本书写的确实真好!百度一下他的名字也能够看到他是某些公司的创始人和投资者,当然他本人必定是大牛无疑. 从网页的动静分离到网络带宽限制,然后是页面缓存.浏览器缓存,web服务器缓存,再到反向代理,web应用分离,整个流程下来厘清了架构web的所有层面,可以说到目前为止是我读过的最好的一本web架构书.书中都是一些概念和经验之谈,无法具体总结,也就只能写个总结吧,以表示自己在读或者读过.

读《构建高性能Web站点》服务器并发处理能力 - 2

系统调用 进程有两种运行模式:用户态和内核态.进程通常在用户态,这时可以使用CPU和内存,而当进程需要对硬件外设进行操作的时候(如读取磁盘文件.发送网络数据),就必须切换到内核态,当在内核态的任务完成后,进程又切回到用户态. 由于系统调用涉及进程从用户态到内核态的切换,导致一定的内存空间交换,这也是一定程度上的上下文切换,所以系统调用的开销通常是比较昂贵的. 减少不必要的系统调用,也是Web服务器性能优化的一个方面. 内存分配 Apache在运行时的内存使用量是非常惊人的,这主要归咎于它的多进程

读《构建高性能Web站点》服务器并发处理能力 - 1

一台Web服务器在单位时间内能处理的请求越多越好,这也成了Web服务器的能力高低所在,它体现了我们常说的"服务器并发处理能力". 吞吐量 Web服务器的并发处理能力,一般使用单位时间内服务器处理的请求数来描述其并发能力,习惯称其为吞吐率(Throughput),单位是"reqs/s". 并发用户数 人们常常把并发用户数和吞吐率混淆,实际上,它们并不是一回事,吞吐率是指在一定并发用户数的情况下,服务器处理请求能力的量化体现:并发用户数就是指在某一时刻同时向服务器发送请