构建高性能WEB站点笔记三
### 构建高性能WEB站点笔记三
第10章 分布式缓存
10.1数据库的前端缓存区
- 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经过它,所以也可看做是磁盘的前端设备。又称作 页高速缓冲
- 读缓冲区 保存最近系统从磁盘上读取的数据。
- 写缓冲区 主要在于减少磁盘的物理写操作。通过将多次写操作的指令累积起来,使用一次物理磁头的移动来完成。
10.2 使用memcached
分布式缓存系统
- key-value memcached使用物理内存作为缓冲区,启动时候指定分配给缓冲区的内存大小。使用key-value的方式存储数据,单索引的结构化数据组织形式。
- 数据项过期时间 一旦缓冲区没有足够的空间,基于LRU(Least Recently Used)算法。将最近不常访问的数据项淘汰掉。当然也可以设置过期时间。
- 网络并发模型
- 作为分布式缓存系统,memcached可以运行在独立的服务器上,动态内容通过TCP Socket来访问。
- 对象序列化
- 基于序列化的机制,我们可以将更高层的抽象数据类型转化为二进制字符串,以便通过网络进入缓存服务器,同时,读取这些数据的时候,二级制字符串又可以转换回原有的数据类型。
10.3 读操作缓存
都可使用memcached缓存,并且memcacd提供原子递增操作。
第11章 数据库性能优化
11.1 状态报告
show status;
show innodb status;
mysqlreport
11.2 正确使用索引
- 组合索引
- 使用慢查询分析工具
开启慢查询 my.cnf中增加配置,意味着Mysql自动将执行超过1秒的查询记录在文件中。
long_query_time = 1
long-slow-queries = /data/var/mysql_slow.log
还可以将没有使用索引的查询记录下来
log-queries-not-using-indexes
- 索引缓存
11.3 锁定与等待
查询的时间开销包括:查询本身的计算时间和查询开始前的等待时间,索引影响的是前者,锁机制影响的是后者。
- 减少表锁定时间
- MySQL为MyISAM类型提供了表级别的锁定。允许多个线程同时读数据,比如select,它们之间不需要等待,但对于更新操作(update),排斥对当前表的所有其他查询,包括select查询。除此之外,更新操作有着默认的高优先级。
- 适合大部分查询为读取操作,混合一小部分快速的更新操作。
- 行锁定
- MySQL为Innodb提供了行锁的支持。
- 在select和update混合的情况下,行锁定可以很巧妙的解决读和写互斥的问题。
- 行锁定只是一种逻辑层面的约束,即便是同时拥有updating的状态,也不能加速update操作的总时间,因为磁盘的物理写操作最终还是以此进行的。
11.4 事物性表的性能
MySQL的Innodb除了支持行锁定外,还支持事务,这也是使用Innodb的另一个原因。
当然Innodb还有其他特性,比如行锁定、外键以及易于修复。
11.5 使用查询缓存
将select查询的结果缓存在内存中,以供下次直接获取。MySQL采取的机制是,当一个数据表有更新操作,那么涉及这个表的所有查询缓存都会失效。
11.6 临时表
MySQL将临时表创建在磁盘、内存、以及临时文件中。
11.7 线程池
MySQL采用多线程处理并发的连接,通过mysqlreport中的threads部分,可以看到线程创建的统计结果。
11.8 反范式设计
- 数据库范式
第一范式:指数据库表的每一列都是不可分割的基本数据项
第二范式:数据库表中不存在非关键字段对任一候选键的部分函数依赖,也即所有非关键字 段都完全依赖于任意一组候选关键字。
2NF的违例只会出现在候选键由超过一个字段构成的表中,因为对单关键字字段不存在部分依赖问题。
第三范式:在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式
11.9 放弃关系型数据库
第12章 Web负载均衡
12.2 HTTP重定向
转移HTTP请求,在Web开发中经常使用它来完成自动跳转。eg. 用户登录成功后跳转到相应的管理页面。
顺序调度的性能总是比不上随机调度的性能。
12.3 DNS负载均衡
- 多个A记录
- 指定域名对应的IP地址。
- DNS的负载均衡实现依赖于DNS服务器的设置。
- 扩展能力和可管理性
- 智能解析
- 根据用户IP来进行智能解析,DNS服务器在所有可用的A记录中挑选一个离用户最近的服务器。
- 故障转移
- 在检测到某台实际服务器发生故障以后,便可以通过动态DNS协议来迅速修复DNS记录。
- DNS记录的修改需要一定时间才能生效,例如一个DNS记录的TTL为3600秒,那么对它的更新最多要过一个小时才会生效。
- 动态DNS,允许DNS服务器开放特定的服务,为我们自动化修改DNS记录提供了可能。
12.4 反向代理负载均衡
反向代理服务器的核心工作便是转发HTTP请求,在TCP七层协议的第七层。
- 按照权重分配任务——按能力分配请求到不同的服务器
- 调度器的并发处理能力
- 粘滞会话
- 同一用户对同一内容的多次请求,可能被转发到不同的后端服务器。
- 调整策略,让用户在一次会话周期内的所有请求始终转发到一台特定的后端服务器。这种机制也称为粘滞会话。——将用户的IP地址进行Hash计算并散列到不同的后端服务器。
- 利用Cookie机制设计持久化算法。eg. 调度器将某个后端服务器的编号追加到写给用户的Cookies中,这样调度器便在该用户的随后的请求中知道应该转发给哪台后端服务器。
12.5 IP负载均衡
- DNAT 反向NAT,实际服务器部署在内网网络,而作为网关的NAT服务器将来自用户端的数据包转发给内部网络的实际服务器。工作在传输层
- 它需要修改数据包的目的地址和端口。
- Netfilter/iptables
- 当网络数据包到达服务器的网卡并且进入某个进程的地址空间之前,先要通过内核缓冲区,这时候内核中Netfilter便对数据包有着绝对的控制权,可以修改数据包,改变路由规则。
- iptables,是工作在用户空间的一个命令行工具,通过它来对Netfilter的过滤表进行插入、修改或者删除等操作。
12.6 直接路由
工作在数据链路层(第二层)。通过修改数据包的mac地址,将数据包转发到实际服务器上,并且最重要的是,实际服务器的相应数据包将直接发送给用户端,而不经过调度器。
- 实际服务器必须直接接入外部网络。
- IP别名
- 为一个网络接口(物理网卡,虚拟接口)配置多个IP地址。根据规定,一个网络接口最多可以设置256个IP别名。
- 将实际服务器添加和调度器IP地址相同的IP别名。
12.7 IP隧道
第16章 数据库扩展
16.1 复制和分离
- 主从复制
- 开启主服务器上的二进制日志
- 从主服务器和从服务器上分别进行简单的配置和授权。
- 从服务器定时向主服务器请求最新日志,而主服务器通过一个I/O线程来读取本地二进制文件,并输送给从服务器。
- 读写分离
- 对于所有的更新才做,必须作用于主服务器上
- 读操作指向从服务器,写操作指向主服务器。
- 数据库反向代理
- Mysql Proxy 负责所有请求和相应数据的转发。
16.2 垂直分区
对于数据库写操作频繁的站点,将不同的数据库分布到不同的服务器。
16.3 水平分区
将同一数据表中的记录通过特定的算法进行分离,分别保存在不同的数据表中,从而可以部署在不同的数据库服务器上。
- 分区算法
- 哈希算法
- 范围
- 映射关系
构建高性能WEB站点笔记三的更多相关文章
- 构建高性能WEB站点笔记二
构建高性能WEB站点笔记 因为是跳着看的,后面看到有提到啥epoll模型,那就补充下前面的知识. 第三章 服务器并发处理能力 3.2 CPU并发计算 进程 好处:cpu 时间的轮流使用.对CPU计算和 ...
- 构建高性能web站点笔记一
构建高性能web站点笔记 第三章 服务器并发处理能力 3.1吞吐率 描述服务器在实际运行期间单位时间内处理的请求数.也就是一定并发用户的情况下,服务器处理请求能力的量化体现. 吞吐率的前提包括: 并发 ...
- 《构建高性能 Web站点》笔记
书名:构建高性能Web站点 出版社: 电子工业出版社 ISBN:9787121170935 一 绪论 等待的时间: (1) 数据在网络上的传输时间 (2) 站点服务器处理请求并生成回应数据的时间 ( ...
- 【读书笔记】2016.12.10 《构建高性能Web站点》
本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 ...
- [拇指飞动]构建高性能Web站点(1)
<构建高性能Web站点>中提到了Aphache, Nginx和lighthttpd. 把我的笔记share一下. 一般来讲Apache主要是基于多进程模型,早期的fork模式会为每一个re ...
- 《构建高性能web站点》随笔 无处不在的性能问题
前言– 追寻大牛的足迹,无处不在的“性能”问题. 最近在读郭欣大牛的<构建高性能Web站点>,读完收益颇多.作者从HTTP.多级缓存.服务器并发策略.数据库.负载均衡.分布式文件系统多个方 ...
- 【转】构建高性能WEB站点之 吞吐率、吞吐量、TPS、性能测试
内容参考:构建高性能WEB站点.pdf 一.吞吐率 我们一般使用单位时间内服务器处理的请求数来描述其并发处理能力.称之为吞吐率(Throughput),单位是"req/s".吞吐率 ...
- 构建高性能WEB站点之 吞吐率、吞吐量、TPS、性能测试
内容参考: 构建高性能WEB站点.pdf 一.吞吐率 我们一般使用单位时间内服务器处理的请求数来描述其并发处理能力.称之为吞吐率(Throughput),单位是 “req/s”.吞吐率特指Web服务器 ...
- 构建高性能web站点--读书大纲
用户输入你的站点网址,等了半天..还没打开,裤衩一下就给关了.好了,流失了一个用户.为什么会有这样的问题呢.怎么解决自己站点“慢”,体验差的问题呢. 在这段等待的时间里,到底发生了什么?事实上这并不简 ...
随机推荐
- Collections.sort()
Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...
- javascript定时器:setTimeout与setInterval
概述: setTimeout:在指定的延迟时间之后调用一个函数或者执行一个代码片段,只执行一次: setInterval:周期性地调用一个函数(function)或者执行一段代码,重复执行: 语法格式 ...
- 不可视对象的自己主动实例化BUG
PB有个隐藏BUG会占用内存.影响效率. 先来做个样例吧 (1)创建一个不可视对象n_base,勾选Autolnstantiate属性 初始化事件constructor里面写messagebox('c ...
- BNU10805:矩形神码的
我们都知道,矩形是由两条对角线的,没错吧?(谜之声:这不是显然么!)这两条线的长度也是相等的,没错吧?(谜之声:这不废话么!)然后我们给定一条对角线的起始点和终止点的坐标,然后给定另一个对角线和他的夹 ...
- 如何判断Linux load的值是否过高
1.先使用top看下CPU占用高的进程,找出进程的进程ID(pid): 查看方法:top 2.根据进程ID(pid)查看是进程的那些线程占用CPU高. 查看方法:top -Hp pid 3.使用pst ...
- 使用NSURLCache为NSURLRequest设置缓存
http://m.blog.csdn.net/blog/u011439689/18734363#
- Private Members in JavaScript
Private Members in JavaScript Douglas Crockford www.crockford.com JavaScript is the world's most mis ...
- SQL Server类型与C#类型对应关系
SQL类型 C#类型 bit bool tinyint byte smallint short int int bigint long real float float double money de ...
- 探索A@1db9742
public class S { /** * @param args */ public static void main(String[] args) { System.out.printl ...
- ESP8266固件烧录方法
今天拿到ESP8266的板子,第一步是进行烧录固件. 首先是使用官方自带的参考文档,进行操作.发现每次烧录均卡在等待同步上电. 之后发现是烧录方法错误. 正确的烧录方法: 先按下FLASH不放,再按烧 ...