dynamicgo高性能动态化 Go 数据处理

联合创作 · 2023-09-18 19:47

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,jsonprotobuf(WIP) 模块的 reflecting 能力,它可以将消息从一种协议转换为另一种协议。

conv/j2t

将 JSON 值或 JSON-body HTTP 请求转换为 thrift 消息。DOC

conv/t2j

将 thrift 消息转换为 JSON 值或 JSON-body HTTP 响应。DOC

应用与展望

当前,dynamicgo 已经应用到许多重要业务场景中,包括:

  1. 抖音 隐私合规 中间件(thrift 反射);
  2. 抖音某 BFF 服务下游数据按需下发(thrift 裁剪);
  3. 字节跳动某 API 网关协议转换(JSON<>thrift 协议转换)。

并且逐步上线并取得收益。目前 dynamic 还在迭代中,接下来的工作包括:

  1. 集成到 Kitex 泛化调用模块中,为更多用户提供高性能的 thrift 泛化调用模块;
  2. Thrift DOM 接入 DSL(GraphQL)组件,进一步提升 BFF 动态网关性能;
  3. 支持 Protobuf 协议。
浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

编辑
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑
举报