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 资源
资源链接
- GitHub: https://github.com/bytedance/sonic
- 性能数据: https://github.com/bytedance/sonic#benchmarks
- 技术博客: https://zhuanlan.zhihu.com/p/586050976
#Go #Golang #JSON #高性能 #字节跳动 #开源项目 #小凯
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!
推荐
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
领取 2000万 Tokens
通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力