服务间远程调用

1.协议分层模型

通信协议通常按照分层模型进行设计,常见的分层模型包括 OSI七层模型 和 TCP/IP四层模型 。OSI七层模型包括应用层、表示层、会话层、传输层、网络层、数据链路层和物理层;而TCP/IP四层模型则包括应用层、传输层、网络层和网络接口层‌。每个层次都有其特定的功能和职责,确保数据的完整传输和错误处理。

2.传输协议

传输协议主要包括TCP、UDP、HTTP、HTTPS、FTP、SMTP、SSH等‌,它们在网络通信中承担不同功能,如可靠数据传输、文件传输、邮件发送等。

‌主要传输协议分类及功能‌

‌TCP(传输控制协议)‌


面向连接的可靠协议,确保数据顺序和完整性,适用于网页浏览、文件下载等场景。其核心技术包括滑动窗口、拥塞控制(如慢启动、快速重传)等。‌‌

‌UDP(用户数据报协议)‌


无连接的轻量级协议,牺牲可靠性换取传输效率,常用于视频流、在线游戏等实时应用。‌‌‌‌

‌HTTP/HTTPS‌

HTTP:超文本传输协议,用于网页数据明文传输。
HTTPS:通过SSL/TLS加密的HTTP安全版本,保护隐私数据(如网银交易)


‌FTP(文件传输协议)‌


专用于文件上传下载,但默认安全性较低,推荐使用SFTP或FTPS替代。‌‌‌‌

‌SMTP(简单邮件传输协议)‌


负责电子邮件的发送和服务器间转发。‌‌‌‌

‌SSH(安全外壳协议)‌


加密远程登录和管理服务器,防止数据窃听

3. RPC框架

RPC(Remote Procedure Call)即远程过程调用,是一种通过网络从远程计算机程序上请求服务的技术,它允许程序像调用本地方法一样调用远程服务,而无需了解底层网络细节。‌

3.1 概念

1. RPC的核心概念‌

RPC是一种分布式计算技术,其核心思想是‌屏蔽网络通信的复杂性‌,使开发者能够像调用本地函数一样调用远程服务。它基于客户端-服务器模型,通过特定的协议(如TCP、UDP或HTTP)实现跨进程或跨机器的通信。‌‌‌‌

2.RPC的工作原理‌

  1. ‌客户端调用‌:客户端发起对远程服务的调用,通过客户端存根(Client Stub)将参数序列化为网络可传输的格式。
  2. ‌网络传输‌:序列化后的数据通过底层网络协议传输到服务端。
  3. ‌服务端处理‌:服务端存根(Server Stub)接收数据并反序列化,调用本地服务处理请求。
  4. ‌结果返回‌:处理结果经序列化后返回客户端,客户端存根反序列化并返回给调用方。‌‌

3.RPC的关键组件‌

  • ‌客户端与服务端‌:分别作为调用方和服务提供方。
  • ‌存根(Stub)‌:负责序列化/反序列化和网络通信。
  • ‌协议与序列化‌:定义数据传输格式(如JSON、Protobuf)和通信规则。‌‌

3.2  具体实现

1. OpenFegin 

OpenFeign是Spring Cloud基于Netflix Feign二次开发的声明式(使用接口的方式)HTTP客户端,支持Spring MVC注解,简化了微服务间的远程调用,并默认集成Ribbon实现负载均衡‌。

OpenFeign 内部使用了 HTTP 客户端(默认是 Apache HttpClient 或 JDK 自带的 HttpClient)来执行实际的 HTTP 请求。

响应传输方式:

2. Dubbon和GRPC

 Dubbo是阿⾥巴巴开源的基于 Java 的⾼性能 RPC分布式服务框架,致⼒于提供⾼性能和透明化的RPC远程服务调⽤⽅案,以及SOA服务治理⽅案。 Spring Cloud Alibaba微服务开发框架集成了Dubbo,可实现微服务对外暴露Dubbo协议的接⼝,Dubbo协议相⽐RESTful协议速度更快RPC。

响应传输方式:

因为不需要转json,体积小,速度快。

 

3. 区别

1. 协议

  • Dubbo支持多传输协议(Dubbo、Rmi、Http、Redis等),可以根据业务场景选择最佳的方式,非常灵活。默认的Dubbo协议利用Netty,TCP传输,单一、异步、长连接,适合数据量小、高并发和服务提供者远远少于消费者的场景
  • OpenFeign基于Http传输协议,短连接,不适合高并发的访问。

2. 负载均衡

  • Dubbo支持4种算法(随机、轮询、活跃度、Hash一致性),而且算法里面引入权重的概念。配置的形式不仅支持代码配置,还支持Dubbo控制台灵活动态配置。负载均衡的算法可以精准到某个服务接口的某个方法。
  • OpenFeign只支持N种策略:轮询、随机、ResponseTime加权。

3. 容错策略

  • Dubbo支持多种容错策略:failover、failfast、broadcast、forking等,也引入了retry次数、timeout等配置参数。在选择远程服务调用框架时,我们需要综合考虑项目的需求和场景。对于需要高度灵活性和定制化的服务调用需求,Dubbo可能是一个更好的选择。它支持多种协议,灵活的负载均衡策略和容错机制,能够满足复杂的服务调用场景。
  • OpenFeign可能更加适合HTTP协议的服务调用。它简化了服务间的调用,提供了声明式的服务接口,可读性性更高。

4. 总结

  • Dubbon和GPRC性能更好,OpenFegin性能差一点
  • OpenFegin和GRPC支持跨语言。
  • OpenFegin使用JSON序列化传输,可读性更高。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值