构建高性能Web站点 pdf

构建高性能Web站点

内容简介

本书是修订版,围绕如何构建高性能Web站点,从多个方面、多个角度进行了全面的阐述,几乎涵盖了Web站点性能优化的所有内容,包括数据的网络传输、服务器并发处理能力、动态网页缓存、动态网页静态化、应用层数据缓存、分布式缓存、Web服务器缓存、反向代理缓存、脚本解释速度、页面组件分离、浏览器本地缓存、浏览器并发请求、文件的分发、数据库I/O优化、数据库访问、数据库分布式设计、负载均衡、分布式文件系统、性能监控等。在这些内容中充分抓住本质并结合实践,通过通俗易懂的文字和生动有趣的配图,让读者充分并深入理解高性能架构的。同时,本书充分应用跨学科知识和科学分析方法,通过宽泛的视野和独特的角度,将本书的内容展现得更加透彻和富有趣味。

作者简介

郭欣,拥有10年以上的Web开发和架构经验,以及多年的创业经历。曾就职于腾讯公司,先后负责诸多Web产品的开发、架构和技术管理,并致力于性能研究和实践推广。在加入腾讯之前,获得国家系统分析师职称。热衷于创造简单易用的互联网产品,曾创建知名性能监控云服务“监控宝”,并入选年度中国关注初创公司。爱好广泛,喜欢摇滚音乐、赛车、旅游、电影,也曾是一名业余吉他手。

目录

第1章 绪论
1.1 等待的
1.2 瓶颈在哪里
1.3 增加带宽
1.4 减少网页中的请求
1.5 加快服务器脚本计算速度
1.6 使用动态内容缓存
1.7 使用数据缓存
1.8 将动态内容静态化
1.9 更换Web服务器软件
1.1 页面组件分离
1.11 合理部署服务器
1.12 使用负载均衡
1.13 优化数据库
1.14 考虑可扩展性
1.15 减少视觉等待

第2章 数据的网络传输
2.1 分层网络模型
2.2 带宽
2.3 响应时间
2.4 互联互通

第3章 服务器并发处理能力
3.1 吞吐率
3.2 CPU并发计算
3.3 系统调用
3.4 内存分配
3.5 持久连接
3.6 I/O模型
3.7 服务器并发策略

第4章 动态内容缓存
4.1 重复的开销
4.2 缓存与速度
4.3 页面缓存
4.4 局部无缓存
4.5 静态化内容

第5章 动态脚本加速
5.1 opcode缓存
5.2 解释器扩展模块
5.3 脚本跟踪与分析

第6章 浏览器缓存
6.1 别忘了浏览器
6.2 缓存协商
6.3 消灭请求

第7章 Web服务器缓存
7.1 URL映射
7.2 缓存响应内容
7.3 缓存文件描述符

第8章 反向代理缓存
8.1 传统代理
8.2 何为反向
8.3 在反向代理上创建缓存
8.4 小心穿过代理
8.5 流量分配

第9章 Web组件分离
9.1 备受争议的分离
9.2 因材施教
9.3 拥有不同的域名
9.4 浏览器并发数
9.5 发挥各自的潜力

第10章 分布式缓存
10.1 数据库的前端缓存区
10.2 使用memcached
10.3 读操作缓存
10.4 写操作缓存
10.5 监控状态
10.6 缓存扩展

第11章 数据库性能优化
11.1 友好的状态报告
11.2 正确使用索引
11.3 锁定与等待
11.4 事务性表的性能
11.5 使用查询缓存
11.6 临时表
11.7 线程池
11.8 反范式化设计
11.9 放弃关系型数据库

第12章 Web负载均衡
12.1 一些思考
12.2 重定向
12.3 DNS负载均衡
12.4 反向代理负载均衡
12.5 IP负载均衡
12.6 直接路由
12.7 IP隧道
12.8 考虑可用性

第13章 共享文件系统
13.1 网络共享
13.2 NFS
13.3 局限性

第14章 内容分发和同步
14.1 复制
14.2 SSH
14.3 WebDAV
14.4 rsync
14.5 Hash
14.6 分发还是同步
14.7 反向代理

第15章 分布式文件系统
15.1 文件系统
15.2 存储节点和追踪器
15.3 MogileFS

第16章 数据库扩展
16.1 复制和分离
16.2 垂直分区
16.3 水平分区

第17章 分布式计算
17.1 异步计算
17.2 并行计算

第18章 性能监控
18.1 实时监控
18.2 监控代理
18.3 系统监控
18.4 服务监控
参考文献
索引

感悟与笔记

基本概念

  • 带宽:通常说的带宽比如8M带宽,是指主机与互联网运营商的交换机之间的数据传输速度,因为数据链路层的流量是通过控制接收方实现的。而百兆网卡则是指网卡的发送速度为100Mbit/s,则是指网卡发送数据的速度
  • 吞吐率:单位是reqs/s,指服务器的并发能力,就是单位时间内服务器处理的请求数.最大吞吐率是指单位时间内服务器能够处理的最大请求数.通常使用压力测试的方法通过模拟足够数目的并发用户数,分别连续发送一定的Http请求,并统计测试持续的总时间,计算出基于这种压力下的吞吐率,即为一个平均计算值.注意在压力测试中提到的每个用户连续发送请求是指在发送一个请求并接收到相应数据后再发送下一个请求.所以1个用户连续向服务器发送1000个请求与100个用户连续向服务器发送10个请求给服务器造成的压力是不一样的,后者造成的压力更大,因为同一时刻网卡接收缓存区排队的请求更多. 吞吐率要在一个前提下得出,那就是压力和请求资源的性质,压力一般包含两部分,即并发用户数和总请求数,也就是模拟多个用户同时向服务器发送多少个请求.请求资源性质则是请求的Url所代表的资源的描述,比如1kb的静态文件或者包含19次数据库查询的动态内容.所以吞吐率的前提包括:
    • 并发用户数:某一时刻同时向服务器发送请求的用户数目
      • 服务器最多支持多少并发用户数,即最大并发用户数也是有一定前提的,即满足服务器和和用户所期待的最大收益,失去前提那么最大并发数会更大,但用户体验会很糟,比如等待时间过长,服务器吞吐率会变的很低
      • 一个用户可能会给服务器带来两个或者更多的并发用户数压力
    • 总请求数
    • 请求资源描述
  • 长连接:本身是Tcp通信的一种普通方式,即在一次Tcp连接中持续发送多分数据而不断开连接.与之对应的是短连接,也就是建立连接后发送一份数据便断开,然后再次建立连接发送下一份数据,周而复始.Http长连接需要浏览器和服务器共同协作,一方面浏览器需要保持一个Tcp连接并重复利用,另一方面服务器不能过早的主动关闭连接.目前浏览器都支持长连接,表现在发出的Http请求数据头中包含长连接的声明:Connection:Keep-Alive.对于长连接的有效使用,关键的一点在于长连接超时设置,即什么时候关闭长连接,这个设置同时出现在浏览器和web服务器上,因为双方都可以主动关闭连接.如IE7 默认的超时时间是1分钟,Web服务器则会在配置文件中提供超时设置。浏览器与服务器超时设置不一致时以最短的超时时间为准

缓存

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

浏览器缓存

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

会员免费下载

链接:https://pan.baidu.com/s/1c3yRVAsscuA-SGP-i8uy_g

提取码: ****** 查看

¥69/年 开通VIP会员

成为本站VIP会员即可无限下载。 请先点击百度网盘,看资源是否还在,不在请点击链接通知站长补资源。

资源标签点击标签可查看对应分类的资源

其他

资源推荐

免费 图解数据结构:使用Java

C++ 程序设计语言:第4部分 标准库(原书第4版)

C++编程思想(两卷合订本)

CSS世界

JavaScript DOM编程艺术(第2版)

C++ Primer Plus(第6版) 中文版

Vue.js快速入门

Java编程思想(第4版) [thinking in java]

Copyright © 2021-2022 知识猫. All Rights Reserved.