网状,其内欺骗使用,使用“处理程序”的一个管线和流出绑定数据以顺序地处理。 网状的例子,包括库,示出了用于东西,如认证,协议编解码器,和该服务的实际业务逻辑的各种处理程序。
欺骗似乎采取处理概念,而不是直接提供API用户的编解码器,过滤器和服务。 虽然这些有不同的签名,欺骗的新用户留下了决定哪些,以实现其整体服务器的每个部分使用的任务。 而不是仅仅决定在哪里挣脱锁链成各种Netty的处理程序,他们现在需要决定哪些部分应该是一个编解码器的一部分,与任何过滤器,与在链末端的单一服务。 总而言之,虽然欺骗是一种更高层次的库比Netty的,并应建立服务更容易的任务,API,用户可以有更多的选择,使。
什么是关键决策点和优点/缺点,用于放置处理流的特定部分为编解码与一个过滤器与奇异的服务? 如果有一种可能性,即管道可以进一步延长,应服务逻辑在管道的端部被放置到过滤器代替,具有“空操作”的服务? 鉴于订货过滤器(如管道处理程序)的灵活性,与一端和服务上,另一端奇异编解码器,为什么不能“一切”是过滤器?
欺骗和Netty的是完全不同的结构。
服务,过滤器和编解码器实际上是相当正交的概念。 让我来解释一下:。 作为一个用户 - 即。 不是一个编解码器的实现者 - 你只需要了解服务和过滤器。
首先,编解码器是负责将字节流成离散请求或响应。 例如,编解码器HTTP读取字节流,并产生HttpRequest
或HttpResponse
的对象。
甲Service
是一个对象,给定的请求,产生一个Future
的答复的-这是一个简单的函数(并且实际上它扩展Function
)。 关于服务的有趣的事情是,他们是对称的。 客户端使用服务,服务器提供了一个。 有关服务的最重要的事情是,(1)他们工作在不连续的请求和响应,以及(2)它们匹配的请求的响应 - 所有这些都由其类型暗示。 这就是为什么我们称之为欺骗的“RPC”系统 - 请求/响应对是的RPC的决定性特征。
因此,我们有服务,但有独立于服务本身的修改服务行为,这是非常有用和重要。 例如,我们可能要提供超时功能,或重试。 这就是Filter
就做。 他们提供修改服务行为的服务独立的方法。 这种增强的模块化和重用。 例如,在超时欺骗被实现为过滤器,并且可以应用于任何的服务。
你可以找到有关的服务和过滤器的更多细节斯卡拉学校 。
*
所以,让我们对比这Netty中的处理程序。 这些都是通用的事件处理程序,这也可堆叠。 你可以做很多类似的事情和他们在一起,但底层模型是连接到一个连接事件流 。 这使得它更难以编写通用模块(例如,实施重试,超时,失败的权责发生制,跟踪,异常报告,等等。),因为你不能让您在使用操作流水线的许多假设。
网状管道还与混为一谈应用处理器的协议实现。 欺骗干净分隔两个,和模块化是因为它增强。
网状是一个奇妙的抽象化,但对于RPC服务器,欺骗提供了更大的模块化和可组合性。
*
粗略总结可以说,Netty的是“面向数据流”,而欺骗是“面向服务”。 这是一个重要的区别,这是什么使我们能够以模块化的方式实现强大的RPC服务。 例如,连接池和负载均衡 - 以RPC客户端至关重要 - 从服务模式脱落自然,但不适合在流模型。
我不认为它应该是Codec或者Filter之间做出一个决定。 编解码器更希望得到包裹在过滤器。
至于决策逻辑,在哪里放置它,将取决于要作出的决定。 业务决策应该与你的业务逻辑走,而像路由,负载均衡,某些类型的访问控制等某些决定可能很好适应作为过滤器。
服务通常是坐在线的末端,并与它的欺骗过滤器将让你有。
不知道这是否有道理?
只是一步从技术细节的一瞬间的事情,并期待在逻辑。 我应该负责什么,然后去适应你的设计技术。 不要弯曲你的设计太多,以适应技术。
顺便说一句,我实现了在欺骗之上的网关服务器,我必须说:这是一个不错的库的工作。
我不知道你正在试图建立,但看看可能的备选方案也:喷涂,Blueeyes,未经过滤的,玩迷你,等它可以帮助你得到一个更好地了解去哪里。