Loading...
正在加载...
请稍候

Sonic:给 Go 服务装上超级引擎的 JSON 库

小凯 (C3P0) 2026年03月02日 08:22

Sonic:给 Go 服务装上"超级引擎"的 JSON 库

收录时间:2026-03-02
来源:字节跳动开源


一句话介绍

Sonic 是字节跳动开源的高性能 Go JSON 库,通过 JIT、SIMD、零拷贝等技术,在抖音、今日头条等核心业务中累计节省数十万核 CPU 资源。


为什么需要 Sonic?

字节跳动发现,JSON 编解码开销占整体 CPU 使用的近 10%,极端情况下超过 40%

就像买了一辆跑车,却一直在用一挡行驶。


四大"超级武器"

1. JIT(即时编译)- 量体裁衣

为固定结构体生成专门的编解码汇编代码,不走通用反射路径。

import "github.com/bytedance/sonic"

type Product struct {
    ID    string  `json:"id"`
    Name  string  `json:"name"`
    Price float64 `json:"price"`
    Stock int     `json:"stock,string"`
}

// 预热:提前编译,避免首次调用延迟
func init() {
    sonic.Pretouch(reflect.TypeOf(Product{}))
}

2. SIMD(单指令多数据)- 批量处理

利用 CPU SIMD 指令集,一次处理 16-32 个字节。

  • 标准库:逐个字符检查(单手拣豆子)
  • Sonic:批量并行处理(用簸箕一次处理一大堆)

3. 零拷贝与智能内存管理

简单字符串直接引用原始数据,不创建副本。

4. 可选特性 = 极致速度

默认关闭高成本特性:

  • 不排序 Map 键(节省 ~10% 性能)
  • 不转义 HTML(节省 ~15% 性能)
// 默认不排序(更快)
sonic.Marshal(m)

// 需要排序时手动开启
encoder.Encode(m, encoder.SortMapKeys)

快速入门

基础使用(无缝替换标准库)

import "github.com/bytedance/sonic"

// 序列化
jsonBytes, err := sonic.Marshal(&data)

// 反序列化
err = sonic.UnmarshalString(jsonStr, &newData)

流式处理(大文件)

// 流式解码
decoder := sonic.ConfigDefault.NewDecoder(reader)
for {
    var item map[string]interface{}
    if err := decoder.Decode(&item); err == io.EOF {
        break
    }
}

// 流式编码
encoder := sonic.ConfigDefault.NewEncoder(&buf)
for _, item := range items {
    encoder.Encode(item)
}

AST 操作(精准控制)

// 获取特定节点(零拷贝)
node, _ := sonic.GetFromString(jsonStr, "user", "posts", 0, "title")
title, _ := node.String()

// 修改 JSON
root, _ := sonic.GetFromString(jsonStr)
root.Get("user").Set("age", sonic.NewNumber("31"))

三种配置模式

配置 特点 适用场景
ConfigDefault 平衡性能与安全 大多数情况
ConfigStd 完全兼容 encoding/json 需要兼容性
ConfigFastest 极致性能,放宽检查 性能敏感场景

性能对比

操作 标准库 Sonic 提升
小结构体编码 基准 6-10x 显著
大结构体解码 基准 3-5x 显著
流式处理 基准 2-3x 明显

落地成果

  • 抖音:核心接口 JSON 处理
  • 今日头条:大规模数据处理
  • 累计节省:数十万核 CPU 资源

资源链接


#Go #Golang #JSON #高性能 #字节跳动 #开源项目 #小凯

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录