(图1)中的代理层次结构是静态的—代理1总是会将报文转发给代理2,代理2总是会将报文转发给代理3。但是,层次不一定非得是静态的。代理服务器可以根据众多因素,将报文转发给一个不断变化的代理服务器和原始服务器集。
(比如:在图2)中,访间代理会根据不同的情况将报文转发给父代理或原始服务器。
1)如果所请求的对象属于一个付费使用内容分发服务的Web服务器,代理就会将请求发送给附近的一个缓存服务器,这个服务器会返回已缓存对象,或者如果它那儿没有的话,它会去取回内容。
2)如果请求的是特定类型的图片,访问代理会将请求转发给一个特定的压缩代理,这个代理会去获取图片,然后对其进行压缩,这样通过到客户端的慢速 Modem下载时,速度会更快一些。
以下还有几个动态选择父代理的例子。
&:负载均衡
子代理可能会根据当前父代理上的工作负载级别来决定如何选择一个父代理,以均衡负载。
&:地理位置附近的路由
子代理可能会选择负责原始服务器所在物理区域的父代理。
&:协议/类型路由
子代理可能会根据URI将报文转发到不同的父代理和原始服务器上去。某些特定类型的URI可能要通过一些特殊的代理服务器转发请求,以便进行特殊的协议处理。
&:基于订购的路由
如果发布者为高性能服务额外付费了,它们的URI就会被转发到大型级存或压缩引擎上去,以提高性能。
在不同的产品中,动态父路由逻辑的实现方式各有不同,包括使用配置文件、脚本语言和动态可执行插件等。