proxy silbing 原理分析

简介: proxy 提供多种代理模式 正向代理   为本地客户端提供互联网访问,并缓存互联网对象(图片,HTML, CSS 等 "下简称对象"), 加速对互联网访问速度 反向代理  为本地网站提供缓存,减轻本地 web server 静态对象(图片, FLASH, HTML, CSS 等) 处理压力   当前环境 (为了清晰拓扑结构,当前只使用 proxy1, proxy2 作为代理

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 间相互复制内存对象原理

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
缓存 负载均衡 网络安全
什么是proxy?优点是什么?
什么是proxy?优点是什么?
25 0
|
8月前
|
安全 Java
架构系列——java动态代理中的InvocationHandler和Proxy
架构系列——java动态代理中的InvocationHandler和Proxy
|
4月前
es6中proxy如何使用
es6中proxy如何使用
25 0
|
9月前
|
JavaScript 前端开发
关于proxy的较深入研究
关于proxy的较深入研究
|
存储 缓存 Java
yii\caching\CacheInterface 接口是干什么的?底层原理是什么?
yii\caching\CacheInterface 接口是干什么的?底层原理是什么?
|
存储 缓存 JavaScript
keep-alive的使用场景跟原理分析(超详细讲解)
keep-alive的使用场景跟原理分析(超详细讲解)
563 0
keep-alive的使用场景跟原理分析(超详细讲解)
|
存储 设计模式 Java
Proxy动态代理机制详解
代理模式给某一个(目标)对象提供一个代理对象,并由代理对象持有目标对象的引用,所谓代理,就是一个对象代表另一个对象执行相应的动作程序。
78 0
Proxy动态代理机制详解
proxy的基本用法
proxy的基本用法
209 0
Proxy 对象简介
关于Vue3 中的数据响应式功能,我们大家应该都知道,它是通过 ES6的代理模式——Proxy 对象实现的,今天我们来简单认识下何为 Proxy 对象。
271 0
|
Java Android开发
Android插件化开发基础之Java动态代理(proxy)机制的简单例子
Android插件化开发基础之Java动态代理(proxy)机制的简单例子
223 0