RPC
只是描绘了Client
与Server
之间的点对点调用流程,包括stub
、通信、RPC
消息解析等部分,在实际应用中,还需要考虑服务的高可用、负载均衡等问题,所以产品级的RPC
框架除了点对点的RPC
协议的具体实现外,还应包括服务的发现与注销、提供服务的多台Server
的负载均衡、服务的高可用等更多的功能。目前的RPC
框架大致有两种不同的侧重方向,一种偏重于服务治理,另一种偏重于跨语言调用。
服务治理型的RPC
框架有Dubbo
、DubboX
、Motan
等,这类的RPC
框架的特点是功能丰富,提供高性能的远程调用以及服务发现及治理功能,适用于大型服务的微服务化拆分以及管理,对于特定语言(如Java
)的项目可以十分友好的透明化接入。但缺点是语言耦合度较高,跨语言支持难度较大。
跨语言调用型的RPC
框架有Thrift
、gRPC
、Hessian
、Hprose
等,这一类的RPC
框架重点关注于服务的跨语言调用,能够支持大部分的语言进行语言无关的调用,非常适合于为不同语言提供通用远程服务的场景。但这类框架没有服务发现相关机制,实际使用时一般需要代理层进行请求转发和负载均衡策略控制。
The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.
Asynchronous RPC/REST library built on top of Java 8, Netty, HTTP/2, Thrift and gRPC
A high performance, open-source universal RPC framework