一. 什么是 RPCX
RPCX 是一个类似于阿里巴巴 Dubbo 和微博 Motan 的分布式的基于Go语言的 RPC 框架,其支持 Zookepper、Etcd、Consul 等多种服务发现方式,多种服务路由方式, 是目前性能最好的 RPC 框架之一。RPCX官方文档
RPC 全称为 Remote Procedure Call——远程过程调用。
二. 正常的服务调用过程
如下图所示:
具体为:
- 客户端 Client 发起服务调用请求;
- Client Stub 可以理解成一个代理,会将调用方法、参数按照一定格式进行封装,通过服务提供的地址,发起网络请求;
- 消息通过网络传输到服务端;
- Server Stub 接受来自 Socket 的消息;
- Server Stub 将消息进行解包、告诉服务端调用的哪个服务,参数是什么;
- 结果返回给 Server Stub;
- Server Stub 把结果进行打包交给 Socket;
- Socket 通过网络传输消息;
- Client Slub 从 Socket 拿到消息;
- Client Stub 解包消息将结果返回给 Client。
一个 RPC 框架就是把步骤 2 至步骤 9 都封装起来。
三. 为什么需要 RPC
- RPC 可以用 HTTP 协议实现,并且用 HTTP 是建立在 TCP 之上最广泛使用的 RPC,相比于 HTTP 协议,RPC 采用二进制字节码传输,更加高效也更加安全。
- 微服务是一种趋势,服务之间通信目前有两种方式,RPC 就是其中一种,RPC 可以保证不同服务之间的互相调用,即使是跨语言跨平台也不是问题,让构建分布式系统更加容易。
- RPC 框架都会有服务降级、流量控制的功能,保证服务的高可用。
四. RPCX 的特点
- 基于 Net/RPC,可以将 Net/RPC 实现的 RPC 项目轻松的转换为分布式的 RPC。
- 插件式设计,可以配置所需的插件,比如服务发现、日志、统计分析等。
- 基于 TCP 长连接,只需很小的额外的消息头。
- 支持多种编解码协议,如 Gob、Json、MessagePack、Gencode、ProtoBuf 等。
- 服务发现:服务发布、订阅、通知等,支持多种发现方式如 ZooKeeper、Etcd 等。
- 高可用策略:支持四种调用失败模式:Failfast、Failover、Failtry、Failbackup。
- 负载均衡:随机选取、顺序选取、一致性哈希、基于权重的选取、基于网络质量的选取、就近选取等多种负载均衡方式。
- 规模可扩展,可以根据性能的需求增减服务器。
- 其他:调用统计、访问日志等。