首页 > 数据库 > 数据库开发技术 > 分布式系统架构设计之 RPC:远程服务调用概述
从本文开始进入分布式系统架构中具体的技术域,我们首先来看这位四十高龄的老大哥:远程服务调用。
习惯了用好看的字来作为图片,所以在 RPC 这里也写了一副,不过因为字多,整了一个竖版的~

Remote Procedure Call,RPC,远程服务调用,是在周志明《凤凰架构:构建可靠的大型分布式系统》一书中第二部分架构师视角的第一个介绍的主题,老周说:远程服务是将计算机的工作范围从单机扩展到网络,从本地延伸至远程,这也是构建分布式系统的首要基础。但远程服务也不仅仅是为了分布式系统服务的,在网络互联的时代,浏览器、移动设备、桌面应用、服务端程序、可穿戴设备等,都存在远程服务调用的需求。
不管是理论层面,抑或者是各种架构书籍中,还是在我们实际工作中,RPC 一直都是非常核心重要的概念之一,必须掌握,否则都不能称作你懂分布式系统。
远程服务调用是指在分布式系统中,通过网络实现不同服务之间的通信和交互。在这种场景下,服务之间可能运行在不同的服务器上,甚至位于不同的地理位置。远程服务调用允许应用程序的不同部分能够协调工作,实现分布式计算和服务化架构。

通过远程服务调用,不同的服务可以通过良好定义的接口协同工作,实现系统的分布式、高可用和高扩展性,这也是现在系统架构中一种常见的基础模式,尤其是在微服务的架构中。
远程服务调用具备以下 关键特征:
01
分布式系统
远程服务调用一般发生在分布式系统中,其中系统的组件分布在不同的计算节点上,尤其是微服务浪潮下的分布式系统中
02
网络通信
服务之间通过网络进行通信,这会涉及到网络协议,比如 HTTP/HTTPS、TCP/IP 以及其他专用的协议
03
同步/异步调用
调用方式有同步/异步,同步指调用方需要等待提供方返回结果,异步是不用等待,可以继续其他操作,服务提供方完成处理后通过约定的方式返回给调用方
04
协议和数据格式
远程服务调用的双方需要使用一种约定好的协议和数据格式,确保服务之间可以互相理解和解析对方的请求和响应
05
服务注册和发现
在分布式系统中,服务的注册和发现机制允许服务能够动态地注册并且被其他服务发现和调用
06
远程调用框架
使用远程调用框架来实现远程服务调用,比如 gRPC、Dubbo,框架本身提供了服务注册、序列化、反序列化的功能
07
安全性
在远程服务调用场景中,安全性是必须考虑的重要因素,一般会涉及到身份认证、数据加密、隐私合规等机制
08
性能优化
远程服务调用涉及网络通信,因此性能成了一个关键问题,需要采用一些性能优化的策略,比如缓存、负载均衡等
远程服务调用以一个 40 岁高龄的技术体系,依旧在当今时代非常火热,这是有它 独有优势 来决定的。
01 分布式架构
基于远程服务调用,可以允许系统的不同组件分别部署在不同的计算节点上,来实现分布式的架构模式,有助于提高系统的可伸缩性、可用性和容错性等。
02 模块化设计
基于远程服务调用,不同的组件之间可以通过定义的接口进行通信,实现模块化设计,每个模块可以独立开发、测试和部署,有助于降低系统的复杂度。
03 松耦合
基于远程服务调用,可以实现服务之间的松耦合,彼此不需要知道对方的实现细节,只需要知道约定的接口和协议,使得系统更容易扩展和维护。
04 技术异构性
基于远程服务调用,在大型系统中,不同的服务可以使用不同的技术栈和编程语言,彼此在技术上独立,只通过定义的接口进行通信。
05 代码复用
基于远程服务调用,有助于代码的复用,一个服务的功能可以通过调用其他服务来实现,不用在每个服务中重复实现相同的功能。
06 系统扩展
基于远程服务调用,在当系统需要扩展时,可以通过引入新服务的方式加入到系统中,不用修改现有的服务,使得系统更容易进行水平扩展。
07 服务注册发现
基于远程服务调用,联合框架来实现服务的动态注册和发现,对复杂动态的业务系统是非常有帮助的。
08 异构环境
基于远程服务调用,不同的服务可以让不同的组织团队来开发和维护,彼此间不需要深入了解对方的实现细节。
虽然远程服务调用现在依旧火热,但是它依旧存在了很多固有的 挑战:

01 网络延迟
因为远程服务调用涉及到网络通信,会引入网络延迟,影响系统性能和响应时间,尤其是针对节点在国内,访问在国外的这种跨地域场景,如果没有一些响应的应对策略,会更加明显。

02 故障容忍
因为使用网络通信,网络的不确定性、服务的不可用性、超时等都可能会导致调用失败,在使用远程服务调用的系统中,针对服务调用要同步考虑故障容忍应对机制。

03 数据一致性
数据一致性是分布式系统环境中一直面对的挑战,也是一个复杂的问题,需要同步考虑分布式事务和一致性的协议。

04 安全性
因为远程,彼此不在一个系统中,在发生调用的时候,需要考虑数据在网络传输中的安全性,而服务的安全、鉴权等安全性应对策略同样也是一个相对比较复杂的问题。

05 版本管理
服务的升级和版本管理不当可能会导致服务之间的不兼容,在使用远程服务调用场景中需要慎重处理服务的版本管理。

06 复杂性管理
在大型系统中,服务之间的调用关系会变得非常复杂,需要对服务进行有效的管理和监控。

07 服务注册发现
实现服务注册发现是需要涉及到一些复杂的机制,如何有效的管理服务的注册发现一直是一个挑战。

08 过度使用
远程服务调用不具备放之四海皆准的原则,在一些不适合的场景使用,可能会引入不必要的复杂性。
原文作者:灸哥漫谈;如有侵权,请联系管理员删除。