proxy silbing 原理分析

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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 间相互复制内存对象原理

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
JSON 数据格式
Echarts折线图的折线实线设置成虚线
Echarts折线图的折线实线设置成虚线
536 0
|
2天前
|
人工智能 运维 安全
|
4天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
383 124
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
|
7天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
670 107
|
1天前
|
算法 Python
【轴承故障诊断】一种用于轴承故障诊断的稀疏贝叶斯学习(SBL),两种群稀疏学习算法来提取故障脉冲,第一种仅利用故障脉冲的群稀疏性,第二种则利用故障脉冲的额外周期性行为(Matlab代码实现)
【轴承故障诊断】一种用于轴承故障诊断的稀疏贝叶斯学习(SBL),两种群稀疏学习算法来提取故障脉冲,第一种仅利用故障脉冲的群稀疏性,第二种则利用故障脉冲的额外周期性行为(Matlab代码实现)
221 152
|
3天前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
200 127
|
3天前
|
Web App开发 前端开发 API
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
230 124
|
1天前
|
编解码 算法 自动驾驶
【雷达通信】用于集成传感和通信的OFDM雷达传感算法(Matlab代码实现)
【雷达通信】用于集成传感和通信的OFDM雷达传感算法(Matlab代码实现)
172 125