前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tRPC初探,开源RPC框架新成员

tRPC初探,开源RPC框架新成员

原创
作者头像
海风极客
发布2023-12-03 18:57:36
1.8K2
发布2023-12-03 18:57:36
举报
文章被收录于专栏:扯编程的淡扯编程的淡

在最近的技术探索中,我触到了一个全新的开源RPC框架——tRPC。这个新框架给我留下了深刻的印象,我想借此机会分享一下我的初体验和一些观察。

什么是tRPC?

tRPC是一个高性能、轻量级、支持多语言的开源RPC框架,基于插件化理念设计,整体特点:

  • 易用性:tRPC提供了简洁明了的API和文档,使得开发者可以快速地上手并构建复杂的分布式系统。用户基于框架进行服务开发简单方便;
  • 高性能:tRPC使用了高效的序列化和反序列化机制,以及优化的网络通信协议,使得它在处理大量请求时能够保持出色的性能。框架具备高性能,能适用互联网海量访问场景。
  • 插件化:框架在架构设计和具体实现上进行分层和模块化,各个核心模块可拔插,并能够独立演进
  • 可扩展:tRPC允许开发者根据自己的需求进行定制和扩展,包括添加新的传输协议、序列化机制等。
  • 安全性:tRPC内置了丰富的安全特性,如身份验证、访问控制、加密等,以保障分布式系统的安全。

具体可以查看官网(https://trpc.group/)和开源仓库(https://github.com/trpc-group)了解

小试tRPC

首先我们先clone一下GitHub仓库中的trpc-go:git clone https://github.com/trpc-group/trpc-go,找到example目录下的helloworld目录:

按照文档我们可以先运行一下:

server端

代码语言:shell
复制
cd trpc-go\examples\helloworld\server
go run main.go -conf ./trpc_go.yaml

client端

代码语言:shell
复制
cd trpc-go\examples\helloworld\client
go run main.go

很明显我们发现tRPC服务端的运行是需要配置文件的,这个我们放在下面再讲,接下来我们仿照helloworld程序手动的了解下tRPC一个接口的创建和调用过程:

第一步:安装tRPC中对于protobuf文件的编译工具

代码语言:shell
复制
go install trpc.group/trpc-go/trpc-cmdline/trpc@latest

第二步:在protobuf文件中增加接口定义

代码语言:text
复制
syntax = "proto3";

package trpc.helloworld;
option go_package="trpc.group/trpc-go/trpc-go/examples/helloworld/pb";

service Greeter {
  rpc Hello (HelloRequest) returns (HelloReply) {}
  rpc Hi (HiRequest) returns (HiResponse) {}
}

message HelloRequest {
  string msg = 1;
}

message HelloReply {
  string msg = 1;
}

message HiRequest {
  string name = 1;
}

message HiResponse {
  string msg = 1;
}

第三步:编译protobuf文件(参考Makefile中的命令)

代码语言:shell
复制
trpc create -p helloworld.proto --rpconly --nogomod --mock=false 

第四步:编写RPC服务端接口实现

代码语言:go
复制
func main() {
	s := trpc.NewServer()
	pb.RegisterGreeterService(s, &Greeter{})
	if err := s.Serve(); err != nil {
		log.Error(err)
	}
}

type Greeter struct{}

func (g Greeter) Hello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
	log.Infof("got hello request: %s", req.Msg)
	return &pb.HelloReply{Msg: "Hello " + req.Msg + "!"}, nil
}

func (g Greeter) Hi(ctx context.Context, req *pb.HiRequest) (*pb.HiResponse, error) {
	log.Infof("got hi request: %s", req.Name)
	return &pb.HiResponse{Msg: "Hi " + req.GetName() + "!"}, nil
}

第五步:RPC客户端调用接口

代码语言:go
复制
func main() {
	c := pb.NewGreeterClientProxy(client.WithTarget("ip://127.0.0.1:8000"))
	rsp, err := c.Hi(context.Background(), &pb.HiRequest{Name: "海风极客"})
	if err != nil {
		log.Error(err)
	}
	log.Info(rsp.Msg)
}

最后依次运行服务端和客户端代码就可以了

与gRPC相比有什么不同

因为在使用tRPC之前,最熟悉的还是gRPC,相比gRPC,我觉得tRPC在以下几个方面与之不同(也是刚刚了解,先分享主要的几个):

(1)首先,名字不同

一个叫gRPC,由Google开源,一个叫tRPC,由腾讯开源

(2)tRPC更倾向于插件化

阅读源码后我们大概可以得出结论,虽然tRPC和gRPC都支持拦截器,但是tRPC能够通过抽象让用户自定义更多的插件并注入到服务中,增加了灵活性和可扩展性

(3)tRPC支持配置文件

配置文件应该是tRPC与gRPC最大的不同之一,当然通过简单的编码后两者都可以支持配置文件,但是tRPC作为原生就支持配置文件的RPC框架,可以用配置文件的配置内容来替代很多代码逻辑。其中配置文件最大的一个优势就是修改配置时无需重新编译源代码,节省了编译时间,但是如果对配置文件了解的不够全面,也可能是一个隐患,因此是需要一些学习理解的时间成本的,反正各有利弊吧。

小总结

通过对tRPC的初步探索,我对这个开源RPC框架留下了深刻的印象。它的高性能、易用性、可扩展性和安全性使其成为构建分布式应用程序的理想选择。如果你正在寻找一个轻量级且功能强大的RPC框架,那么我强烈推荐你尝试一下tRPC,相信它会为你的项目带来意想不到的收获。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是tRPC?
  • 小试tRPC
  • 与gRPC相比有什么不同
  • 小总结
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com