接下来我们依次看看这些新特性。
Apache bRPC
是用 C++ 语言编写的工业级 RPC 框架,常用于搜索、存储、机器学习、广告、推荐等高性能系统。
在 v6.5 中,deepflow-agent 默认会采集 bRPC 协议的如下字段:
service_name
method_name
correlation_id
status_code
error_code
error_text
log_id
详细的字段映射关系请参考
DeepFlow 文档
。
FR #6042
。在 gRPC 的单次服务调用中,客户端和服务端在 HTTP/2 连接中使用相同的流 ID(Stream Identifier)进行通信,即在两端之间,帧(Frame)所携带的流 ID 相同。gRPC 支持的 RPC 类型有以下几种(
RPC life cycle
):
Unary RPC:最简单的 RPC 类型,客户端请求,服务端应答
Server Streaming RPC:服务端返回信息流(多个 DATA 帧)以响应客户端请求
Client Streaming RPC:客户端向服务端发送信息流(多个 DATA 帧),服务端通常在接收到所有客户端请求后,以一条消息进行响应
Bidirectional Streaming RPC:由客户端发起调用,客户端和服务端可以按任意顺序读写消息,在这种模式下,可以是服务端接收到客户端所有消息后再写入消息,或者基于一答一应的模式进行处理。
在此之前,DeepFlow 仅支持 Unary RPC。在腾讯的业务场景中涉及到了所有四类 RPC,在 FR #6042 的推动下,我们支持了剩余三种 Streaming 模式的 RPC。
v6.5 支持 gRPC Streaming 模式
相比 v6.4,支持 gRPC Streaming 带来的好处包括:
对于 Server Streaming RPC 或 Bidirectional Streaming RPC,DeepFlow 的调用日志能体现整个调用的结束时间和耗时
对于三种 Streaming RPC,DeepFlow 增加了
_DATA
和
_HEADER
类型的调用日志,支持呈现在分布式追踪结果中以表征请求、响应发生的时间
Apache Dubbo 文档
。
https://github.com/deepflowio/deepflow
访问
DeepFlow Demo
,体验零侵扰、全栈的可观测性。