MST

星途 面试题库

面试题:微服务架构中服务间通信方式及适用场景

在微服务架构里,常见的服务间通信方式有哪些?分别阐述它们的特点以及在何种业务场景下使用更为合适。
30.4万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

RESTful API

  • 特点
    • 简单易理解:基于HTTP协议,与Web的交互模式类似,开发人员易于上手和理解,具有良好的可读性和可维护性。
    • 通用性强:几乎所有编程语言都有支持HTTP请求的库,便于不同技术栈的微服务之间进行通信。
    • 无状态:服务端不保存客户端的状态信息,每次请求都是独立的,这使得系统更容易实现扩展和容错。
  • 适用场景:适用于大多数对性能要求不是极高,但对通用性、可读性和可维护性要求较高的场景。例如,面向外部合作伙伴提供的开放接口,前端应用与后端微服务之间的通信等。

RPC(Remote Procedure Call)

  • 特点
    • 高效:通常采用自定义协议,序列化和反序列化机制针对性强,能有效减少数据传输量,提高通信效率。
    • 强类型:在调用时需要明确指定参数和返回值的类型,这有助于在开发阶段发现错误,提高代码的稳定性。
    • 紧密耦合:客户端和服务端需要共享相同的接口定义,对接口变动敏感,一旦接口改变,双方都需要进行相应调整。
  • 适用场景:适用于内部微服务之间的高频、高性能通信场景,例如对性能要求高的核心业务逻辑模块之间的调用,像电商系统中订单服务与库存服务之间的频繁交互。

消息队列(Message Queue)

  • 特点
    • 异步解耦:发送方将消息发送到队列后无需等待接收方处理,可继续执行后续操作,实现了服务间的异步通信和解耦,提高系统的整体吞吐量和响应速度。
    • 可靠投递:消息队列通常具备消息持久化机制,保证消息在传递过程中不会丢失,即使部分服务出现故障也能确保消息最终被处理。
    • 流量削峰:可以在高并发情况下缓存消息,避免下游服务因瞬间高流量而崩溃。
  • 适用场景:适用于对实时性要求不高,但需要处理高并发、异步任务的场景。比如,用户注册成功后发送邮件、短信通知,或者在电商系统中订单生成后异步更新库存、记录日志等操作。

gRPC

  • 特点
    • 高性能:基于HTTP/2协议,支持双向流、头部压缩、多路复用等特性,能有效减少网络开销,提高通信性能。
    • 跨语言支持:支持多种编程语言,通过Protobuf定义接口,使得不同语言开发的微服务之间可以方便地进行通信。
    • 强类型定义:使用Protobuf进行接口定义,严格定义了服务的请求和响应消息结构,增强了代码的规范性和稳定性。
  • 适用场景:适用于对性能要求极高、需要跨语言通信的场景,特别是在移动应用与后端服务、物联网设备与后端服务之间的通信,如实时性要求高的音视频流传输服务等。