一、开源RPC框架有哪些?
1、跟语言平台绑定的开源RPC框架
Dubbo:国内最早开源的RPC框架,由阿里巴巴公司开发并于2011年末对外开源,仅支持Java语言。
Motan:微博内部使用的RPC框架,于2016年对外开源,仅支持Java语言。
Tars:腾讯内部使用的RPC框架,于2017年对外开源,仅支持C++语言。
Spring Cloud:国外Pivotal公司2014年对外开源的RPC框架,仅支持Java语言。
2、跨语言平台的开源RPC框架
gRPC:Google于2015年对外开源的跨语言RPC框架,支持多种语言。
Thrift:最初是由Facebook开发的内部系统跨语言的RPC框架,2007年贡献给了Apache基金,成为Apache开源项目之一,支持多种语言。
二、跟语言平台绑定的开源RPC框架 – Dubbo
1、Dubbo的架构主要包含四个角色
服务提供者(Provider):提供服务的实体,通常是一个具体的业务服务实现类。
服务消费者(Consumer):调用远程服务的实体,通常是一个具体的业务服务调用方。
注册中心(Registry):负责服务的注册与发现,通常是一个高可用的分布式服务注册中心。
监控中心(Monitor):收集服务调用的统计信息,通常用于监控服务调用的性能、质量等。
在这里插入图片描述
具体的交互流程是Consumer一端通过注册中心获取到Provider节点后,通过Dubbo的客户端SDK与Provider建立连接,并发起调用。Provider一端通过Dubbo的服务端SDK接收到Consumer的请求,处理后再把结果返回给Consumer。

可以看出服务消费者和服务提供者都需要引入Dubbo的SDK才来完成RPC调用,因为Dubbo本身是采用Java语言实现的,所以要求服务消费者和服务提供者也都必须采用Java语言实现才可以应用。

2、Dubbo的调用框架是如何实现的?
Dubbo的调用框架的实现主要基于以下几个核心组件和服务治理策略:

服务注册与发现:Dubbo通过注册中心进行服务的注册与发现。服务提供者在启动时,将自己的元数据(如服务IP、Port等)注册到注册中心。服务消费者在启动时,向注册中心订阅服务提供者的元数据。注册中心将服务提供者地址列表提供给消费者,并在数据变更时推送给订阅的消费者。
RPC调用:在获取服务提供者的元数据后,服务消费者可以发起RPC调用。Dubbo的RPC层负责建立网络通信连接,实现服务的远程调用。同时,RPC层还支持负载均衡、容灾和集群功能,以确保调用的稳定性和性能。
服务监控:在RPC调用前后,Dubbo会向监控中心上报统计信息,如并发数、调用接口等。这些信息可以用于服务的性能监控和调优。
此外,Dubbo的实现还采用了分层的思想,每层负责不同的职责,使得用户可以基于Dubbo框架进行二次开发,扩展其功能。同时,Dubbo还支持与Spring框架的无缝集成,使得用户可以更方便地将其应用于实际的业务场景中。
三、如何选择?
SpringCloud提供了服务注册组件、配置中心组件、负载均衡组件、断路器组件、分布式消息追踪组件等一系列组件;
Dubbo只提供了最基础的RPC框架的功能,其他微服务组件都需要自己去实现。
Spring Cloud的RPC通信采用了HTTP协议,相比Dubbo所采用的私有协议来说,在高并发的通信场景下,性能相对要差一些,所以对性能有苛刻要求的情况下,可以考虑Dubbo。
七、总结
以上就是我对几种使用最广泛的开源RPC框架的选型建议,也是基于它们目前现状所作出的判断,从长远来看,支持多语言是RPC框架未来的发展趋势。正是基于此判断,各个RPC框架都提供了Sidecar组件来支持多语言平台之间的RPC调用。

Dubbo在去年年底又重启了维护,并且宣称要引入Sidecar组件来构建Dubbo Mesh提供多语言支持。
Motan也在去年对外开源了其内部的Sidecar组件:Motan-go,目前支持PHP、Java语言之间的相互调用。
Spring Cloud也提供了Sidecar组件spring-cloud-netflix-sideca,可以让其他语言也可以使用Spring Cloud的组件。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐