proxy silbing 原理分析

  1. 云栖社区>
  2. 博客>
  3. 正文

proxy silbing 原理分析

terry.zeng 2013-11-20 10:15:00 浏览809
展开阅读全文

proxy 提供多种代理模式

正向代理

  为本地客户端提供互联网访问,并缓存互联网对象(图片,HTML, CSS 等 "下简称对象"), 加速对互联网访问速度

反向代理

 为本地网站提供缓存,减轻本地 web server 静态对象(图片, FLASH, HTML, CSS 等) 处理压力

 

当前环境

(为了清晰拓扑结构,当前只使用 proxy1, proxy2 作为代理服务器,参见下图拓扑结构)
squid server ( proxy1, 10.1.1.111,  proxy2, 10.1.1.112)

客户端 (firefox, 10.1.1.25)

web server (www.163.com)

当前以正向代理为环境,(反向代理同理) 主要讨论在使用 sibling (邻居代理,姊妹代理,同级代理) 工作原理

 

silbing 原理

当前由大于等于 2 台 squid 服务器组成

每台 squid 能够独立缓存对象, 当某台(proxy2) squid 服务器在请求访问某个对象时候
    proxy2 会寻找自身缓存哈希表, 假如当前具备缓存对象,则马上返回缓存对象信息至访问客户 (常见为非第一次访问该对象)
   假如 proxy2 自身无法从 hash 表中获得对象信息, 则请求邻居代理 proxy1 (常见为第一次访问该对象)
       假如  proxy1 具备当前缓存对象, 则   proxy1 返回对象信息至 proxy2, 再返回到客户中
       假如  proxy1 不具备当前缓存对象,则  proxy2 从宿主主机 (当前环境为  www.163.com ) 中获得对象信息,并缓存至 hash 表中

 

 

目标.

建立 proxy1, proxy2 代理服务器, 启用 icp 协议,允许 proxy1, proxy2  互相访问对方缓存对象

参见 proxy1, proxy2,  启动信息

 

参见上图可见,proxy1 (ip 111)  proxy2( ip 112 ) 都启用 3128 缓存访问端口, 3130  icp 请求端口, 默认最大缓存时间为 259200/60(秒) = 3 天 最大缓存时间 

注: 3128 为客户端 (25, firefox) 访问 squid 服务器端口,  3130 为 squid 服务器之间互相请求对象缓存端口

 

讨论1

重启 proxy1, proxy2, 当前 squid 中不具备任何缓存

25 firefox 代理指向 proxy2( ip, 112) 并第一次访问 163.com

 

检验 squid 代理日志信息 (日志量太大,过滤并只提取某一个对象信息,如下图)

proxy2 (access.log)


proxy1 (access.log)

 

参考上述 silbing 原理信息

当  proxy2 要获得 31685638.jpg 时
      proxy2 利用 icp_query 请求访问 proxy1 服务器
     因此, proxy1 服务器日志中记录了该对象查询的信息
     由于proxy1, proxy2 第一次访问该对象,因此 proxy1 无法获得该信息,并返回记录至 proxy2 
     proxy1, proxy2 都具备 UDP_MISS/000 的日志  (10.1.1.112,  UDP/MISS/000  icp_query)

最终,31685638.jpg 由 proxy2 进行宿主访问,参见 (TCP_MISS/200) 

 

 

讨论2

25 firefox 代理指向 proxy2( ip, 112) 并第二次访问 163.com

参见下面日志信息

proxy2 access.log

proxy1 access.log

 

分析,

当前客户(25, firefox) 请求  proxy2 获得 31685638.jpg 信息

proxy2 因为之前已经在 hash 表中记录 31685638.jpg 信息,并从内存中进行对象返回, 参见 (tcp_mem_hit/200)

 

 

讨论3

当前 proxy2 已经具备缓存对象 (参见讨论2)

假设当前有其他客户,访问  proxy1 并请求 获得 31685638.jpg 信息

proxy1 先检测 hash  表, 由于没有缓存, proxy1 会请求 proxy2 31685638.jpg 信息

proxy2 在讨论 2 中已经得到 31685638.jpg 缓存, 因此会回应并返回 31685638.jpg 至 proxy1

proxy1 access.log

proxy2 access.log

 

参见 proxy2 access.log 信息

10.1.1.111 UDP_HIT/000  ICP_QUERY  请求来之 proxy1 服务器

10.1.1.111 TCP_MEM_HIT/200 对象从 proxy2 服务器中内存获得并返回至 proxy1

参见 proxy1 access.log 信息

10.1.1.25 TCP/MISS/200  信息成功返回,并把对象缓存至 proxy1 中

当再次在 (25 firefox) 访问对象时, 参见 proxy1 access.log

确认对象直接来源于  proxy1 内存中

 

上述为 squid 服务器利用 silbing 架构, 在两台 squid 间相互复制内存对象原理

网友评论

登录后评论
0/500
评论
terry.zeng
+ 关注