当前位置: 首页 > article >正文

tRPC-Go 框架 01:tRPC-Go 总览与核心架构

tRPC-Go 框架 01tRPC-Go 总览与核心架构tRPC 是腾讯开源的多语言 RPC 框架tRPC-Go是其 Go 语言实现已在腾讯内部支撑了海量服务视频、音乐、新闻、广告等日均调用量万亿级。本篇我们站高一点俯瞰 tRPC-Go 的整体架构与设计理念。一、tRPC 是什么tRPC tencentRPCFramework它是一个多语言Go / C / Java / Python / Node.js / Rust …多协议原生 trpc / gRPC / HTTP / 自定义可插拔服务治理、配置、可观测皆为插件云原生与 Kubernetes、Polaris 深度集成官方仓库https://github.com/trpc-group/trpc-go二、为什么需要又一个 RPC 框架业界已有 gRPC、Dubbo为什么腾讯还要做 tRPC维度gRPCtRPC协议绑定仅 HTTP/2Protobuf协议可插拔多语言一致性各语言实现略有差异各语言行为一致服务治理需要自行集成 Istio 等内建 Polaris、配置中心、可观测国内生态适配弱强腾讯/北极星/天机阁/七彩石周边脚手架需要自行拼装trpc-cmdline 一键创建核心动因在腾讯内部多语言、多协议、多基础设施环境下需要一个统一、灵活、易扩展的 RPC 框架。三、设计理念3.1 一切皆插件tRPC-Go 的核心非常薄所有能力编解码、传输、注册中心、负载均衡、限流、日志、监控都通过插件接口实现typePlugininterface{Type()stringSetup(namestring,decoder Decoder)error}这意味着切换注册中心、加监控点、改协议只需改配置或加一行 import业务代码零侵入。3.2 接口定义先行tRPC 强制以.proto为接口契约通过trpc-cmdline工具生成桩代码trpc create-phello.proto-o.生成的代码包含服务端接口你来实现客户端 stub直接调用mock测试用。3.3 配置驱动所有运行时行为通过trpc_go.yaml配置server:service:-name:trpc.app.server.Greeterip:127.0.0.1port:8000protocol:trpcclient:service:-name:trpc.app.user.Usertarget:polaris://trpc.app.user.Userprotocol:trpctimeout:1000plugins:log:default:...registry:polaris:...四、整体架构图┌─────────────────────────────────────────────────────────┐ │ 业务代码 (handler) │ └─────────────────────────────────────────────────────────┘ ▲ ▲ │ 服务端 │ 客户端 ┌───────────┴──────────────┐ ┌──────────────┴──────────┐ │ Filter Chain (拦截器) │ │ Filter Chain (拦截器) │ └───────────┬──────────────┘ └──────────────┬──────────┘ ▼ ▼ ┌──────────────────────────┐ ┌─────────────────────────┐ │ Codec编解码 │ │ Codec编解码 │ └───────────┬──────────────┘ └──────────────┬──────────┘ ▼ ▼ ┌──────────────────────────┐ ┌─────────────────────────┐ │ Transport传输层 │ │ Transport传输层 │ └───────────┬──────────────┘ └──────────────┬──────────┘ └─────────── Network ────────────┘ ┌─────────────────┐ │ 插件层贯穿全局 │ │ 注册中心 / LB │ │ 监控 / 日志 │ │ 配置中心 / 限流 │ └─────────────────┘五、核心组件详解5.1 Service / Server / ClientServer进程级别可以承载多个 ServiceService一个 RPC 服务一组方法Client调用端代理。// Server 启动s:trpc.NewServer()pb.RegisterGreeterService(s,greeterImpl{})s.Serve()// Client 调用proxy:pb.NewGreeterClientProxy()resp,err:proxy.Hello(ctx,req)5.2 Codec编解码负责消息打包/拆包、协议头与 body 的处理。tRPC 内置trpc默认二进制protobufhttpHTTPJSON 或 HTTPprotobufgrpcHTTP/2protobuf与 gRPC 互通通过protocol配置切换protocol:trpc|http|grpc|http_no_protocol5.3 Transport传输层抽象底层网络通信默认 TCP支持TCP / UDP自定义 transport如基于共享内存5.4 Filter拦截器类似 Java Servlet Filter / Express middleware对所有调用做横切处理typeFilterfunc(ctx context.Context,req,rsp any,next Handler)error经典用途日志、监控、链路追踪鉴权限流熔断重试。注册server:filter:[recovery,debuglog,openTelemetry]client:filter:[retry,breaker,debuglog]5.5 Selector服务发现 LB 路由selector(polaris://trpc.app.user) │ ├─ Discovery拉实例列表 ├─ ServiceRouter路由筛选 ├─ LoadBalancer负载均衡 └─ CircuitBreaker熔断每一步都可独立替换。5.6 Naming命名服务target 的格式schema://service-name?keyvaluekeyvalue例polaris://trpc.app.user?namespaceProduction ip://127.0.0.1:8000 dns://www.example.com:805.7 Plugin插件框架是 tRPC-Go 的骨架。注册一个插件plugin.Register(polaris,PolarisPlugin{})启动时根据trpc_go.yaml加载对应插件。六、一次完整的服务端调用流程1. TCP accept Transport 2. 拆包 解码协议头 Codec 3. 解码 body 为 message Codec 4. 路由到 method Server 5. Filter 链日志 / 监控 / 鉴权… Filter 6. 调用 handler 业务代码 7. 返回值经 Filter 反向链 Filter 8. 编码响应 Codec 9. 写回 TCP Transport七、一次完整的客户端调用流程1. proxy.Method(ctx, req) 2. Filter 链retry / circuit / 监控 3. Selector选目标实例 4. Codec编码 req 5. Transport网络发送 6. Transport接收 response 7. Codec解码 response 8. Filter 链反向 9. 返回业务调用方八、生态全景围绕 tRPC-Go 还有一系列周边工具/库作用trpc-cmdline项目脚手架与代码生成trpc-cli客户端调试trpc-go-database数据库驱动封装trpc-filter-*各类内置 filtertrpc-naming-polaris北极星命名服务插件trpc-config-*配置中心插件rainbow/etcd…trpc-log-*日志插件atta/zaptrpc-metrics-*监控指标插件trpc-opentelemetry链路追踪九、与 gRPC 的关系tRPC 不是要取代 gRPC而是包含 gRPC你可以让 tRPC 服务以 gRPC 协议对外提供你可以让 tRPC 客户端调用 gRPC 服务也可以让 tRPC 服务被 gRPC 客户端调用。所谓协议互通是 tRPC 设计中重要的一环。十、最小化体验# 1. 安装命令行工具goinstalltrpc.group/trpc-go/trpc-cmdline/trpclatest# 2. 创建一个 protocathello.protoEOF syntax proto3; package helloworld; option go_package git.code.oa.com/examples/helloworld; service HelloWorld { rpc Hello(HelloReq) returns (HelloRsp); } message HelloReq { string msg 1; } message HelloRsp { string msg 1; } EOF# 3. 生成项目骨架trpc create-phello.proto-o.# 4. 启动go run main.go十一、小结tRPC-Go 多语言 多协议 全插件化的 RPC 框架一切皆插件 / 接口先行 / 配置驱动 三大设计原则核心组件Codec、Transport、Filter、Selector、Plugin与 Polaris、北极星、七彩石、天机阁等深度集成。下一篇我们将动手搭建第一个 tRPC-Go 服务从 0 到 1 跑通 Hello World。

相关文章:

tRPC-Go 框架 01:tRPC-Go 总览与核心架构

tRPC-Go 框架 01:tRPC-Go 总览与核心架构 tRPC 是腾讯开源的多语言 RPC 框架,tRPC-Go 是其 Go 语言实现,已在腾讯内部支撑了海量服务(视频、音乐、新闻、广告等),日均调用量万亿级。本篇我们站高一点&…...

观察Taotoken用量看板如何帮助控制月度API支出

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken用量看板如何帮助控制月度API支出 在项目开发中,大模型API的调用成本往往是预算管理的重要一环。如果缺乏…...

银河麒麟V10找不到应用商店?手把手教你从源码编译安装录屏神器Capture(附ffmpeg配置避坑)

银河麒麟V10系统下从源码构建专业录屏工具Capture的全流程指南 在国产操作系统银河麒麟V10上,许多用户发现系统默认没有提供应用商店,导致无法直接安装常用的录屏工具。本文将详细介绍如何从源码编译安装功能强大的录屏软件Capture,并解决ARM…...

RPC 核心概念 05:超时、重试、熔断与限流

RPC 核心概念 05:超时、重试、熔断与限流 如果说服务发现是 RPC 的"基础设施",那么超时、重试、熔断、限流就是 RPC 的安全气囊——决定了系统在故障来临时还能否站立。本篇讲清楚这四件套的边界、配合与陷阱。 一、为什么需要这些&#xff1f…...

用C#手搓ABB IRB 2600机器人正逆运动学(附完整代码与避坑指南)

从零实现ABB IRB 2600机器人运动学:C#实战与工业级代码优化 在工业机器人编程领域,能够将教科书上的数学公式转化为可靠的生产线代码是一项核心技能。ABB IRB 2600作为经典的六轴工业机器人,其运动学实现过程中存在诸多教科书不会提及的工程细…...

别再手动画图了!WPS PPT里这个‘转智能图形’功能,3秒让文字变高级图示

WPS PPT智能图形进阶指南:3秒实现专业级视觉表达 在快节奏的职场环境中,演示文档的视觉呈现往往决定着信息传递的效率。传统PPT制作中,将文字列表转换为可视化图形需要经历形状绘制、文字排版、配色调整等多道工序,耗时且难以保证…...

PX4固件编译避坑指南:自定义机型后如何正确生成airframe_metadata并更新QGC

PX4固件编译避坑指南:自定义机型后如何正确生成airframe_metadata并更新QGC 当你花费数小时精心设计了一个全新的无人机机型,修改完所有参数并准备在QGroundControl(QGC)中测试时,却发现地面站无法识别你的自定义机型—…...

Photoshop图层批量导出终极指南:告别手动操作的时代

Photoshop图层批量导出终极指南:告别手动操作的时代 【免费下载链接】Photoshop-Export-Layers-to-Files-Fast This script allows you to export your layers as individual files at a speed much faster than the built-in script from Adobe. 项目地址: https…...

别再死记硬背二进制转换了!用Python写个自动转换工具,顺便搞懂CPU是怎么算的

用Python打造二进制转换工具:从代码实践理解CPU运算本质 当我们在编程中遇到需要处理二进制数据时,是否曾对背后的计算机原理产生好奇?本文将通过构建一个Python数制转换工具,带你穿透代码表层,深入理解CPU如何处理二…...

宇视云团队模式访客预约操作流程

宇视云团队模式访客预约操作流程 本文将从创建访客邀请、来访信息登记、线上审批操作到最终多种方式通行,为您提供一步步的详细图文说明,引导企业内部员工和外部来访人员轻松上手,让访客接待更高效、更安全。 第一步:受访者创建“…...

iPhone升级iOS 16.1后WiFi总掉线?别急着重置,试试这个2.4GHz频段切换法

iPhone升级iOS 16.1后WiFi频繁断连的深度解决方案 最近不少iPhone用户在升级到iOS 16.1后反馈WiFi连接不稳定,尤其是在使用笔记本热点或双频路由器时频繁掉线。这个问题不仅影响工作效率,也让人倍感困扰。本文将深入分析问题根源,并提供一套…...

YOLO26 ONNX Runtime 部署实战:告别NMS后处理,边缘推理新标杆

🚀 YOLO26 ONNX Runtime 部署实战:告别NMS后处理,边缘推理新标杆 摘要: Ultralytics 重磅推出的 YOLO26 不仅在精度上实现了代际飞跃,更在架构层面进行了颠覆性革新——彻底移除了传统的 NMS(非极大值抑制)后处理环节。本文将带你深入了解 YOLO26 的核心优势,并基于 …...

宇视出入口相机抓拍调试速成方法

宇视出入口相机抓拍调试速成方法一、背景概述智慧园区、停车场等场景已普及宇视出入口抓拍相机,用于车辆出入管控与车牌识别。现场易受光照、车速、车道环境等影响,常出现漏抓、识别率低、画面模糊等问题。传统调试无标准、耗时长、上手门槛高&#xff0…...

别再死记硬背占空比了!用STM32 HAL库驱动MG90S舵机,我总结了这份避坑指南

STM32 HAL库驱动MG90S舵机:从参数计算到实战调试的全方位指南 刚接触STM32和舵机的新手们,是否曾被PWM配置中的各种参数搞得晕头转向?明明按照教程设置了占空比,舵机却纹丝不动;或者角度总是偏差几度,调试…...

如何在Java中极速处理百万级Excel数据?FastExcel高性能读写实战指南

如何在Java中极速处理百万级Excel数据?FastExcel高性能读写实战指南 【免费下载链接】fastexcel Generate and read big Excel files quickly 项目地址: https://gitcode.com/gh_mirrors/fas/fastexcel 面对海量Excel数据处理时,你是否曾因内存溢…...

Pure Live完整指南:3分钟掌握跨平台纯净直播聚合工具

Pure Live完整指南:3分钟掌握跨平台纯净直播聚合工具 【免费下载链接】pure_live A Flutter project can make you watch live with ease. 项目地址: https://gitcode.com/gh_mirrors/pu/pure_live 在当今数字娱乐时代,直播已成为人们日常娱乐的重…...

YOLO格式标注避坑指南:用labelImg时,你的classes.txt文件生成对了吗?

YOLO格式标注避坑指南:labelImg中classes.txt的隐藏逻辑与实战解决方案 在计算机视觉项目的实际开发中,数据标注的质量往往直接决定了模型性能的上限。许多团队花费大量时间标注数据后,却在模型训练阶段遭遇"标签ID不匹配"、"…...

告别音频调试噩梦:AP-0316 DSP语音处理模组全解析与实战选型

在嵌入式产品开发中,语音处理往往是考验硬件工程师耐心的“深水区”。无论是智能门禁的对讲系统,还是会议终端的免提通话,只要涉及到麦克风阵列、回声消除(AEC)和环境降噪(ENC),往往…...

保姆级教程:将训练好的YOLOv5s模型(PyTorch 1.7)打包成安卓/鸿蒙APP

从YOLOv5模型到移动端应用:全流程实战指南 1. 环境准备与模型导出 在开始将YOLOv5模型部署到移动端之前,确保你的开发环境已经准备就绪。对于PyTorch 1.7用户,需要特别注意版本兼容性问题。以下是推荐的环境配置: 操作系统&#x…...

实测好用降AI工具盘点 2026高性价比首选

前言 刚完成毕业答辩的过来人真心建议,别再跟论文AI检测死磕了!我当初对着检测报告上飘红的高风险提示熬了好几个通宵,自己改了三版,导师扫了两眼就说“AI痕迹太重,回去重改”。那段时间我把市面上能找到的降AI工具试了…...

论完善代码版本信息构建AI在精工产业与智能设备短板—东方仙盟

出众的现代 AI时至今日,人工智能发展日新月异。在 UI 设计、网页开发、纯软件系统搭建等不依托实体硬件的领域,AI 表现已然成熟。常规信息化工作,AI 皆可独立完成,效率出众,为日常开发与设计减负良多。精工硬件领域 AI…...

会计学论文降AI工具怎么选?财务审计方向高效降重指南

又到了毕业答辩的关键期,不少会计专业的同学都在发愁论文AI率不达标:财务分析部分的数据解读、审计研究的案例推导用AI辅助写完,一检测全是高风险,改了好几遍还是过不了学校的审核。我身边不少师弟师妹踩过工具的坑,要…...

AD23新手必看:从画完PCB到嘉立创成功下单Gerber,保姆级避坑指南

AD23新手必看:从画完PCB到嘉立创成功下单Gerber,保姆级避坑指南 第一次用Altium Designer 23完成PCB设计后,面对Gerber文件导出和嘉立创下单的复杂流程,很多新手都会感到手足无措。本文将从实际经验出发,带你一步步避开…...

.9017R 座充充电管理 IC

概述 .9017R 是恒流/恒压座充充电管理芯片,主要应用于单节锂电池充电。应用电路无需外接检测电阻,其内部为MOSFET 结构,因此也无需外接反向二极管。 .9017R 在大功率和高环境温度下可以自动调节充电电流以限制芯片温度。它的充电电压固定在4.…...

BMS工程师必看:用南京集澈DVC1006做外部被动均衡,这几点时序和奇偶机制千万别搞错

BMS工程师实战指南:DVC1006被动均衡设计的五大关键陷阱与解决方案 在新能源汽车和储能系统井喷式发展的今天,电池管理系统(BMS)的可靠性直接决定了整个电池包的安全边界。作为国内AFE芯片的标杆产品,南京集澈DVC1006凭借其高集成度与稳定性&…...

影刀RPA 企业级专题篇:自动化系统中的日志平台与链路追踪设计实践

影刀RPA 企业级专题篇:自动化系统中的日志平台与链路追踪设计实践 作者:林焱 很多自动化系统在小规模阶段。 其实不太依赖“日志体系”。 流程跑起来。 失败了看一下控制台。 基本就够用了。 但当系统进入企业级规模以后。 日志会从“辅助功能”…...

软件许可优化,别被销售忽悠了,看看这几家到底谁管用

以前我们公司被Adobe审计过一次,赔了不少钱。之后老板让我专门研究软件许可优化这件事。市面上这几家都聊过、试过,我把真实感受跟你说说。先说你可能不太熟的:(gofarlic)这家是国内武汉的,一开始我也有点怀…...

RuoYi-Vue-Plus项目实战:用WebSocket实现‘服务端通知’功能,我踩了这些坑

RuoYi-Vue-Plus实战:WebSocket服务端通知功能深度解析与避坑指南 在当今企业级应用开发中,实时通信已成为提升用户体验的关键要素。当产品经理提出"后台操作成功时前端实时弹窗提示"的需求时,作为技术负责人的你该如何选择技术方案…...

告别环境报错:用Docker 10分钟在本地/服务器部署YOLOv8完整开发环境

告别环境报错:用Docker 10分钟在本地/服务器部署YOLOv8完整开发环境 在计算机视觉领域,YOLOv8作为当前最先进的目标检测模型之一,其强大的性能和易用性吸引了大量开发者和研究者。然而,传统的手动搭建开发环境过程往往令人望而生畏…...

LuaJIT字节码逆向难题:LJD如何帮你恢复可读源码

LuaJIT字节码逆向难题:LJD如何帮你恢复可读源码 【免费下载链接】luajit-decompiler https://gitlab.com/znixian/luajit-decompiler 项目地址: https://gitcode.com/gh_mirrors/lu/luajit-decompiler 面对编译后的LuaJIT字节码文件,你是否曾困惑…...