高性能动态 Thrift 编解码器 — CloudWeGo 子项目 Frugal 正式开源

本文主要是介绍高性能动态 Thrift 编解码器 — CloudWeGo 子项目 Frugal 正式开源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:王铁举

CloudWeGo 子项目 Frugal 已正式开源。

项目定位:Frugal 是一款不用生成编解码代码的基于 JIT 编译技术的高性能动态 Thrift 编解码器。

项目地址:https://github.com/cloudwego/frugal

Thrift 作为一个高性能编解码协议,在 CloudWeGo 里被广泛使用。由于其必须生成数量较大的编解码代码,给项目开发管理和代码 Review 带去了诸多不便。 Thrift 编解码库和 Go 语言编译器的使用,也给性能优化造成了阻碍。

因此,CloudWeGo 团队开发了 Frugal 项目。 

在性能上,通过使用 JIT 编译技术,Frugal 带来了更强的编解码性能,可以达到传统编解码方式的 ;在易用性上,Frugal 不需生成编解码代码,极大地改善了用户的使用体验。 

01 Frugal 的特点

无需生成代码

传统的 Thrift 编解码方式,要求用户必须要先生成编解码代码,不仅增加了用户使用负担,而且后续的变更可能带来大量的改动,导致代码 Review 难度大增。

通过 JIT 技术在运行时动态生成编解码机器代码, Frugal 能帮助开发者避免这一问题。

高性能

在多核场景下,Frugal 的性能可以达到传统编解码方式的 倍!

用户通过使用 Frugal 不再需要生成编解码代码。团队基于 JIT 技术生成了比 Go 语言编译器性能更好的机器代码,使得 Frugal 在进行 Thrift 编解码时,比传统通过生成代码进行编解码的方式性能表现更佳。

稳定性

Frugal 的稳定性已经通过了团队内部的严格验证。 

团队使用了 Thrift 大仓库中的 Thrift 文件进行测试,总计 21307 个 Thrift 文件,全部通过了编解码测试。

02 用 Frugal 可以做什么?

配合 Kitex 使用

搭配 Kitex 框架使用,用户不需再生成大量的编解码代码,使仓库变得干净整洁,Review 时也不用再带上一堆无意义的 Diff,性能也更加优越。

配合 Thriftgo 做 Thrift IDL 的编解码

如果只需要使用 Thrift 的编解码能力,同时也定义好了 IDL,那么只需要用 Thriftgo 生成 IDL 对应的 Go 语言 Struct,就可以轻松使用 Frugal 的编解码能力。

直接定义 struct 进行编解码

更简单的使用方式,可以直接定义好 Go 语言 Struct 后,给每个 Field 带上 Frugal 所需的 Tag,就可以直接使用 Frugal 进行编解码了。

03 使用手册

配合 Kitex 使用

  • 更新 Kitex 到 Frugal_test 分支。

  • 带上 -thrift frugal_tag 参数重新生成一次代码。

  • 初始化 Client 和 Server 时使用 WithPayloadCodec(thrift.NewThriftFrugalCodec()) Option。

Client 示例:

Server 示例:

配合 Thriftgo 做 Thrift IDL 的编解码

  • 编写 Thrift 文件。

现在假设我们有如下 Thrift 文件,My.thrift:

  • 使用 Thriftgo 生成代码。

定义好需要的 Thrift 文件后,在使用 Thriftgo 生成 Go 语言代码时使用 frugal_tag 参数。

示例:

  • 使用 Frugal 进行编解码。

生成所需要的结构体后,直接使用 Frugal 进行编解码即可。

示例:

直接定义 Struct 进行编解码

  • 定义 Struct。

现在假设我们需要如下 Struct :

  • 给结构体字段添加 Tag。

Frugal 中所需要的 Tag 是形如 frugal:"1,default,string",其中 1 为字段 ID,default 为字段的 Requiredness, string 表示字段的类型。上述的 MyStruct 可以添加如下 Tag:

下面是完整的类型示例:

  • 使用 Frugal 进行编解码。

直接使用 Frugal 进行编解码即可。

示例:

04 展望

  • 下一个版本 Kitex 将默认集成 Frugal,用户不再需要使用 Feature 分支来进行使用。

  • Frugal 将持续进行 SSA 后端,包括 SIMD 指令优化等特性的实现,预计在后续版本,将会带来性能更大幅度的提升。

项目地址

GitHub:https://github.com/cloudwego

官网:www.cloudwego.io

活动预告

5 月,CloudWeGo 社区第一期源码解读活动已经上线,欢迎大家持续关注并积极参与。活动地址:https://github.com/cloudwego/community/issues/24

这篇关于高性能动态 Thrift 编解码器 — CloudWeGo 子项目 Frugal 正式开源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/234291

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank 正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money