前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试专题:常见远程调用有哪几种?设计RPC框架需要注意什么?

面试专题:常见远程调用有哪几种?设计RPC框架需要注意什么?

原创
作者头像
小明爱吃火锅
发布2023-12-17 15:57:05
6830
发布2023-12-17 15:57:05
举报
文章被收录于专栏:小明说Java

前言

本文主要来讲解一下什么是远程调用,这在微服务架构中是十分常见的,跨服务进行通信就是远程调用,它允许一个系统(或组件)通过网络调用另一个系统(或组件)的方法或服务。这种调用方式可以跨越不同的机器、网络协议和编程语言,使得分布式系统的设计和实现变得更加灵活和可扩展。在面试中如果问到微服务,服务之间怎么调用,也是必问的。今天就来分析一下这个面试题。常见远程调用有哪几种?远程调用需要注意什么?

常见远程调用

RESTful API

RESTful API是一种基于HTTP协议的远程调用方式。它通过HTTP方法(如GET、POST、PUT、DELETE等)来操作资源(如数据、服务等)。RESTful API具有简单、易于理解、可扩展性强等优点,因此在互联网应用中得到了广泛应用。

典型框架:springcloud的openfeign和ribbon,目前比较流行的远程服务调用,而且直接使用http调用十分简单。

RPC(Remote Procedure Call)

RPC是一种远程过程调用协议,它允许客户端通过网络调用服务器端的方法或服务。RPC通常使用特定的协议(如gRPC、Thrift等)进行通信,支持多种编程语言和平台,它屏蔽底层通信细节,允许客户端直接调用服务器上的函数或服务,并得到返回的结果。RPC在使用形式上像调用本地函数或服务一样去调用远程的函数或服务。RPC的主要优点是简单易用,性能较好,但相对于RESTful API,其可扩展性和灵活性较差。

典型框架:dubbo,比较老的分布式系统可能还是使用dubbo。

消息队列

消息队列是一种异步的远程调用方式。它通过发送和接收消息来实现系统之间的通信。消息队列的主要优点是解耦、可扩展性好、容错能力强,但相对于RPC和RESTful API,其实时性较差。

典型框架:rocketmq,rabbitmq或者kafka

异步响应

典型代表就是WebFlux+Spring Data Reactive,这是目前比较新的的远程调用方式,可以处理一些请求频繁,要求及时响应的业务,如果不了解这个,面试的时候可以不说这一点。WebFlux这个事件驱动框架,是一个基于Reactor模式的Web框架,它支持响应式编程模型,可以实现非阻塞式的异步响应,在WebFlux中,异步响应的实现主要依赖于以下几个核心组件:

WebClient

是一个非阻塞式的HTTP客户端,它可以用于发送HTTP请求并接收响应。WebClient使用响应式流(Reactive Streams)来处理数据,支持异步非阻塞式的数据处理。

Mono和Flux

Mono和Flux是Reactor模式中的两个核心类,它们分别表示单个值和多个值的异步序列。在WebFlux中,Mono和Flux用于处理异步响应的数据流。

函数式编程

WebFlux支持函数式编程模型,可以使用函数式编程的方式来处理异步响应。函数式编程可以帮助我们更好地组织代码,提高代码的可读性和可维护性。

路由器(Router)

路由器是WebFlux中的一个核心组件,它用于处理HTTP请求并返回响应。在WebFlux中,路由器可以使用函数式编程的方式来定义路由规则,从而实现异步响应。

RPC设计

远程调用设计需要考虑的提供方和调用方也可以说消费组和生产者,两者调用里路程如下:

由于调用是通过网络传输,所以需要远程调用,并且需要传输数据,需要定义数据格式,调用方也是需要通过远程调用获取数据,并且解析数据格式,得到最终结果。

提供方

提供方负责实现被调用的服务或方法。在设计提供方时,需要考虑以下几点:

  • 服务或方法的定义:明确服务或方法的输入参数、输出结果、异常处理等。
  • 接口设计:选择合适的接口风格(如RESTful、RPC等),并定义清晰的接口规范。
  • 性能优化:考虑如何提高服务的响应速度、降低延迟、提高吞吐量等。
  • 容错处理:设计合适的容错策略,如重试、熔断、降级等。

调用方

调用方负责发起远程调用请求。在设计调用方时,需要考虑以下几点:

  • 调用方式:根据实际需求选择合适的远程调用方式(如RESTful API、RPC等)。
  • 错误处理:如何处理远程调用过程中可能出现的异常和错误。
  • 性能监控:如何监控远程调用的性能指标,如响应时间、成功率等。
  • 负载均衡:如何在多个提供方之间分配请求负载。

总结

远程调用是分布式系统中的一种常见通信方式。在设计远程调用时,需要考虑提供方和调用方的实现,以及性能、容错、可扩展性等因素。不同的远程调用方式有不同的优缺点,需要根据实际需求进行选择。在面试的时候,回答这个问题,尽量往自己熟悉的框架说,比如熟悉springcloud,可以多说一下springcloud的服务调用原理,避免给自己采坑。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 常见远程调用
    • RESTful API
      • RPC(Remote Procedure Call)
        • 消息队列
          • 异步响应
          • RPC设计
          • 总结
          相关产品与服务
          Serverless HTTP 服务
          Serverless HTTP 服务基于腾讯云 API 网关 和 Web Cloud Function(以下简称“Web Function”)建站云函数(云函数的一种类型)的产品能力,可以支持各种类型的 HTTP 服务开发,实现了 Serverless 与 Web 服务最优雅的结合。用户可以快速构建 Web 原生框架,把本地的 Express、Koa、Nextjs、Nuxtjs 等框架项目快速迁移到云端,同时也支持 Wordpress、Discuz Q 等现有应用模版一键快速创建。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档