加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Finagle中的服务,过滤器和编解码器之间的边界

发布时间:2020-12-16 19:07:50 所属栏目:安全 来源:网络整理
导读:Netlen在Finagle中使用,使用“处理程序”管道来顺序处理和传出绑定的数据. Netty示例和包含的库显示了用于诸如身份验证,协议编解码器和服务的实际业务逻辑等各种处理程序. Finagle似乎采取处理程序的概念,而是直接提供API用户的编解码器,过滤器和服务.虽然这
Netlen在Finagle中使用,使用“处理程序”管道来顺序处理和传出绑定的数据. Netty示例和包含的库显示了用于诸如身份验证,协议编解码器和服务的实际业务逻辑等各种处理程序.

Finagle似乎采取处理程序的概念,而是直接提供API用户的编解码器,过滤器和服务.虽然这些具有不同的签名,但是Finagle的新用户仍然具有决定使用哪一个以实现其整个服务器的每个部分的任务.而不是仅仅决定将链接打破到各种Netty处理程序的位置,他们现在需要确定哪个部分应该是编解码器的一部分,而不是任何过滤器,而不是在链末端的单一服务.总而言之,虽然Finagle是Netty的高层次的图书馆,但应该使构建服务的任务更加简单,API用户可能有更多的选择.

将处理流的特定部分放入编解码器与过滤器与单一服务有关的关键决策点和优缺点是什么?如果有可能进一步扩展管道,那么服务逻辑应该放在一个过滤器中,而在管道末端有一个“noop”服务?鉴于排序过滤器(作为流水线处理程序)的灵活性与一端的单一编解码器和另一端的服务相比,为什么不应该将“一切”作为过滤器?

解决方法

Finagle和Netty的结构完全不同.

服务,过滤器和编解码器实际上是非常正交的概念.让我尝试&说明.作为用户 – 即而不是编解码器的实现者 – 您只需要了解服务和过滤器.

首先,编解码器负责将字节流转换为离散请求或响应.例如,HTTP编解码器读取字节流,并产生HttpRequest或HttpResponse对象.

一个服务是一个对象,给出一个请求,产生一个回应的未来 – 这是一个简单的功能(实际上它扩展了Function).服务的有趣之处在于它们是对称的.客户端使用服务,服务器提供服务.服务的重要内容是(1)它们对离散请求和响应进行操作,以及(2)它们将请求与响应相匹配 – 所有这些都是由其类型所暗示的.这就是为什么我们称finagle为“RPC”系统 – 请求/响应对是RPC的定义特征.

因此,我们有服务,但是独立于服务本身修改服务行为是有用和重要的.例如,我们可能希望提供超时功能或重试.这是Filter做的.它们提供了一种独立于服务的方式来修改服务行为.这增强了模块化和重用性.例如,finagle中的超时作为过滤器实现,可以应用于任何服务.

您可以找到有关服务和过滤器在Scala School.

*

所以,我们来对比Netty的处理程序.这些是通用事件处理程序,也是可堆叠的.你可以和他们做很多类似的事情,但底层的模型是连接到一个连接的事件流.这使得编写通用模块(例如,实现重试,超时,失败应计,跟踪,异常报告等)变得更加困难,因为您无法对所运行的管道做出许多假设.

Netty管道还将协议实现与应用程序处理程序相结合. Finagle彻底地分离了两者,由于它,模块化得到加强.

Netty是一系列抽象,但对于RPC服务器,finagle提供更大的模块化和可组合性.

*

总而言之,你可以说Netty是“流向导”,而finagle是“面向服务”.这是一个重要的区别,它使我们能够以模块化方式实现强大的RPC服务.例如,连接池和负载平衡(对RPC客户端至关重要)从服务模型中自然而然,但不符合流模型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读