沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • API网关

  • RPC

    • 讲讲五种通信方式的区别
      • 引言
      • 1. HTTP/HTTPS
        • 特点
        • 适用场景
        • 优点
        • 缺点
        • 选型建议
      • 2. RPC(如 Dubbo、gRPC)
        • 特点
        • 适用场景
        • 优点
        • 缺点
        • 选型建议
      • 3. SDK(如 Maven)
        • 特点
        • 适用场景
        • 优点
        • 缺点
        • 选型建议
      • 4. WebSocket
        • 特点
        • 适用场景
        • 优点
        • 缺点
        • 选型建议
      • 5. MQ(如 RocketMQ、Kafka)
        • 特点
        • 适用场景
        • 优点
        • 缺点
        • 选型建议
      • 综合决策树
      • 总结
        • 选型建议
        • 混合架构示例(电商系统)
  • 消息队列

  • Spring Cloud

  • 分布式事务

  • 云存储

  • 搜索引擎

  • 多媒体框架

  • 虚拟机

  • 微服务
  • RPC
沉梦听雨
2025-02-25
目录

讲讲五种通信方式的区别

# 讲讲五种通信方式的区别

# 引言

在现代分布式系统和应用中,通信方式的选择至关重要。每种通信方式在不同的场景下有其独特的优势和适用性。本文将详细分析五种常见的通信方式:HTTP/HTTPS、RPC、SDK、WebSocket 和 MQ,并探讨它们的特点、适用场景、优缺点以及选型建议。

# 1. HTTP/HTTPS

# 特点

  • HTTP/HTTPS 基于请求-响应模型,客户端向服务端发送请求,服务端返回响应。
  • HTTP 是无状态协议,每次请求都是独立的,适合无连接、无状态的服务交互。
  • HTTPS 是在 HTTP 基础上增加了 SSL/TLS 加密层,确保数据传输的安全性。
  • 支持 RESTful 规范,方法语义明确(GET/POST/PUT/DELETE)

HTTPS = HTTP + TLS加密(端口443)

# 适用场景

  • RESTful API:适用于对外暴露 API,供第三方调用。
  • 跨平台通信:由于 HTTP 是通用协议,适合不同平台之间的通信(Web、移动端、桌面端)。
  • 简单请求响应:适合无复杂交互和性能要求不高的应用。

# 优点

  • 广泛应用,易于理解和实现,工具链成熟。
  • 支持标准化的数据格式(如 JSON、XML),易于调试和集成。
  • 天然支持跨语言和跨平台通信。

# 缺点

  • 性能较低,由于每次请求都需要建立新的连接,可能带来较大的开销。
  • 无状态特性,使得每次请求都需要携带全部的上下文信息,不适合高频、低延迟场景。

# 选型建议

HTTP/HTTPS 适合用于 简单请求响应 和 跨平台调用 的场景,尤其是 Web 应用和对外 API 服务。

# 2. RPC(如 Dubbo、gRPC)

# 特点

  • RPC(远程过程调用) 允许不同机器上的程序像调用本地方法一样调用远程方法。
  • 使用高效的二进制协议(如 Protobuf、Thrift)进行序列化和传输。
  • 调用方通过框架(如 Dubbo、gRPC)与服务端通信,通常需要事先定义接口。

协议对比:

框架 协议 QPS 延迟 服务治理
gRPC HTTP/2 15万+ 2ms 内置
Dubbo TCP 8万 5ms 完善
Thrift Binary 20万+ 1ms 需扩展

# 适用场景

  • 微服务架构:适合服务间的高效通信,特别是在高并发、低延迟的情况下。
  • 强类型接口:适用于需要明确接口定义的场景。
  • 高性能要求:需要减少网络传输的开销并提高效率的系统。

# 优点

  • 高性能,适合高并发和低延迟的服务间通信。
  • 强类型接口,减少调用错误,增加系统稳定性。
  • 更高效的数据传输协议,比 HTTP 更加轻量。

# 缺点

  • 开发和配置相对复杂,特别是需要接口定义、序列化协议等。
  • 对于调试和监控需要更为专门的工具支持。

# 选型建议

RPC 适合用于 微服务架构 和 内部服务调用,特别是对性能要求较高、需要强类型接口的场景。

# 3. SDK(如 Maven)

# 特点

  • SDK(软件开发工具包) 是一种集成了必要功能的工具包,允许开发者快速集成第三方服务或功能。
  • 通过依赖管理工具(如 Maven、npm)引入 SDK,直接调用封装好的 API 和库。

设计要点:

  1. 封装复杂度(如OSS上传断点续传)
  2. 版本管理(语义化版本控制)
  3. 依赖冲突解决(Maven的dependencyManagement)
  4. 安全认证(AK/SK自动注入)

SDK类型对比:

类型 特点 示例
客户端SDK 包含UI组件 微信支付SDK
服务端SDK 提供API封装 AWS S3 SDK
工具类SDK 通用功能 Apache Commons

最佳实践:

  • 使用门面模式封装底层实现
  • 提供配置自动加载(Spring Boot Starter)
  • 设计重试策略(指数退避算法)

# 适用场景

  • 第三方服务集成:如支付、地图、短信等第三方服务。
  • 工具类封装:如日志、加密、缓存等工具。
  • 快速开发:需要快速集成功能的场景。

# 优点

  • 封装了复杂的底层实现,简化开发过程。
  • 使用简单,开发者无需关心底层细节,直接调用封装的 API。
  • 高效的依赖管理,提高开发效率。

# 缺点

  • 依赖 SDK 的版本和更新,一旦 SDK 出现问题,可能会影响整个系统。
  • SDK 设计不当时可能导致调用方代码的复杂度增加。

# 选型建议

SDK 适合用于 第三方服务集成,尤其是在 快速开发 或 工具类封装 的场景中。

# 4. WebSocket

# 特点

  • WebSocket 提供了一个全双工通信协议,适合实时数据传输。
  • 基于 TCP 协议,通过持久化连接实现双向通信,减少了传统 HTTP 的请求和响应开销。

# 适用场景

  • 实时通信:如即时聊天、推送通知、在线游戏等。
  • 高频数据交互:如股票行情、实时监控、金融交易等。

场景对比:

场景 适用协议 优势
股票行情 WebSocket 1秒内1000+次更新
即时聊天 WebSocket 消息可达率99.99%
文件上传 HTTP 支持断点续传

# 优点

  • 提供实时、低延迟的通信,适合需要即时响应的场景。
  • 长连接减少了连接建立的开销,适合高频数据传输。

# 缺点

  • 长连接需要在客户端和服务端之间保持,增加了资源消耗。
  • 实现复杂度较高,需要处理连接的维护、断开和重连等问题。
  • 不适合简单的请求响应场景。

# 选型建议

WebSocket 适用于 实时通信 和 高频数据交互,尤其是对 低延迟 和 双向通信 需求较高的场景。

# 5. MQ(如 RocketMQ、Kafka)

# 特点

  • MQ(消息队列) 是基于异步通信的机制,消息生产者将消息发送到队列,消费者从队列中消费消息。
  • 支持异步解耦,确保高并发、异步任务处理和流量削峰。

选型对比:

中间件 吞吐量 延迟 事务支持
Kafka 百万级 毫秒级 有限
RabbitMQ 万级 微秒级 完整
RocketMQ 十万级 毫秒级 完整

可靠性机制:

  1. 持久化存储(消息落盘)
  2. 消费确认(ACK机制)
  3. 死信队列(处理失败消息)

# 适用场景

  • 分布式系统:服务间解耦,处理高并发。
  • 异步任务处理:如订单处理、日志收集、文件上传等。
  • 削峰填谷:应对系统流量突增或波动。

# 优点

  • 解耦生产者和消费者,提升系统的灵活性和扩展性。
  • 支持高并发场景,可以平滑处理流量波动。
  • 消息持久化,保证可靠性和高可用性。

# 缺点

  • 系统复杂度较高,需要部署和维护消息队列。
  • 不适合需要即时响应的场景,延迟较高。

# 选型建议

MQ 适合用于 异步任务处理 和 高并发场景,尤其是需要 解耦 和 削峰填谷 的分布式系统。

# 综合决策树

是否需要实时双向通信?
├── 是 → WebSocket
└── 否 → 系统间关系?
    ├── 紧密耦合 → 性能要求?
    │   ├── 高 → RPC
    │   └── 一般 → HTTP
    └── 解耦需求?
        ├── 是 → MQ
        └── 否 → 是否需要快速集成?
            ├── 是 → SDK
            └── 否 → HTTP
1
2
3
4
5
6
7
8
9
10
11

# 总结

通信方式 核心特点 适用场景 优点 缺点
HTTP/HTTPS 基于网络请求,文本协议 RESTful API、跨平台调用 通用性强,易于调试 性能较低,不适合高并发
RPC 基于二进制协议,高性能 微服务架构、高并发场景 性能高,适合内部服务调用 开发复杂度较高
SDK 封装好的库,直接调用 第三方服务集成、工具类封装 使用简单,提高开发效率 依赖 SDK 的版本和更新
WebSocket 全双工通信,实时性强 实时通信(如聊天、推送) 实时性强,适合高频数据交互 实现复杂度较高
MQ 异步通信,解耦和高并发 分布式系统、异步任务处理 解耦生产者和消费者,适合高并发 实现复杂度较高

# 选型建议

  • 简单请求响应:HTTP/HTTPS。
  • 高性能、内部服务调用:RPC。
  • 第三方服务集成:SDK。
  • 实时通信:WebSocket。
  • 异步任务处理、高并发:MQ。

# 混合架构示例(电商系统)

  1. 用户鉴权:HTTP JWT 令牌
  2. 服务间调用:gRPC(商品服务->库存服务)
  3. 支付回调:MQ(保证最终一致性)
  4. 客服聊天:WebSocket
  5. 物流查询:第三方 SDK(快递100)
  6. 日志收集:Kafka 管道
上次更新: 2025/2/25 17:42:01
Gateway官方文档学习
SpringBoot事件机制

← Gateway官方文档学习 SpringBoot事件机制→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式