Dubbo背景和简介

Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起。

单一应用框架(ORM) 
当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本。 
缺点:单一的系统架构,使得在开发过程中,占用的资源越来越多,而且随着流量的增加越来越难以维护 

垂直应用框架(MVC) 
垂直应用架构解决了单一应用架构所面临的扩容问题,流量能够分散到各个子系统当中,且系统的体积可控,一定程度上降低了开发人员之间协同以及维护的成本,提升了开发效率。 
缺点:但是在垂直架构中相同逻辑代码需要不断的复制,不能复用。 

分布式应用架构(RPC) 
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心 

流动计算架构(SOA) 
随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架

从以上是电商系统的演变可以看出架构演变的过程: 

  • 单一应用架构

    • 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
    • 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。
  • 垂直应用架构

    • 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
    • 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
  • 分布式服务架构 
    • 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
    • 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
  • 流动计算架构 
    • 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
    • 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。

 

### 对比 - **通信协议**:dubbo支持多种协议,如http、rpc、dubbo等;而openFeign仅支持http协议 [^1]。 - **服务注册与调用注解**:dubbo使用`dubboService`、`dubboRefrence`注解进行服务注册与调用,openFeign则使用`openFeignClient`注解进行服务调用,且因nacos自带服务注册,openFeign可直接调用 [^1]。 - **负载均衡**:dubbo支持的负载均衡策略比openFeign多,并且dubbo支持将负载均衡的粒度细化到某个接口 [^1]。 - **框架背景与集成难度**:Dubbo出生于阿里系,是阿里巴巴服务化治理的核心框架,只需要通过spring配置的方式即可完成服务化,对应用无入侵,但使用配置中心、分布式跟踪等内容需自己集成,增加了使用难度;Spring Cloud Netflix技术栈中,Feign框架结合Ribbon做负载均衡,其服务接口基于Spring MVC的Controller暴露的HTTP接口 [^3][^5]。 ### 使用方法 - **SCA中**:SCA默认使用openFeign作为通信中间件,dubbo类似,都是在公共接口上通过添加注解进行远程调用 [^1]。 - **Spring Cloud中加入Dubbo**:客户端请求网关,网关将请求路由到微服务,微服务需进行注册中心的配置以及配置中心的管理,各微服务之间调用使用Dubbo而非Feign [^2]。 ### 特点 - **Dubbo**:成熟度高、文档完善,能满足各大互联网公司业务需求;支持多种协议较多负载均衡策略,可将负载均衡粒度细化到接口;兼容Spring Cloud发布组件,可消费Spring Cloud服务,结合Spring Boot时,由Spring Boot提供REST服务,Dubbo端只负责注册构建服务目录 [^3][^4]。 - **Feign**:在Spring Cloud Netflix技术栈中,与Ribbon结合做负载均衡,通过定义HTTP的URL地址进行RPC调用,请求数据按照HTTP协议组装序列化,基于Tomcat部署,监听指定端口接收HTTP请求 [^5]。 ### 代码示例 以下是Feign的简单代码示例: ```java import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; @FeignClient(name = "serviceA") public interface ServiceAClient { @GetMapping("/hello") String hello(@RequestParam("name") String name); } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值