微服务通信[HTTP|RPC同步通信、MQ异步通信]

概念

A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用)

HTTP同步通信

  • 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式
  • 使用REST ful为开发规范,将服务对外暴露的HTTP调用方式为REST API(如GET、POST、PUT、DELETE等),已经成为替代传统SOAP Web 服务的流行方案
  • 具体的类库包括httpclient、RestTemplate、OkHttp,包括Springcloud 中的OpenFegin
  • 但是当服务之间的调用较为频繁时,我们一般不会用HTTP调用了,而是选择基于TCP的RPC调用

RPC同步通信

  • RPC即Remote Procedure Call(远程过程调用),可确保调用性能更加高效,能支持更高的并发量
  • 因为RPC通信过程在传输层(HTTP通信过程在应用层中完成),所以使用RPC调用方式需要在服务层和客户端之间建立Socket连接来实现二进制数据的交换
  • RPC是面向服务的,关注于行为和动作;而REST是面向资源的,强调描述应用程序的事物和名词
  • RPC框架来屏蔽底层的通信过程,这是RPC框架的核心价值,使得我们更加专注于业务开发

RPC协议的实现框架

主流 RPC 框架有 Dubbo、gRPC、bRPC 和 Thrift以及RMI、SpringCloud等
从github star来看,Dubbo > gRPC > bRPC > Thrift

异步通信

  • 当客户端调用服务端时,并不需要等待服务端做出响应时,就要使用异步调用,毕竟使用HTTP或RPC改造成异步调用的成本相关较高,所以更容易使用的是基于MQ(Message Queue 消息队列)来实现服务之间的异步调用
  • 通过消息队列实现微服务之间的异步通信,每个服务只需要关注自己的消息队列即可,实现了服务之间的解耦,常见的消息队列包括RabbitMQ、Kafka和ActiveMQ等

总结

  • 当一个服务调用另一个服务时,最简单的就是基于HTTP的同步调用,只需目标服务对外暴露相关HTTP请求地址(包括域名或IP、端口、路径等),调用方就能通过该HTTP请求地址调用目标服务
  • 当服务之间的调用较为频繁时,就需要选择基于TCP的RPC调用,这种方式可确保性能更加高效,能支持更高的并发量
  • 当客户可调用服务端时不需要等待服务端马上做出响应时,就应该使用异步调用,比较容易使用的是基于MQ来实现服务之间的异步调用
  • 当要求服务之间的调用必须同步时,可使用MQ开发基于请求应答模式的RPC调用框架

其他

HTTP协议和RPC协议区别

功能层面

  • http是应用层的超文本传输协议,主要用于网页端和服务端进行传输数据
  • 而RPC是远程过程调用协议,它用于应用进程间的通信,屏蔽了通信底层的复杂度,我们开发者就可以去像调用本地服务一样去完成远程服务的一个调用

实现层面

  • http是一个成熟的应用层协议,它定义了通信报文格式(request/response header,body等),符合这种协议特征的才属于http协议
  • 而RPC只是一种通信协议的规范,并没有实现,只有按照RPC通信协议规范实现的通信框架才是协议具体的实现,比如dubbo,grpc,因此我们可以自定义报文规范、自定义序列化方式、自定义网络通信协议类型来作为RPC的实现框架

应用层面

  • http协议和实现了RPC规范的框架都可以实现跨网络节点的服务通信,并且它们底层都是用TCP/IP协议作为通信基础。而RPC网络通信协议层我们可以自定义,所以可以通过http协议去实现,比如grpc,openFegin
相关推荐
史呆芬2 分钟前
分布式事务实战:微服务跨服务数据一致性解决方案
java·后端·spring cloud
IT界的老黄牛7 分钟前
限流命中后该怎么办:直接丢、阻塞等待、延迟重投三种姿势的取舍
java·rocketmq·redisson·令牌桶·削峰·分布式限流
niaiheni44 分钟前
红队实战:记一次Spring Cloud Gateway SpEL表达式注入到哥斯拉内存马(CVE-2022-22947)
web安全·spring cloud·网络安全
daad7771 小时前
记录matlab状态机demo
java·网络·matlab
牡丹雅忻11 小时前
AES 加密模式演进:从 ECB、CBC 到 GCM 的 C# 深度实践
java·开发语言·c#
学者猫头鹰2 小时前
Java 8 核心新特性
java
冰心孤城2 小时前
Excel: xls与xlsx格式转换排坑指南
java·前端·excel
自强的小白2 小时前
maven高级(聚合和私服)以及私服的上传和下载
java·maven
唐青枫2 小时前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java
ShiXZ2133 小时前
Java 8 Stream API 实用技巧详解:从入门到精通
java·开发语言