rpcx是一个类似阿里巴巴 Dubbo 和微博 Motan 的分布式的RPC服务框架,基于Golang net/rpc实现。国外的互联网企业也有非常出名的的RPC框架如thrift、finagle。
[谈起分布式的RPC框架,比较出名的是阿里巴巴的dubbo,包括由当当网维护的dubbox。
不知道dubbo在阿里的内部竞争中败给了HSF,还是阿里有意将其闭源了,官方的代码使用的spring还停留在2.5.6.SEC03的版本,dubbox的spring也只升级到3.2.9.RELEASE。
不管怎样,dubbo还是在电商企业得到广泛的应用,京东也有部分在使用dubbo开发。]
一个正常的RPC过程可以分成下面几步:
1)client调用client stub,这是一次本地过程调用
2)client stub将参数打包成一个消息,然后发送这个消息。打包过程也叫做 marshalling
3)client所在的系统将消息发送给server
4)server的的系统将收到的包传给server stub
5)server stub解包得到参数。 解包也被称作 unmarshalling
6)最后server stub调用服务过程. 返回结果按照相反的步骤传给client
服务治理型的 RPC 框架有 Dubbo、DubboX、Motan 等,这类的 RPC 框架的特点是功能丰富,提供高性能的远程调用以及服务发现及治理功能,适用于大型服务的微服务化拆分以及管理,对于特定语言(Java)的项目可以十分友好的透明化接入。但缺点是语言耦合度较高,跨语言支持难度较大。
跨语言调用型的 RPC 框架有 Thrift、gRPC、Hessian、Hprose 等,这一类的 RPC 框架重点关注于服务的跨语言调用,能够支持大部分的语言进行语言无关的调用,非常适合于为不同语言提供通用远程服务的场景。但这类框架没有服务发现相关机制,实际使用时一般需要代理层进行请求转发和负载均衡策略控制。
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
当前rpcx支持zookeeper, etcd等注册中心,Consul注册中心正在开发中。
rpcx基于Go net/rpc的底层实现, Client和Server之间通讯是通过TCP进行通讯的,它们之间通过Client发送Request,Server返回Response实现。
Request和Response消息的格式都是Header+Body
的格式。Header和Body具体的格式根据编码方式的不同而不同,可以是二进制,也可以是结构化数据如JSON。
相关推荐
【标题】:RPCX生态:RPCX Gateway 【描述】:RPCX Gateway 是一个开源项目,它是RPCX生态系统的一部分,其主要功能是提供一个HTTP到RPCX服务的转换层,使得用户可以通过HTTP协议来调用原本基于RPCX的远程过程调用...
一个rpcx的演示程序 - 电子商城
**Go-rpcx:分布式RPC服务框架的崭新选择** Go-rpcx 是一个高度可扩展的、功能丰富的分布式RPC(远程过程调用)服务框架,它的设计灵感来源于阿里巴巴的Dubbo和微博的Motan。这个框架是用Golang语言构建的,利用了...
rpcx-java的无需维护:目前没有资源维护这个项目。欢迎有时间的开发者接手。例子假设您已经启动了Go rpcx服务器: package mainimport ("context""flag""github.com/smallnest/rpcx/server")var (addr = flag . ...
官方网站: :跨语言您可以使用Go之外的其他编程语言来访问rpcx服务。 rpcx-gateway :您可以使用任何编程语言编写客户端,以通过调用rpcx服务http invoke :您可以使用相同的http请求访问rpcx网关Java客户端:您...
rpcx网关 是服务的http网关。 是一个快速的rpc框架。 更快,更多功能。 您可以使用Java,Python,C#,Node.js,Php,C \ C ++,Rust等任何编程语言编写rpc http客户端。 查看 部署模型 有两种部署模式:网关和...
《深入剖析开源项目smallnest-rpcx:分布式可插拔RPC框架详解》 在当今的IT行业中,远程过程调用(RPC)框架扮演着至关重要的角色,它使得服务间的通信变得简单而高效。smallnest-rpcx是一个由smallnest开发并开源...
rpcx-gateway :您可以使用任何编程语言编写客户端,以通过调用rpcx服务 http invoke :您可以使用相同的http请求访问rpcx网关 Java服务/客户端:您可以使用通过原始协议实现/访问rpcx服务。 如果您可以编写Go方法...
读书笔记:rpcx微服务实践
最初存在的多款流行的微服务框架,包括Montan,rpcx,gRpc,Dubbo等Odin框架是好未来在使用rpcx框架过程中不断完善,改进的,目前已在好未来多个部门使用,承载大量核心服务,经历了暑期大班直播高峰考验2019年开始...