RPCX的特点
rpcx使用Go实现,适合使用Go语言实现RPC的功能。
- 基于net/rpc,可以将net/rpc实现的RPC项目轻松的转换为分布式的RPC
- 插件式设计,可以配置所需的插件,比如服务发现、日志、统计分析等
- 基于TCP长连接,只需很小的额外的消息头
- 支持多种编解码协议,如Gob、Json、MessagePack、gencode、ProtoBuf等
- 服务发现:服务发布、订阅、通知等,支持多种发现方式如ZooKeeper、Etcd等
- 高可用策略:失败重试(Failover)、快速失败(Failfast)
- 负载均衡:支持随机请求、轮询、低并发优先、一致性 Hash等
- 规模可扩展,可以根据性能的需求增减服务器
- 其他:调用统计、访问日志等
RPCX架构
rpcx中有服务提供者 RPC Server,服务调用者 RPC Client 和服务注册中心 Registry 三个角色。
- Server 向 Registry 注册服务,并向注册中心发送心跳汇报状态(基于不同的registry有不同的实现)。
- Client 需要向注册中心查询 RPC 服务者列表,Client 根据 Registry 返回的服务者列表,选取其中一个 Sever
进行 RPC 调用。 - 当 Server 发生宕机时,Registry 会监测到服务者不可用(zookeeper session机制或者手工心跳),Client
感知后会对本地的服务列表作相应调整。client可能被动感知(zookeeper)或者主动定时拉取。 - 可选地,Server可以定期向Registry汇报调用统计信息,Client可以根据调用次数选择压力最小的Server