
🤖 VOLO简介
Volo 是由字节跳动服务框架团队开源的一款高性能、易用的 Rust RPC 框架。
Volo 框架自身开销极低,并提供了命令行工具与灵活的中间件设计,让开发者可以轻松上手,享受 Rust 带来的开发乐趣。
本文介绍自 Volo-HTTP 0.3.0 版本以来的变更。
🚀 功能亮点
1.客户端易用性提升
此前的应用中,为了追求性能,我们在 Client 中使用了大量泛型,这导致其类型定义异常复杂,相关的错误信息也令人费解,增加了开发者的理解成本。
为了解决这个问题,我们在新版本中对 Client 的封装方式进行了优化,通过在最外层使用 Box 来包装内部的 dyn Future。这一改动在确保类型简洁易用的同时,几乎不会引入额外的性能开销。 具体对比如下:
- 旧版本 (0.3.0): 用户需要构建一个带有复杂泛型类型的
DefaultClient。 - 新版本 (0.4.0): 用户可以直接使用
Client,类型更清晰,使用更简单。
2.支持HTTP/2
新版本现已为服务端和客户端提供了完整的 HTTP/2 支持,并且客户端也已支持连接池功能。
🔧其他变更
1.删除客户端的默认Target
考虑到客户端的默认Target使用频率不高,但却使Target的选择逻辑过于复杂,我们在此版本中移除了它。
不过,我们添加了TargetLayer,可以强制Client设置Target,这样可以提供与以前类似的体验。
- 随着默认
Target的移除,默认Host的配置也被一并移除。我们重构了原有的HostLayer,使其更加灵活,现在支持None,Auto,Force,Fallback四种模式。 - 默认的
callee name已被移除,推荐使用TargetLayer的with_callee_name方法来代替。该方法主要用于通过 IP 地址访问 HTTPS 服务,并需要设置 SNI(服务器名称指示)的场景。 RequestBuilder::full_uri已被移除。我们推荐通过Layer的方式来实现该功能,而非直接在RequestBuilder中操作。相关示例将稍后发布。
2.其他优化与调整
- 命名统一:
DefaultLB和DefaultLBService已重命名为DefaultLb和DefaultLbService。 - 废弃项移除: 移除了已废弃的
ClientRequest,ServerRequest,ClientResponse,ServerResponse类型。 - 代码简化: 减少了部分不必要的泛型约束。
- 日志修复: 修复了当
discover的watch channel关闭时,会无限循环打印警告日志的问题。 - 新增代理支持: 新增
HttpProxyLayer,以支持 RFC7230 中定义的 HTTP 代理。 - 可观测性: HTTP 服务端现已支持
SpanProvider。
🐞Bug修复
- 现在使用
DiscoverKey作为Discover::Key,替代了原先的(FastStr, u16)元组。这解决了因域名带有端口,而导致的意外缓存问题。
重大变更
1.简化客户端
-
以下复杂的类型别名已被彻底移除:
ClientMetaServiceClientServiceSimpleClientDefaultClientOuterServiceDefaultClient
-
Client的泛型类型已从内部服务 (S) 调整为请求体和响应体 (ReqBody和RespBody)。在绝大多数场景下,用户可以直接使用Client而无需关心其泛型类型。
2.支持 HTTP/2
- 为支持 HTTP/2,我们引入了新的 Cargo features:
"http1"和"http2"。 - 默认 features 已更新为
["default-client", "default-server"]。 - 请注意,
"default-client"和"default-server"仅启用 HTTP/1。
3.移除客户端的默认Target
-
以下与默认
Target相关的函数已从ClientBuilder中移除:ClientBuilder::addressClientBuilder::hostClientBuilder::with_portClientBuilder::with_schemeClientBuilder::target_refClientBuilder::target_mut
-
HostLayer 已被重构,ClientBuilder::default_host已更新为ClientBuilder::host_mode。 -
RequestBuilder::full_uri已被移除。
📄完整更新日志
volo-http-0.3.0...volo-http-0.4.0[1]
参考资料 [1]
volo-http-0.3.0...volo-http-0.4.0: github.com/cloudwego/v...