sonic :基于 JIT 技术的开源全场景高性能 JSON 库,2024年最新信息化管理系统软件

本文介绍了sonic,一个基于JIT技术的高性能JSON库,旨在解决JSON编解码效率问题。sonic采用了JIT、lazy-load和SIMD等技术,以提高性能,尤其在定型编解码和泛型编解码场景下。sonic的JIT编译器能够根据结构体类型信息生成高效的codec,而lazy-load技术实现了按需加载,减少不必要的解析开销。此外,SIMD技术则增强了文本处理能力。
摘要由CSDN通过智能技术生成

为什么要自研 JSON 库


JSON(JavaScript Object Notation) 以其简洁的语法和灵活的自描述能力,被广泛应用于各互联网业务。但是 JSON 由于本质是一种文本协议,且没有类似 Protobuf 的强制模型约束(schema),编解码效率往往十分低下。再加上有些业务开发者对 JSON 库的不恰当选型与使用,最终导致服务性能急剧劣化。

在字节跳动,我们也遇到了上述问题。根据此前统计的公司 CPU 占比 TOP 50 服务的性能分析数据,JSON 编解码开销总体接近 10%,单个业务占比甚至超过 40%,提升 JSON 库的性能至关重要。因此我们对业界现有 Go JSON 库进行了一番评估测试。

首先,根据主流 JSON 库 API,我们将它们的使用方式分为三种:

  • 泛型(generic)编解码:JSON 没有对应的 schema,只能依据自描述语义将读取到的 value 解释为对应语言的运行时对象,例如:JSON object 转化为 Go map[string]interface{};

  • 定型(binding)编解码:JSON 有对应的 schema,可以同时结合模型定义(Go struct)与 JSON 语法,将读取到的 value 绑定到对应的模型字段上去,同时完成数据解析与校验;

  • 查找(get)& 修改(set):指定某种规则的查找路径(一般是 key 与 index 的集合),获取需要的那部分 JSON value 并处理。

其次,我们根据样本 JSON 的 key 数量和深度分为三个量级:

  • 小(small):400B,11 key,深度 3 层;

  • 中(medium):110KB,300+ key,深度 4 层(实际业务数据,其中有大量的嵌套 JSON string);

  • 大(large):550KB,10000+ key,深度 6 层。

测试结果如下:

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值