一、介绍RPC框架
RPC框架全称为Remote Procedure Call(远程过程调用),是指为了完成分布式系统之间的远程调用而设计的一种通信框架。在分布式系统中,不同进程或不同服务器之间需要相互通信,但进程/服务器之间的通信常常涉及到跨越网络较长的距离,此时HTTP等协议的开销较大,并且编写代码繁琐,因此RPC框架应运而生。
RPC框架的作用是:将远程调用由发起调用的进程/服务器转化为本地调用,使得分布式系统的调用像本地方法一样简单。RPC框架的基本实现方法是:客户端调用本地对象,然后客户端的stub(存根)程序再将参数打包成适合远程传输的格式,由一个通信模块(调用另一台机器的通信模块)负责将这个请求发送给远程服务器。远程服务器上的另一端Stub收到了请求,然后解包参数,调用本地的目标对象,然后将执行结果封装成适合远程传输的格式再由通信模块发送给请求端,请求端Stub接收到返回结果后,再解包,最后将结果返回给调用者。
二、分布式RPC框架的原理
分布式RPC框架一般由多个部分组成。以下是分布式RPC框架的常见组件:
- 服务接口定义
- 服务类实现
- 服务注册与发现中心
- 服务序列化
- 服务远程调用
- 服务负载均衡
其中,服务接口定义提供了服务协议,服务类实现包含了服务的具体实现逻辑,服务注册与发现中心是一个用来协调服务提供者和服务消费者之间的组件,服务序列化是将传输对象序列化,方便在网络上传输;服务远程调用是完成消费者和提供者之间的网络调用,服务负载均衡是提供负载均衡的方案。
三、公司常用分布式RPC框架及其原理
常见的分布式RPC框架有dubbo、thrift、gRPC等。下面分别介绍dubbo和gRPC的原理:
- Dubbo
Dubbo是一个在分布式环境下提供高性能、透明化的RPC服务框架。其核心要点包括:面向接口代理、智能容错和负载均衡、服务自注册和发现、可扩展性、动态路由、可视化服务治理、实时监控等。Dubbo结构简单,其主体结构包括provider、consumer、registry等组件,通过这些组件演化推出服务框架的多种特性。在框架实现上,采用类似spring框架的扩展点方式,可以自己扩展框架的任意部分,实现自定义的扩展点。Dubbo支持多协议,支持多种语言的调用和注册,目前常见的Java Spring开发中使用最多。
- gRPC
gRPC是Google推出的RPC框架,支持多种语言,采用了protobuf作为数据序列化和反序列化机制,利用HTTP/2协议传输。gRPC利用protobuf能够大幅度减少传输数据的大小,同时也大幅度提高了性能。gRPC的主要代码库由四部分组成:一个用protocol buffers定义服务的接口,一个服务器端的stub用来实现这个接口并运行在服务器端,一个客户端的stub用来调用远程服务并处理返回结果,最后一个是grpc-core,它是一个基础库,是gRPC所有RPC相关功能的核心实现。
四、总结
在分布式RPC架构中,它不仅需要实现网络通信、序列化、反序列化等一系列核心的技术,同时还需要考虑传输数据的安全性和稳定性,负载均衡、高可用性、服务治理等一系列问题。因此,选择一个合适的RPC框架是至关重要的。而Dubbo和gRPC是两种状态流行和成熟的RPC框架,它们具有良好的性能、稳定性和可扩展性,在实际开发中应尽可能充分学习和运用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:公司一般使用的分布式RPC框架及其原理面试 - Python技术站