每日一库推荐-arpc
lesismal opened this issue · 8 comments
lesismal commented
一个简单易用、高性能、支持更多姿势的RPC库
网络交互的几种模式
交互方式 | 方向 | 完整流程 |
---|---|---|
call | c -> s s -> c |
request and response |
notify | c -> s s -> c |
request without response |
传统RPC的缺点
- call 只支持 c->s,不支持 s->c,不支持notify
- 函数调用的写法,函数返回即结束调用,不支持函数体外的同步/异步回包
- 多数rpc框架绑定了序列化
ARPC特点
- 支持c/s双向call、notify
- 像使用http router一样,不采用函数调用的写法,不依赖反射
- 提供类似gin的ctx.Bind方法,方便string、[]byte、struct等类型绑定
- 支持异步回包,handler函数返回不代表call处理结束,可以handler返回后再回包(同步异步皆可)
- 支持自定制序列化反序列化(pb,msgpack各种,只要你喜欢,随意扩展),为了减少依赖目前默认用的标准库json
- 支持自定制协议(tcp,unixsock,kcp,quic...)
- 支持应用层定制logger
- 支持自定制新连接、连接断开、发送队列满的handler
- 支持contex,也支持直接使用timeout参数、非多步流程的调用等待写起来更方便
- 支持client pool,因为支持异步并发调用回包,pool实现采用简单的轮询,能够满足性能需要
- 支持用户自己定制rpc协议
- 支持中间件
- 支持发布订阅
ARPC性能
- 简单的echo压测
rpc | 协议/网络 | 序列化 | 配置 | 连接数 | 每个连接并发协程数 | qps |
---|---|---|---|---|---|---|
arpc | tcp/localhost | encoding/json | os: VMWare Ubuntu 18.04 cpu: AMD 3500U 4c8t mem: 2G |
8 | 10 | 8-10万 |
grpc | http2/localhost | protobuf | os: VMWare Ubuntu 18.04 cpu: AMD 3500U 4c8t mem: 2G |
8 | 10 | 2-3万 |
- arpc性能基本与当前其他第一梯队性能的golang rpc处于同样水平范围、甚至更高
- grpc由于使用了http2,性能浪费是不可避免的,这里对比qps只是为了给出个参考系
- 配置较低,更多配置、协议、序列化测试欢迎各位道友自行进行,压测代码: server, client
示例工程
- 用arpc作为基础设施实现了个发布订阅服务:achan,示例请参考README
darjun commented
👍👍👍
lesismal commented
已加入 awesome-go
lesismal commented
https://github.com/rpcx-ecosystem/rpcx-benchmark 上的go的rpc对比了下,我这里测arpc应该是性能最好的
lesismal commented
新增支持发布订阅 pubsub-examples
lesismal commented
新增支持中间件 middleware
也增加了message扩展的中间件机制,方便应用层扩展诸如压缩、链路追踪等
darjun commented
todo-list前面堆积了很多,最近也比较忙,要晚点来学习哦
lesismal commented
todo-list前面堆积了很多,最近也比较忙,要晚点来学习哦
谢谢,我逐渐增加一些功能支持更新过来
lesismal commented
新增了 websocket js 的支持,web/h5 上面普通的推送服务、游戏等长连接业务都能很方便实现了