dynamicgo高性能动态化 Go 数据处理
dynamicgo 是字节自研的一套能动态处理 RPC 数据(不需要代码生成)同时保证高性能的 Go 基础库,旨在减少序列化/反序列化过程。
dynamicgo 的核心设计思想是:基于 原始字节流 和 动态类型描述 原地(in-place) 进行数据处理与转换。
Usage
thrift
Thrift IDL 解析器和消息运算符。它可以在运行时解析 thrift IDL 并以通用方式处理 thrift 数据。DOC
thrift/generic
使用或不使用运行时类型描述符来搜索、修改、反序列化、序列化 thrift 值的反射 API。DOC
thrift/base
消息传输的元数据,包括caller、address、log-id等,主要用于conv
(协议转换)模块。
thrift/annotation
第三方注释的内置实现,参阅thrift_idl_annotation_standards。它们主要用于conv
(协议转换)模块。
http
Http 请求/响应包装器接口。它们主要用于在http<>thrift
转换时传递 http 值。 DOC
conv
协议转换器。基于thrift
,json
和protobuf
(WIP) 模块的 reflecting 能力,它可以将消息从一种协议转换为另一种协议。
conv/j2t
将 JSON 值或 JSON-body HTTP 请求转换为 thrift 消息。DOC
conv/t2j
将 thrift 消息转换为 JSON 值或 JSON-body HTTP 响应。DOC
应用与展望
当前,dynamicgo 已经应用到许多重要业务场景中,包括:
- 抖音 隐私合规 中间件(thrift 反射);
- 抖音某 BFF 服务下游数据按需下发(thrift 裁剪);
- 字节跳动某 API 网关协议转换(JSON<>thrift 协议转换)。
并且逐步上线并取得收益。目前 dynamic 还在迭代中,接下来的工作包括:
- 集成到 Kitex 泛化调用模块中,为更多用户提供高性能的 thrift 泛化调用模块;
- Thrift DOM 接入 DSL(GraphQL)组件,进一步提升 BFF 动态网关性能;
- 支持 Protobuf 协议。
评论