技术选型对比- RPC(Feign VS Dubbo)

协议

Dubbo

  • 支持多传输协议: Dubbo、Rmi、http,可灵活配置。
  • 默认的Dubbo协议:利用Netty,TCP传输,单一、异步、长连接,适合数据量小(传送数据小,不然影响带宽,响应速度)、高并发和服务提供者远远少于消费者的场景。

Feign

基于Http传输协议,短连接,性能比dubbo低 ,不适合高并发的访问。

生态

  • SpringCloud是Apache旗下的Spring体系下的微服务解决方案
  • Dubbo是阿里系的分布式服务治理框架

 

 

 注册服务的区别


Dubbo是基于java接口及Hession2序列化的来实现传输的,Provider对外暴露接口,Consumer根据接口的规则调用。也就是Provider向Zookeeper注册的是接口信息,Consumer从Zookeeper发现的是接口的信息,通过接口的name,group,version来匹配调用。Consumer只关注接口是否匹配,而对此接口属于什么应用不关心。当然接口的注册信息里会包含应用的ip,hostname等。


SpringCloud的服务发现是基于Http协议来实现的,Provider对外暴露的是应用信息,比如应用名称,ip地址等等,Consumer发现的是应用的信息,当调用的时候随机选择一个Provider的IP地址,应用名称,然后依据Http协议发送请求。Consumer关注的是应用名称,根据应用名称来决定调用的是哪个服务集群,然后对此名称对应的服务集群做负载均衡。Provider接受到请求后,根据内置的SpringMVC来匹配路由处理请求。

负载均衡

Dubbo:

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

Feign:

只支持N种策略:轮询、随机、ResponseTime加权。
负载均衡算法是Client级别的。

 容错策略

Dubbo:

支持多种容错策略:failover、failfast、brodecast、forking等,也引入了retry次数、timeout等配置参数。

Feign:

利用熔断机制(外部介质)来实现容错的,处理的方式不一样。

Feign是SpringCloud中的远程调用方式,基于成熟Http协议,所有接口都采用Rest风格。因此接口规范更统一,而且只要符合规范,实现接口的微服务可以采用任意语言或技术开发。但受限于http协议本身的特点,请求和响应格式臃肿,其通信效率相对会差一些。

Dubbo框架默认采用Dubbo自定义通信协议,与Http协议一样底层都是TCP通信。但是Dubbo协议自定义了Java数据序列化和反序列化方式、数据传输格式,因此Dubbo在数据传输性能上会比Http协议要好一些。

不过这种性能差异除非是达极高的并发量级,否则无需过多考虑。

 

 

总结


Dubbo支持更多功能、更灵活、支持高并发的RPC框架。

SpringCloud全家桶里面(Feign、Ribbon、Hystrix),特点是非常方便。Ribbon、Hystrix、Feign在服务治理中,配合Spring Cloud做微服务,使用上有很多优势,社区也比较活跃,看将来更新发展。

业务发展影响着架构的选型,当服务数量不是很大时,使用普通的分布式RPC架构即可,当服务数量增长到一定数据,需要进行服务治理时,就需要考虑使用流式计算架构。Dubbo可以方便的做更精细化的流量调度,服务结构治理的方案成熟,适合生产上使用,虽然Dubbo是尘封后重新开启,但这并不影响其技术价值。

如果项目对性能要求不是很严格,可以选择使用Feign,它使用起来更方便。
如果需要提高性能,避开基于Http方式的性能瓶颈,可以使用Dubbo。

Dubbo Spring Cloud的出现,使得Dubbo既能够完全整合到Spring Cloud的技术栈中,享受Spring Cloud生态中的技术支持和标准化输出,又能够弥补Spring Cloud中服务治理这方面的短板
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当前主流的RPC(Remote Procedure Call)框架有很多,FeignDubbo是其中两个比较知名的。下面是关于它们的简要介绍: 1. **Feign**: - Feign是Netflix开发的一款轻量级的API客户端,主要用于简化服务间的接口调用。它基于Java注解,提供了一种声明式的接口调用方式,开发者只需定义接口,Feign会自动生成实现类和底层HTTP请求。 - Feign支持各种HTTP库,如OkHttp、Apache HttpClient等,并且可以轻松地集成到Spring Cloud生态系统中,方便微服务之间的通信。 2. **Dubbo**: - Dubbo是一个开源的企业级高性能远程服务调用框架,主要适用于大规模分布式服务架构,支持高并发、高性能和容错性。Dubbo基于Java,提供了一套全面的服务治理解决方案,包括注册中心、服务发现、负载均衡、熔断、限流等。 - 它通常用于企业级的微服务架构中,尤其在大型分布式系统中的服务间通信方面非常常见。 除了这两个,还有其他一些主流RPC框架,例如: - **gRPC**:Google开源的高性能RPC框架,基于Protocol Buffers协议,提供了高性能和安全性。 - **Retrofit**:Android和Java平台的流行库,结合OkHttp实现RESTful API调用。 - **Hystrix**(已被Netflix弃用):原本是Amazon的故障隔离工具,但现在常常与Feign一起作为服务降级和熔断方案使用。 如果你对这些RPC框架感兴趣,可以关注它们各自的特性、适用场景以及与其他技术栈的集成情况。有关更多细节,你可以询问: 1. Feign和Retrofit相比,各有何优缺点? 2. Dubbo和gRPC在性能上的差异体现在哪些方面? 3. 在微服务架构中,如何择合适的RPC框架?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值