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

书名:构建高性能Web站点

出版社: 电子工业出版社

ISBN:9787121170935

一  绪论

等待的时间:

(1) 数据在网络上的传输时间

(2) 站点服务器处理请求并生成回应数据的时间

(3) 浏览器本地计算和渲染的时间

二  数据的网络传输

数据如何发送

(1) 应用程序通过系统函数库接口(如send)向内核发出系统调用

(2) 系统内核将数据从用户态内存区复制到由内核维护的内核缓冲区(这块地址空间的大小有限,需要发送的数据以队列的形式进入)

(3) 内核通知网卡来取数据,网卡将数据复制到网卡缓冲区

(4) 网卡缓冲区的数据完成从字节到位的转换,网卡通过特定的物理装置产生不同的电信号(铜线)或是光信号(光纤)

三  服务器并发处理能力

1  吞吐率

单位时间内服务器处理请求数 单位:reqs/s

2  apache ab 压力测试

3  系统调用的减少对于降低请求处理时间有着不可忽视的作用

4  内存分配

Apache使用了基于内存池策略的内存管理方案,在运行开始便一次性申请大片内存作为内存池,随后需要的时候在内存池中直接获取,不需要再次分配

Nginx使用多线程来处理请求,这使得多个线程之间可以共享内存资源,从而是内存总体使用量大大减少

5  持久连接

在一次TCP连接中持续发送多份数据而不断开连接,与其相反的是短连接,也就是建立连接后发送一份数据便断开,然后再次建立连接发送下一份数据。建立TCP连接的操作开销较大,所以连接次数越少,越有利于性能的提升。主流Web服务器都支持长连接,Apache中默认长连接是打开的,配置文件httpd.conf中 KeepAliveTimeout 5。浏览器和服务器各自超时时间不同,以最短时间为准。

6  I/O模型

I/O模型分为很多种类型,比如内存I/O,网络I/O,磁盘I/O,这里讲的是网络I/O。

同步阻塞I/O:默认情况下socket都是阻塞的,进程调用某些涉及I/O操作的函数时,如:connect、accept、recv/recvfrom、send/sendto、closesocket,I/O操作完成后再继续运行

同步非阻塞I/O:在socket选项中设置O_NONBLOCK可以实现非阻塞I/O,非阻塞I/O通过反复轮询来尝试数据是否就绪,防止进程被阻塞,最大的好处是可以在一个进程中同时处理多个I/O事件

多路I/O就绪通知:可以同时处理多个connection,允许进程通过同一种方法同时监视所有文件描述符,并可以快速获得所有就绪的文件描述符。当数据就绪后,一般选择非阻塞方式。比如select和linux下的epoll

异步I/O:主动请求数据后便可以继续处理其他任务,随后等待I/O操作完毕的通知

四  动态内容缓存

缓存的目的就是把需要话费昂贵开销的计算结果保存起来,这里指动态内容自行实现缓存机制。

缓存和缓冲相似之处是都需要一块存储区,他们本质都于速度不一致有关,但缓存更加注重策略,也就是说缓存命中率。

分析研究Smarty缓存。

过期检查

局部无缓存

六  浏览器缓存

Firefox 地址栏输入about:cache查看缓存,采用二进制文件的方式来存储和管理缓存文件

缓存协商:浏览器向Web服务器请求内容,服务器告诉浏览器哪些可以缓存。下次请求这个内容时,询问服务器是否可以使用本地的缓存,服务器收到浏览器询问后需要做出果断回应,到底是允许浏览器使用本地缓存还是将最新内容传回浏览器

七  Web服务器缓存

涉及Apache的缓存技术,Apache提供两个扩展,分别是mod_disk_cache和mod_mem_cache,推荐用前者。

八  反向代理缓存

正向代理:客户端隐藏在代理服务器之后,代理端代理的是客户端。
反向代理:Web服务器隐藏在代理服务器之后,客户端通过反向代理服务器来间接访问Web服务器。服务端知道客户端,客户端不知道服务端,通过代理端连接服务端。代理端代理的是服务端。向代理的一个目的是基于缓存的加速。

用Nginx作为反向代理服务器,只需要设置proxy_pass指令即可,同时别忘打开mod_proxy模块

十二  Web负载均衡

HTTP重定向:当HTTP代理向Web服务器请求某个URL后,Web服务器可以通过HTTP响应头信息中的Location标记来饭后一个新的URL,这意味着HTTP大力需要继续请求这个新的URL,这便完成了自动跳转。HTTP重定向具备了请求转移和自动跳转的本领,所以可以用来实现负载均衡。

DNS负载均衡:DNS服务器可以完成域名到IP地址的一对多的映射,通过这点来实现负载均衡

反向代理负载均衡:核心是转发HTTP请求

IP负载均衡:在HTTP层面一下实现负载均衡,这些负载均衡调度器的工作必须由Linux内核来完成,比如位于内核的Netfilter和IPVS调度器

直接路由:在链路层工作,通过修改数据包的目的MAC地址,将数据包发到实际服务器上,实际服务器的响应数据包井直接发送给用户端,而不经过调度器

IP隧道

十八  性能监控

实时监控:Nmon+Nmon Analser

监控代理:SNMP

系统监控:Cacti

本书完整版点击下载

时间: 2024-10-17 12:25:06

《构建高性能 Web站点》笔记的相关文章

SQL 笔记 By 华仔

-------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据库的大小的方法 笔记3-徐 设置数据库自动增长注意要点 笔记4-徐 模仿灾难发生时还原adventurework数据库 示例 stopat 笔记5-徐 检查日志文件不能被截断的原因 笔记6-徐 检测孤立用户并恢复孤立用户到新的服务器 解决数据库镜像孤立用户问题 笔记7-徐 SQLSERVER日志记录

SQL笔记---多表左联

这是实际场景当中的一个例子,拿出来分析总结思路. -- SQL 查询 --SELECT  orderQuery.Rk_SkuCode ,        orderQuery.SkuName,        SUM(ISNULL(orderQuery.OrderTotal, 0))        - SUM(ISNULL(removeQuery.RemoveTotal, 0))        - SUM(ISNULL(pickQuery.PickTotal, 0))        - SUM(IS

SQL笔记---分页

随用随想,随用随记. 通过实际应用掌握SQL语句. 一. SQL分页 1. 第一种方法:利用ID大于多少进行筛选 SELECT TOP 20        *FROM    dbo.WMS_StockWHERE   ( Rk_SkuCode > ( SELECT MAX(Rk_SkuCode)                         FROM   ( SELECT TOP 40                                            *           

《HeadFirst SQL》笔记

规范化 0 约束 1 原子性 2 第一范式 1NF 3 数据模式 4 依赖 5 联接查询 6 交叉联接(AKA 笛卡尔联接,叉积) 7 内联接 8 子查询 9 外联接 10 自联接 11 集合 12 事务 13 ACID 14 管理事务 15 常用语句 16 注意 17 规范化 约束 NOT NULL UNIQUE PRIMARY KEY DEFAULT FOREIGN KEY:引用父表的某个唯一值引用完整性:插入外键列的值必须已经存在于父表的来源列中 --创建外键 create table i

SQL笔记1:SELECT及SELECT高级应用

T-SQL笔记1:SELECT及SELECT高级应用 本章摘要 1:安装AdventureWorks 2:基本运算符和表达式 3:between 4:like 5:escape 6:TOP 7:GROUP BY 7.1:GROUP BY ALL 7.2:HAVING 8:SELECT字句技术 8.1:使用DISTINCT消除重复值 8.2:返回拼接的结果 8.3使用INTO字句 9:子查询 9.1:子查询类型 9.2:代替表达式的查询 9.3:多层嵌套 10:比较使用 EXISTS 和 IN 的

金典 SQL笔记(6)

page223-索引 --利用SQL 语句创建索引 --CREATE INDEX 索引名称on 表名(字段 ,字段, 字段字段n) --索引名称必须为唯一的,字段 ,字段, 同意一个到多个 --范例为T_person 表中给FName创建索引索引名为 idx_person_name CREATE INDEX idx_person_name ON T_Person (FName) --删除索引 --drop index 表名索引名 DROP INDEX T_person.idx_person_na

Mybatis 项目开发实际常用SQL笔记总结

parameterType 和 resultType parameterType:单个参数用String,多个参数用map resultType:   可以是 Integer.String.Object    <select id="countGroupMasterByUid" parameterType="String" resultType="Integer">      SELECT              COUNT(id)

sql笔记/分页存储过程

[email protected]c#中进行++操作可以是整数或小数,sql中只能对整数进行++操作.char类型 适合存储长度波动较小不回收效率高varchar 类型 适合存储长度波动较大可以回收nchar代表unicode 存储内容包括汉字时候考虑加n SQL语句特点1不区分大小写2没有双引号所有字符串都包含在单引号3没有逻辑相等,逻辑相等和赋值一样都是用=4没有bool值得概念,但是在视图中可以输入true/false5也有关系运算符.6也有逻辑运算符 &&-- and || --o

sql笔记

1. 看下面sql,重点有两个,一个是distinct  ,一个是树形结构查询 select DISTINCT t.unit_code from t_unit_relation t where t.corp_tn='jiaozhougongan' start with t.unit_code='0001' connect by prior t.unit_code = t.unit_upcode 分析: ① distinct:去重复值 ② 树形结构查询,这个博客:http://www.cnblog

HeadFirst SQL 读书摘要

数据库都是用 圆柱形表示的. 数据库中包含表 表中包含行和列 行又叫记录record,  列又叫 字段field 创建数据库 create database mypipe_l; 选择数据库 use mypipe_l; 创建表 create table doughnut( name VARCHAR(10), type VARCHAR(6) ); 查看表 desc doughnut; 删除表 drop table doughnut; 插入数据 insert into doughnut (name,