当你问代理机制的时候?指的是Agent,Proxy,Broker还是Delegate呢?
正如人们在各种日常活动中存在着形形色色的代理机制一样,在计算机科学领域,代理机制乃是解决各种复杂难解问题的基本途径之一。
小到对象/实体之间的通信,大到子系统、系统乃至超系统的设计,都会应用到代理。应用的广泛导致了代理有着不同的形态,主要有Agent、Proxy、Broker和Delegate。弄清各种代理的异同,对于理解系统的设计和实现,是有帮助的。
Agent:自主性代理
Agent是分布智能的基础单元。它具有一定程度的独立行为能力与智能,同时又遵从分布系统中某种统一的标准。在分布式环境中,Agent 可以和客户端不在一台主机上。
Agent代表着主体服务,但主体服务对Agent并不是完全控制,Agent实现了一定的算法, 具有解决某种问题的能力, 甚至包含通常意义下的“人工智能”, 如推理机、模糊运算、神经网络、知识库等能力。Agent在其生命周期内具有各种可能的特征变化,一般采用状态机模型,其通信能力是一切互操作性的基础。
动态代理(dynamical-agent) 架构就是一种典型的应用。它支持自身行为的动态修正, 并不限于具有预定的固定功能, 而可根据应用动态地加载和修改其动作, 以适应环境与要求变化, 跨越不同应用而扮演不同的角色。
在互联网协议栈的应用中, SNMP Agent就是一种自主性代理,具体实现包括了三大部分:控制模块、通讯模块和MIB信息库。
Proxy:透传性代理
Proxy是一种透传性代理,是为了能有效地访问远程服务或其他代理。这里的“远程”并非一定是地域上的远近, 而是涉及网络拓扑或计算复杂度上的成本。
互联网上的代理服务器技术, 便是这类代理的应用, 它可以穿越或绕开网络封锁(如防火墙) , 达到目标主机。
在Java 中动静态代理中的proxy 命名,有混淆概念的嫌疑,JavaScript中的Proxy对象,也是如此。
Broker:中介性代理
Broker 是一种中介性代理。在网络与分布计算中, 两个层次上的对等实体, 若不便彼此直接交往, 则可通过Broker实现通信。这些可以有各种各样的定义和实现, 也表现在不同的层次上。简单一点, Broker提供了分布式服务和资源的透明访问,屏蔽了异构组件之间的差异。
分布式异构平台之间, 为了实现互操作性, 采用中间件乃是最常用的方法. 例如,在不同类型操作系统之间, 不同厂商数据库之间, 不同应用系统之间, 均可用各种中间件解决。中间件就是一种中介性代理.
忆往昔,在CORBA和类似的体系结构中, 都反映了这种Broker结构,想起20年前使用的orbix orb(object request broker)不免有些感慨。当然,在同一系统内部, 各实体之间也有用Broker实现互操作的。
Delegate:委托性代理
Delegate 是委托性或者指派性代理,一般地,管理进程指派给代理方,并在代理方执行管理操作,而不涉及管理方。
Delegate 不具备自主移动的能力,需要借助外力,通过指派协议从一个地址空间移动到另一个地址空间。只要需要Delegate 执行任务,它就一直处于执行状态。它可以完成计算性能参数和统计数据、配置网络、修改参数、更新应用等任务。
在JQuery 中就有Delegate()方法,更广泛为人所知的就是Obj-C中的委托性代理了。iOS开发中的Delegate用于页面传值,也常用Delegate来传递消息和值,以及UITableView的Delegate等。
然而,现实是复杂的,这四种代理机制竟然可以混合组装使用,例如proxy-agent 等等。
从代理的视角看 DuerOS系统
从代理的视角看 DuerOS系统, 那么开发平台DBP(DuerOS Bot Platform)就很像是一个proxy-agent。DBP 平台即有自治能力,同时完成了DCS(设备与DuerOS系统之间的协议)的选择性透传。
在目前的6个对话指令中,Dialog.Delegate指令采用了委托式代理,将对话指派给DuerOS完成,DuerOS的询问和确认槽位的话术使用的是开发者在技能开放平台默认配置的话术。例如,在查询个人所得税场景中,因为需要填写多个槽位,开发者可以在技能开放平台配置默认的填槽话术,并将整个会话过程代理给DuerOS。DuerOS会自动询问和确认必要的槽位或意图。会话中,每一轮与用户的交互结果都会返回给技能,技能可以根据自身资源决定下一轮是否继续代理过程。
至于Broker, 现在不经常被提及的一个原因可能是——异构的服务一般都会采用基于http的web service 来完成了。在DuerOS中也是如此,详情参见《面向接口/协议?看DuerOS的技能开发》。
参考资料
赵慧, 施伯乐. 分布网络管理体系结构中若干术语的辨析——Agent、Delegator、Broker和Proxy[J]. 计算机科学, 2002, 29(8):24-26.
严隽永. 分布计算中代理机制辨析[J]. 大连理工大学学报, 2003, 43(s1):107-110.
dueros.baidu.com/dbp