eRPC 使用手册
eRPC 是一个高效、可扩展且简单易用的 RPC 框架。
适用于 RPC、微服务、点对点长连接、IM 和游戏等领域。
安装
go get -u -f github.com/henrylee2cn/erpc
import "github.com/henrylee2cn/erpc/v6"
特性
- 使用 peer 为 server 和 client 提供相同的 API 封装
- 提供多层抽象,如:
- peer
- session/socket
- router
- handle/context
- message
- protocol
- codec
- transfer filter
- plugin
- 支持平滑重启和关闭
- 兼容 HTTP 的消息格式:
- 由
Header
和Body
两部分组成 Header
包含与 HTTP header 格式相同的 metadataBody
支持类似 Content Type 的自定义编解码器,已经实现的:- Protobuf
- Thrift
- JSON
- XML
- Form
- Plain
- 支持 push、call-reply 和更多的消息类型
- 由
- 支持自定义消息协议,并提供了一些常见实现:
rawproto
- 默认的高性能二进制协议jsonproto
- JSON 消息协议pbproto
- Ptotobuf 消息协议thriftproto
- Thrift 消息协议httproto
- HTTP 消息协议
- 可优化的高性能传输层
- 使用 Non-block socket 和 I/O 多路复用技术
- 支持设置套接字 I/O 的缓冲区大小
- 支持设置读取消息的大小(如果超过则断开连接)
- 支持控制连接的文件描述符
- 支持多种网络类型:
tcp
tcp4
tcp6
unix
unixpacket
quic
- 其他
- websocket
- evio
- 提供丰富的插件埋点,并已实现:
- auth
- binder
- heartbeat
- ignorecase(service method)
- overloader
- proxy(for unknown service method)
- secure
- 强大灵活的日志系统:
- 详细的日志信息,支持打印输入和输出详细信息
- 支持设置慢操作警报阈值
- 支持自定义实现日志组件
- 客户端会话支持在断开连接后自动重拨
性能测试
自测
- 一个服务端与一个客户端进程,在同一台机器上运行
- CPU: Intel Xeon E312xx (Sandy Bridge) 16 cores 2.53GHz
- Memory: 16G
- OS: Linux 2.6.32-696.16.1.el6.centos.plus.x86_64, CentOS 6.4
- Go: 1.9.2
- 信息大小: 581 bytes
- 信息编码:protobuf
发送 1000000 条信息
erpc
并发client | 平均值(ms) | 中位数(ms) | 最大值(ms) | 最小值(ms) | 吞吐率(TPS) |
---|---|---|---|---|---|
100 | 1 | 0 | 16 | 0 | 75505 |
500 | 9 | 11 | 97 | 0 | 52192 |
1000 | 19 | 24 | 187 | 0 | 50040 |
2000 | 39 | 54 | 409 | 0 | 42551 |
5000 | 96 | 128 | 1148 | 0 | 46367 |
- erpc/socket
并发client | 平均值(ms) | 中位数(ms) | 最大值(ms) | 最小值(ms) | 吞吐率(TPS) |
---|---|---|---|---|---|
100 | 0 | 0 | 14 | 0 | 225682 |
500 | 2 | 1 | 24 | 0 | 212630 |
1000 | 4 | 3 | 51 | 0 | 180733 |
2000 | 8 | 6 | 64 | 0 | 183351 |
5000 | 21 | 18 | 651 | 0 | 133886 |
对比测试
Environment | Throughputs | Mean Latency | P99 Latency |
---|---|---|---|
- CPU耗时火焰图 erpc/socket
- 堆栈信息火焰图 erpc/socket
企业用户
附
eRPC 原名 Teleport,以下是一些相关介绍文章,可供参考: