springCloud(rpc)&dubbo(rpc)

目录

springCloud rpc 

dubbo rpc

响应速度比较

dubbo框架版本

如何实现一个rpc框架

在 Provider 上可以配置的 Consumer 端的属性

 grpc



springCloud rpc 

springCloud(rpc)&dubbo(rpc)_第1张图片

http协议,属于应用层(第七层) 

tcp协议,属于传输层(第三层)

spring cloud netflix技术栈,RPC调用,用的就是feign框架+ribbon做负载均衡,暴露出来的服务接口,说白了就是controller写的接口(不过定义的是内部服务调用的接口)
通过feign框架进行RPC调用:String result = serviceA.hello(name),数据格式按照http协议请求来做,http请求序列化成二进制的字节流,通过底层的tcp连接发送
本质上服务A的部署是基于tomcat去进行部署的,tomcat会监听你指定的端口号,当别人要发送http请求给你的时候,首先必须跟tomcat建立tcp网络连接,发送http请求给tomcat,tomcat收到之后,解析出来这个http请求,交给服务实现的controller(api模块定义的接口)进行处理

dubbo rpc

springCloud(rpc)&dubbo(rpc)_第2张图片

 dubbo在进行调用的时候,使用的同样是tcp连接,Dubbo3 提供了 Triple(Dubbo3)、Dubbo2 协议,这是 Dubbo 框架的原生协议。除此之外,Dubbo3 也对众多第三方协议进行了集成,并将它们纳入 Dubbo 的编程与服务治理体系, 包括 gRPC、Thrift、JsonRPC、Hessian2、REST 等。以下重点介绍 Triple 与 Dubbo2 协议。

dubbo官网介绍的协议:RPC 通信协议 | Apache Dubbo

dubbo自己使用的一套协议,自定义协议,也可以是别的协议,肯定不是http协议,去组装请求数据,然后做一个序列化,二进制字节数组或者是字节流,都可以,通过底层的网络连接把请求数据发送过去就可以了

ServiceA这个类,调用他里面的hello()这个方法,传入name这个参数,获取result这个返回值,然后通过网络连接把响应数据按照自己的协议封装,序列化,通过网络连接发送给服务B就可以了

响应速度比较

使用一个Pojo对象包含10个属性,请求10万次,Dubbo和Spring Cloud在不同的线程数量下,每次请求耗时(ms)如下:

springCloud(rpc)&dubbo(rpc)_第3张图片

说明:客户端和服务端配置均采用阿里云的ECS服务器,4核8G配置,dubbo采用默认的dubbo协议
点评:dubbo支持各种通信协议,而且消费方和服务方使用长链接方式交互,通信速度上略胜Spring Cloud,如果对于系统的响应时间有严格要求,长链接更合适。

dubbo框架版本

目前 Dubbo 社区主力维护的是 2.6.x 和 2.7.x 两大版本,2.6.x 版本主要是 bug 修复和少量功能增强为准,是稳定版本。

2.7.5 版本的发布被 Dubbo 认为是里程碑式的版本发布,支持 gRPC,并且性能提升了 30%(这里不了解gRPC 和为什么性能提升的话就别说了,别给自己挖坑)。

对比 2.x 版本,Dubbo3 版本

  • 服务发现资源利用率显著提升。
    • 对比接口级服务发现,单机常驻内存下降 50%,地址变更期 GC 消耗下降一个数量级 (百次 -> 十次)
    • 对比应用级服务发现,单机常驻内存下降 75%,GC 次数趋零
  • Dubbo 协议性能持平,Triple 协议在网关、Stream吞吐量方面更具优势。
    • Dubbo协议 (3.0 vs 2.x),3.0 实现较 2.x 总体 qps rt 持平,略有提升
    • Triple协议 vs Dubbo协议,直连调用场景 Triple 性能并无优势,其优势在网关、Stream调用场景。

相比于 2.x 版本中的基于接口粒度的服务发现机制,3.x 引入了全新的基于应用粒度的服务发现机制, 新模型带来两方面的巨大优势:

  • 进一步提升了 Dubbo3 在大规模集群实践中的性能与稳定性。新模型可大幅提高系统资源利用率,降低 Dubbo 地址的单机内存消耗(50%),降低注册中心集群的存储与推送压力(90%), Dubbo 可支持集群规模步入百万实例层次。
  • 打通与其他异构微服务体系的地址互发现障碍。新模型使得 Dubbo3 能实现与异构微服务体系如Spring Cloud、Kubernetes Service、gRPC 等,在地址发现层面的互通, 为连通 Dubbo 与其他微服务体系提供可行方案。

dubbo2.x迁移3.x 应用级地址发现迁移指南 | Apache Dubbo

springCloud(rpc)&dubbo(rpc)_第4张图片

如何实现一个rpc框架

1.  高性能的网络传输 例如 netty

2. 定义序列化协议

3. 为跨语言搞一套描述服务预言 IDL(interface description language)

4. 隐藏具体实现细节,提供api或配置项获注解 接入服务(易用,稳定)

5. 服务发现注册所需要的注册中心

6. 服务的监控信息收集埋点上报等

在 Provider 上可以配置的 Consumer 端的属性

1)timeout:方法调用超时
2)retries:失败重试次数,默认重试 2 次
3)loadbalance:负载均衡算法,默认随机
4)actives 消费者端,最大并发调用限制

 grpc

springCloud(rpc)&dubbo(rpc)_第5张图片

你可能感兴趣的:(java开发,dubbo,rpc,springcloud,rpc,dubbo,Feign)