美文网首页
java远程调用的反思(Dubbo Vs Spring全家桶)

java远程调用的反思(Dubbo Vs Spring全家桶)

作者: 黄靠谱 | 来源:发表于2019-07-05 10:29 被阅读0次

    问题

    1. 为什么要有远程调用?
      因为跨系统的交互变得很多。
    • 跨公司系统的调用:比如调用 支付宝的支付接口,比如调用 税务机关的开票接口。
    • 公司内部系统之间的调用:降低不同业务之间的耦合,拆分出不同的应用,应用之间相互调用。
    1. 如何进行远程调用
    • http接口(web接口)(RestTemplate、Okhttp)
    • Feign
    • RPC调用(Dubbo、Socket编程 )
    • Webservice

    Dubbo调用 和传统 http接口调用的区别:

    • Dubbo 类似= RestTemplate+ Zookeeper,所以编程的时候也更简洁一些,而且没有强的耦合关系
    • 引入了注册中心,让服务消费方和 消费提供方 不强耦合
    • 引入了注册中心+ Dubbo自带的负载均衡 ,实现传统http不具备的负载均衡的功能。负载均衡还附带了动态调整 服务端节点数量的功能,动态扩容或者缩容都可以实现。
    • 自带了失败重试的功能
    • 提升了交互的性能,保持了长连接,高性能
    • Dubbo还提供了 监控统计和动态调整(权重和负载均衡算法)的功能
    • Dubbo附带了 白名单功能、结果缓存、同步和异步调用的功能。

    Feign概述

    Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。
    Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。

    Feign = RestTemplate + Spring全家桶(Eureka + Ribbon + 熔断 + Zipkin)

    • RestTemplate + Eureka 加持了 注册中心的关环,使得调用变得非常简洁,简洁到只需要指明 application.name + methodName
    • Eukeka +Ribbon 使得负载均衡功能可以实现(默认轮询)
    • 熔断机制,实现失败返回和重试等机制。类似于Dubbo的重试策略
    • Zipkin 链路监控,实现类似Dubbo 监控平台的功能

    Dubbo和Feign异同

    1. 共同点:功能上有很多类似的地方,因为都是专注于远程调用这个动作。比如注册中心解耦、负载均衡、失败重试熔断、链路监控。

    2. 区别。实现上:Dubbo除了注册中心,其它的都自己实现了,而Feign大部分功能都是依赖全家桶的组件来实现的。Dubbo小而专一,专注于远程调用。而Spring全家桶而言,远程调用只是一个重要的功能而已。

    • Feign是基于传统Http接口的封装,追求的是简洁,少侵入(因为就服务端而言,在SpringCloud环境下,不需要做任何额外的操作,而Dubbo的服务端需要配置开放的Dubbo接口)
    • Dubbo性能更好(比如支持异步调用、Netty性能更好)
    • Dubbo配置更灵活(比如引入权重,比如动态配置),比如多传输协议(Dubbo、Rmi、http、redis等等)

    相关文章

      网友评论

          本文标题:java远程调用的反思(Dubbo Vs Spring全家桶)

          本文链接:https://www.haomeiwen.com/subject/dblshctx.html