本文地址

分享提纲:

  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站点》的更多相关文章

  1. 构建高性能WEB站点笔记三

    构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...

  2. 构建高性能web站点--读书大纲

    用户输入你的站点网址,等了半天..还没打开,裤衩一下就给关了.好了,流失了一个用户.为什么会有这样的问题呢.怎么解决自己站点“慢”,体验差的问题呢. 在这段等待的时间里,到底发生了什么?事实上这并不简 ...

  3. 构建高性能WEB站点笔记二

    构建高性能WEB站点笔记 因为是跳着看的,后面看到有提到啥epoll模型,那就补充下前面的知识. 第三章 服务器并发处理能力 3.2 CPU并发计算 进程 好处:cpu 时间的轮流使用.对CPU计算和 ...

  4. 构建高性能web站点笔记一

    构建高性能web站点笔记 第三章 服务器并发处理能力 3.1吞吐率 描述服务器在实际运行期间单位时间内处理的请求数.也就是一定并发用户的情况下,服务器处理请求能力的量化体现. 吞吐率的前提包括: 并发 ...

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

    书名:构建高性能Web站点 出版社: 电子工业出版社 ISBN:9787121170935 一  绪论 等待的时间: (1) 数据在网络上的传输时间 (2) 站点服务器处理请求并生成回应数据的时间 ( ...

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

    前言– 追寻大牛的足迹,无处不在的“性能”问题. 最近在读郭欣大牛的<构建高性能Web站点>,读完收益颇多.作者从HTTP.多级缓存.服务器并发策略.数据库.负载均衡.分布式文件系统多个方 ...

  7. 构建高性能web站点-1

    以下为阅读<构建高性能web站点>郭欣 著 这本书的适合读者: 1.编写web程序.关心站点性能,并且希望自己做的更加出色的开发人员 2.关心性能和可用性的web架构师 3.希望构建高性能 ...

  8. [拇指飞动]构建高性能Web站点(1)

    <构建高性能Web站点>中提到了Aphache, Nginx和lighthttpd. 把我的笔记share一下. 一般来讲Apache主要是基于多进程模型,早期的fork模式会为每一个re ...

  9. 【转】构建高性能WEB站点之 吞吐率、吞吐量、TPS、性能测试

    内容参考:构建高性能WEB站点.pdf 一.吞吐率 我们一般使用单位时间内服务器处理的请求数来描述其并发处理能力.称之为吞吐率(Throughput),单位是"req/s".吞吐率 ...

随机推荐

  1. wireshark 相关提示

    Packet size limited during capture      提示说明标记的包没有抓全,在某些操作系统中,默认只抓96个字节,tcpdump中有"-s"参数可用于 ...

  2. windows 2012 r2 can't find kb2919355

    问题   解决: 1.手动安装了 Windows8.1-KB2919442-x64 2.手动下载 KB2919355 更新成功     Turns out to have been a result ...

  3. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建

    公司在IDC机房有两台很高配置的服务器,计划在上面部署openstack云平台虚拟化环境,用于承载后期开发测试和其他的一些对内业务.以下对openstack的部署过程及其使用做一详细介绍,仅仅依据本人 ...

  4. Jenkins配置MSBuild实现自动部署(MSBuild+SVN/Subversion+FTP+BAT)

    所要用到的主要插件: [MSBuild Plugin] 具体操作: 1.配置MSBuild的版本 [系统管理]->[Global Tool Configuration]->[MSBuild ...

  5. 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...

  6. MVVM大比拼之AngularJS源码精析

    MVVM大比拼之AngularJS源码精析 简介 AngularJS的学习资源已经非常非常多了,AngularJS基础请直接看官网文档.这里推荐几个深度学习的资料: AngularJS学习笔记 作者: ...

  7. TODO:Go语言goroutine和channel使用

    TODO:Go语言goroutine和channel使用 goroutine是Go语言中的轻量级线程实现,由Go语言运行时(runtime)管理.使用的时候在函数前面加"go"这个 ...

  8. iOS 之消息推送(个推)---个人小结

    前言:自从上个星期开始整这个推送,弄了差不多一个星期,今天终于给整好了,因此现在来记录这段"奇妙"的旅程. 我们公司使用的消息推送是用的第三方--个推,这里不得不说一下,个推的技术 ...

  9. VS 2015相当不错的功能:C#交互窗口

    按照惯例,老周是先吹牛后讲正事.今天就给大伙吹吹这个事. 有网友不知道是不是昨晚喝高了,居然研究起老周来了.实话告诉你,老周没什么好研究的,老周又不是编译器,老周只是一个游离于大善大恶之间的平凡人,说 ...

  10. PHP 高级编程(4/5) - SPL异常类之 LogicException 逻辑异常

    SPL 提供了一系列标准异常.日常的使用中我们应该根据需求科学的使用它们,来使我们的程序更加健壮.LogicException 是从 Exception 基类派生的,没有添加任何附加方法.抛出逻辑异常 ...