【读书笔记】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.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 HTTP重定向
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 Hashtree
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 服务监控
18.5 响应时间监控
参考文献
索引

本书目录

      -- 下载地址

      --【内容简介】:

  《构建高性能Web站点(修订版)》是畅销修订版,围绕如何构建高性能Web站点,从多个方面、多个角度进行了全面的阐述,几乎涵盖了Web站点性能优化的所有内容,包括数据的网络传输、服务器并发处理能力、动态网页缓存、动态网页静态化、应用层数据缓存、分布式缓存、Web服务器缓存、反向代理缓存、脚本解释速度、页面组件分离、浏览器本地缓存、浏览器并发请求、文件的分发、数据库I/O优化、数据库访问、数据库分布式设计、负载均衡、分布式文件系统、性能监控等。在这些内容中充分抓住本质并结合实践,通过通俗易懂的文字和生动有趣的配图,让读者充分并深入理解高性能架构的真相。

      --题外话:

      这本书,我是在 微信读书app上看的,感觉很不错。可以分享想法,有计划还会买纸质的书,好好研读。

2. 知识点



  

1) 【函数追踪】
  Xdebug的另一个重要跟踪功能便是函数跟踪,它可以根据程序在实际运行时的执行顺序,跟踪记录所有函数的执行时间,以及函数调用时的上下文,包括实际参数和返回值。没错,这听起来正是我们迫切需要的。

2) 【联合索引】
  因为一次查询对于一个数据表只能使用一个索引

3) 【最左前缀】
  你一定已经听说过“最左前缀”这个组合索引的基本原则

4)【数据库锁机制】
  机制是影响查询性能的另一个重要因素。当有多个用户并发访问数据库中某一资源的时候,为了保证并发访问的一致性,数据库必须通过锁机制来协调这些访问。

5) 【第三范式】
  第三范式要求在一个数据表中,非主键字段之间不能存在依赖关系

6)【不同层的负载均衡】
  事实上,在数据链路层(第二层)、网络层(第三层)以及传输层(四层)都可以实现不同机制的负载均衡,但有所不同的是,这些负载均衡调度器的工作必须由Linux内核来完成

7) 【独享带宽】

  这才叫独享带宽,它独享的是路由器的一部分出口带宽,而不是交换机的带宽,因为交换机本来就是各个端口独享带宽而互不影响。

8) 【中国互联网】
  中国,由中国电信运营的互联网,也就是我们常说的“中国宽带互联网(CHINANET)”,它的骨干网络核心节点位于北京上地电信数据中心,它通过直接接入包括北京在内的国内8个重要城市节点,进而连接二级网络,然后层层延伸扩展,一直到周边城市、IDC、家庭宽带接入等。

9)【Nmon】

  我们使用Nmon工具监视服务器每秒上下文切换次数。Nmon是一个非常不错的Linux性能监视工具

10) 【Apache多进程模型】
  我们知道Apache这种多进程模型的开销限制了它的并发连接数,但是Apache也有自身的优势,比如从稳定性和兼容性的角度看,多进程模型的优势正体现在它相对安全的独立进程,任何一个子进程的崩溃都不会影响Aapche本身,Apache父进程可以创建新的子进程

11) 【脚本解释器】
  脚本解释器通常运行在Web服务器的进程中(如Apache-prefork模型的子进程),或者以fastcgi进程的形式独立运行。

12)【PHP中引入Java】
  举个例子,对于一些PHP开发者来说,要想直接在Web应用程序中引用Java类库,就得在PHP中加载Java扩展模块,

13) 【ESI】

  ESI是由W3C制定的标准,它的语法非常类似于SSI(Server Side Includes),可以像SSI一样在网页中嵌入子页面,但不同的是,SSI是在Web服务器端组装内容,而ESI则是在HTTP代理服务器上组装内容,包括反向代理。

14) 【wordpress】
  比如用Wordpress搭建的一个blog,动态内容和数据库完全可以通过UNIX Socket来建立更加快速的数据交换。

15)【数据库状态】
  mysql> show status;??
  mysql> show innodb status;
  show processlist命令
  比如我们通过dig命令看到www.sina.com.cn指向了16台服务器

16)【索引的数据结构】
  索引本身的数据结构(MySQL使用BTree、Hash以及RTree)决定了它们拥有非常高效的查找算法,我们基本上不用担心这部分的开销

17) 【创建索引的情况】
  一般来说,如果一个字段出现在查询语句中基于行的选择、过滤或排序条件中,那么为该字段建立索引便是有价值的

18)【最左原则】
  你一定已经听说过“最左前缀”这个组合索引的基本原则

19)【锁定和等待】
  机制是影响查询性能的另一个重要因素。当有多个用户并发访问数据库中某一资源的时候,为了保证并发访问的一致性,数据库必须通过锁机制来协调这些访问

20)【反向代理nginx】

  我们知道反向代理服务器工作在HTTP层面,对于所有HTTP请求都要亲自转

21)【粘滞回话】

  我们需要做的就是调整调度策略,让用户在一次会话周期内的所有请求始终转发到一台特定的后端服务器上,这种机制也称为粘滞会话(Sticky Sessions),要实现它的关键在于如何设计持续性调度算法。

22) 【持久性算法】
  还可以利用Cookies机制来设计持久性算法,比如调度器将某个后端服务器的编号追加到写给用户的Cookies中,这样调度器便可以在该用户随后的请求中知道应该转发给哪台后端服务器。这样做可以更加细粒度地追踪到每一个用户,试想一下,当有很多用户隐藏在一个公开IP地址后面时,利用Cookies的持久性算法将显得更加有效。

23)【最好与本地无关】
  在后端服务器上保存Session数据和本地化缓存,的确是一件不明智的事情,它使得后端服务器显得过于个性化,以至于和整个系统格格不入,如果允许的话,我们应该尽量避免这样的设计,比如采用分布式Session或者分布式缓存等,让后端服务器的应用尽量与本地无关,也可更好地适应环境

24)【IP负载均衡】
  回忆一下网络分层模型,事实上,在数据链路层(第二层)、网络层(第三层)以及传输层(四层)都可以实现不同机制的负载均衡,但有所不同的是,这些负载均衡调度器的工作必须由Linux内核来完成

25) 【Iptables实现负载均衡】
  说到iptables,最多的应用场景就是防火墙了,我几乎为每台Linux服务器都毫不犹豫地进行iptables防火墙配置

26) 【一个网卡多个IP】
  一个网络接口理所当然地拥有一个IP地址,但是除此之外,我们还可以为它配置更多个IP地址,它们称为IP别名。这里的网络接口可以是物理网卡(如eth0、eth1),也可以是虚拟接口(如回环网络接口lo)。根据规定,一个网络接口最多可以设置256个IP别名,没错,你可以把一个C类网段的所有IP地址都设置到一个网卡上,理论上没有任何问题。  
你也许已经张大了嘴巴,一个网卡竟然可以设置多个IP地址,并且拥有同样的MAC地址,没错,它们可以很好地工作。

27) 【LVS-DR.DNS-RR】
  幸运的是,对于LVS-DR,一旦调度器失效,你可以马上将LVS-DR切换到DNS-RR模式,这几乎只需要增加几条DNS记录,将域名解析到多台实际服务器的真实IP地址即可。一旦调度器恢复后,你便可以再次修改DNS记录,将域名仅指向调度器,切换回LVS-DR。

28)【基于IP隧道的请求转发】
  与LVS-DR的原理非常类似,基于IP隧道(IP Tunneling)的负载均衡系统同样可以用LVS来实现,也称为LVS-TUN。

29)【共享文件系统】
  对于共享文件系统的实现,常用的有NFS(Network File System)和Samba

30)【RPC】
  对于传输层,RPC服务默认使用了UDP,

31)【SSH】
  提到SSH(Secure Shell),大家并不陌生,它是建立在应用层和传输层基础上的安全协议,可以用于传输任何数据,我们希望用它来实现文件复制,当然,这属于主动分发的方式。

32)【实现文件分发的http扩展协议 WebDAV】
  WebDAV的设计目的还包括了对于版本控制的支持,还记得Subversion的HTTP工作方式吗?它便是使用WebDAV来实现的。

33)【更新上级目录时间】
  操作系统本身对于文件的修改并不会自动更新上级目录的修改时间,一些特定的应用程序会这样做,比如通过VI编辑某个文件并保存后,你会发现它的所有上级目录都会自动更新修改时间。那么,对于文件同步,我们也必须想办法自己来实现。

34) 【降低开销,提高扩展】
  越是响应数据包远远超过请求数据包的服务(如视频),就越应该降低调度器转移请求的开销,也就越能够提高整体扩展能力,最终也就越依赖于WAN出口带宽

35)【MogileFS】

  MogileFS是一个开源的分布式文件系统,它采用Perl编写,包括追踪器、存储节点,以及一些管理工具,除此之外,追踪器使用MySQL来存储分布式文件系统运行中的所有信息。

36)【MySQL主从复制】

  我们以MySQL为例,它支持主从复制,配置并不复杂,简单地说,你只需要做到以下两点:
  ● 开启主服务器上的二进制日志(log-bin)。
  ● 在主服务器和从服务器上分别进行简单的配置和授权。
  我们知道,MySQL的主从复制是依据主服务器的二进制日志进行的,也就是说主服务器日志中记录的操作会在从服务器上进行重放,从而实现复制,所以主服务器必须开启二进制日志,它会自动记录所有对数据库产生更新的操作,也包括潜在的更新操作,比如没有删除任何实际记录的DELETE操作。
显然,这种复制是异步进行

37)【数据库反向代理】

  使用数据库反向代理
  如果你在使用MySQL,那么可以尝试MySQL Proxy,它工作在应用程序和MySQL服务器之间,负责所有请求和响应数据的转发

38)【站点成长】

  事实上,很多大规模的站点基本上都经历了从简单主从复制到垂直分区,再到水平分区的步骤,这是一个必然的成长过程

39)【分区反向代理】
  分区反向代理
  还记得前面提到的MySQL Proxy吗?它帮助应用程序实现了读写分离,而在这里,另一个开源产品Spock Proxy也起到了类似的作用,它可以帮助应用程序实现水平分区的访问调度,这意味着我们不需要在应用程序中维护那些分区对应关系了。

40) 【Gearman】
  Gearman是一个开源产品,它的初衷是用来实现远程函数调用,这样一来,它便可以将计算转移到其他服务器上,而这一切都巧妙地隐藏在它提供的API中

41)【Map/Reduce】
  但是存在一定的并行计算框架,我们来看随后介绍的Map/Reduce。

42)【Nmon】
  Nmon是一款工作在服务器本地的实时监控软件,它可以提供时间间隔为秒的系统监控

43)【监控中心】
  当然,我们还需要建立监控中心,对这些状态数据进行统计和呈现。幸运的是,有很多开源产品可以帮助我们,这里我们主要以Cacti为例,它完全可以支持刚刚提到的这些系统监控,并且绘制出相应的图表,便于我们浏览。
Cacti采用RRDtool作为监控数据的存储引擎,它是一种专门针对绘制坐标图而设计的存储格式,相对于其他存储结构来说要节省很多存储空间,这为我们长期监控大量服务器提供

3. 待整理点



4. 参考文档



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

时间: 2024-10-16 12:40:16

【读书笔记】2016.12.10 《构建高性能Web站点》的相关文章

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

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

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

构建高性能web站点

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

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

基本概念 带宽:通常说的带宽比如8M带宽,是指主机与互联网运营商的交换机之间的数据传输速度,因为数据链路层的流量是通过控制接收方实现的.而百兆网卡则是指网卡的发送速度为100Mbit/s,则是指网卡发送数据的速度 吞吐率:单位是reqs/s,指服务器的并发能力,就是单位时间内服务器处理的请求数.最大吞吐率是指单位时间内服务器能够处理的最大请求数.通常使用压力测试的方法通过模拟足够数目的并发用户数,分别连续发送一定的Http请求,并统计测试持续的总时间,计算出基于这种压力下的吞吐率,即为一个平均计

CSS3秘笈读书笔记 2015/12/10

第十二章 第十三章 一.网页的布局类型 固定类型.流式(根据浏览器的宽度自动进行调整).响应式web设计(解决不同屏幕尺寸大小问题) 二.浮动 一.浮动产生原因   一般浮动是什么情况呢?一般是一个盒子里使用了CSS float浮动属性,导致父级对象盒子不能被撑开,这样CSS float浮动就产生了. 浮动产生样式效果截图 二.浮动产生负作用 1.背景不能显示由于浮动产生,如果对父级设置了(CSS background背景)CSS背景颜色或CSS背景图片,而父级不能被撑开,所以导致CSS背景不能

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

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

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

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