《构建高性能web站点》读书笔记

一,分布式缓存
     1,数据库的前端缓存区
          文件系统内核缓冲区
               读缓存区
               写缓存区
     2,使用memcached
          key-value
               *key-value存储  取决于你如何查询这些数据
               *基于key的hash算法来设计存储数据结构(内存分配器) O(1)
          数据项过期时间
               淘汰机制基于LRU(Least Recently Used)算法,淘汰最近不常访问的数据项。
               memcached的PECL扩展  设置数据项过期时间。
          网络并发模型
               memcached使用libevent函数库来实现网络并发模型
          对象序列化
               抽象数据类型–》二进制字符串
     3,读操作缓存
          重复的身份验证
               cookies—>ticket
          数据库索引
          缓存用户登录状态
               memcached
     4,写操作缓存
          直接更新
          线程安全和锁竞争  不鼓励 慢
          memcached提供的原子递增操作
               $count  = $memcache->increment($page,1);
     5,监控状态
          $stats = $memcache -> getStats();
          空间使用率
          缓存命中率
          IO流量
          cacti监控系统监控memcached
     6,缓存扩展
          并发处理能力和缓存空间容量
          从功能/服务器—–》域名/服务器—–》根据key取余分布到缓存服务器
二 web负载均衡LB Load Balance
     1,思考
          工作量分配
          风险管理  备用
     2,HTTP重定向
          熟悉的镜像下载  做到重定向较近的服务器
          RR策略下的性能
               mod_rewriter顺序调度的性能总是比不上随机调度的性能。
          –根据SNMP分析原始数据并计算服务器流量来均衡
     3,DNS负载均衡
          多个A记录
               轮询设置
          扩展能力和可管理性
          智能解析  解析ip访问最近的服务器
          故障转移  动态域名解析
     4,反向代理负载均衡
          转移和转发
          按照权重分配任务
               Nginx,Apache,Lighttpd负载均衡调度器
          扩展的制约
               随着后端服务器的增加 到达一定的数量时,代理服务器几乎等于两台相加.
               对于这种情况更适合使用前面介绍基于DNS的负载均衡方式.
          健康探测
               Varnish
          粘滞会话
               转发到不同的服务器,可能有用户的session及一些动态内容缓存。
               —》调度器识别用户 ip
               HAProxy和NginX
               将服务器id加入用户cookies中
               为了充分利用本地化缓存,可以将同一个URL的请求始终转发在同一台特定的后台服务器。
               如果允许的话尽量采用分布式Session和分布式缓存,让后端服务器的应用尽量与本地无关。
     5,ip负载均衡 四层负载均衡
          DNAT  反向网络地址转换
               NAT服务器的动作欺骗了实际服务器,总以为用户是直接发给自己的。
          Netfilter/iptables
               linux内核有能力修改数据包
          用iptables来实现调度器
          IPVS/ipvsadm
          性能
          动态调度策略
          网关瓶颈NAT
               基于NAT的集群和DNS-RR使用。
               高额带宽还是其他方案—-》LVS的DR
     6,直接路由
          实际服务器的响应数据包将直接发送给客户端,而不经过调度器。
          使用IP别名
               一台机器能使用256个ip别名
          将实际服务器接入外部网络
               将调度器设置成和实际服务器一样的ip别名
          LVS-DR
               不经过调度器,减NAT压力
     7,ip隧道
          ip Tunneling  它是将调度器收到的ip数据包封装成一个新的ip数据包,然后
          实际服务器的响应数据包可以直接到达用户端。
          LVS-DR和LVS-TUN都适合请求和响应不对称的web服务器。
     8,考虑可用性
          备用实际服务器,HeartBeat测试主调度器,可以接管主调度器。

三,内容分发与同步
     1,复制
     2,ssh实现文件复制,主动分发方式。(FTP,POP,SCP,SFTP)
          SCP传输文件
          SFTP对远程服务器的文件系统进行操作
          多级分发   解决分发到大量不同地域的服务器所产生的时间按较长,更新内容延迟,大量消耗文件服务器的本地系统资源。
                         组件LAN,实现分发流量隔离。
     3,WebDAV 主动
          利用HTTP扩展协议WebDAV实现分发
     4,rsync 被动
          同步的时候必须扫描被同步目录中的所有文件,并根据最后修改时间和本地进行对比。
               大文件数据量不容乐观。
     5,Hash tree
          文件的更新标记,从文件到上一级目录。。。。
          linux内核中的inotify模块可以帮助我们完成上一级目录时间更新。
          尽量权衡目录深度。
     6,分发还是同步
     7,反向代理

四,数据库扩展
     1,复制和分离
          主从复制
               从的增加 增加了主的磁盘压力,采用多级复制策略,想多级分发一样。
          读写分离
               所有的更新操作,必须让它作用域主服务器上,才能保证数据库服务器上数据一致。
               所以采用读写分离方法,读从,写主。
               应用程序可以取法读写操作但是读操作分散到多台从服务器上,就不那么擅长了。
               那就是用数据库反向代理。
          是用数据库反向代理
               MySQL Proxy   当大量的从服务器时,瓶颈效应产生,怎么办呢。
     2,垂直分区
               把不相干的数据库比如博客数据库和好友数据库分开。
               但是当单一的博客数据库达到瓶颈的时候,该怎么办呢:
     3,水平分区
          把数据放在不同的分区中    
               表分区
          分区和分表
               分区; 哈希算法,范围,映射关系
          分区扩展
          分区反向代理
               Spock Proxy可以帮助应用程序水平分区的访问调度,不需要应用程序中维护那些分区对应关系了。

五,性能监控
     1,实时监控
          Nmon   实时监控软件
     2,监控代理
          监控远程服务器
          可以利用SNMP来完成,但是不能监控http并发连接数。幸运的是NginX提供了必要的HTTP监控接口、
     3,系统监控
          Cacti采用RRDtool作为监控数据的存储引擎,专门支队绘制坐标图而设计的存储格式。
     4,服务监控
          Apache中基于HTTP的mod_status模块
     5,响应时间监控
          监控宝 www.jiankongbao.com
         


         

fastCGI

epoll :
epoll 是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它不 会复用文件描述符集合来传递结果而迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被 侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的 电平触发(Level Triggered)外,还提供了边沿触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。

优点:
     支持一个进程打开大数目的soket描述符。
     IO效率不随FD的数据增加而线性下降。
    
常见的web负载均衡方法:
     1,用户手动选择方式
     2,DNS轮询方式
          可靠性低:其中一台服务器发生故障,所有的访问该服务器的请求将不会有所反应。
          负载分配不均衡
     3,四/七层负载均衡设备
     4,多线对地区智能DNS解析与混合负载均衡方式

HTTP Upstream模块
     1,ip_hash  
               down
     2,server
     3,upstream  轮询

你可能感兴趣的:(nginx,负载均衡,分布式缓存,高性能web)