Dubbo应用与实践

本文详细介绍了Dubbo在微服务架构中的应用,包括OpenFeign、Dubbo和Thrift等通信组件。Dubbo不仅是一个RPC框架,还提供服务注册与发现、负载均衡、服务治理等功能。文中展示了Dubbo与SpringBoot集成的例子,解释了服务降级、容错策略和多协议支持等高级特性,并讨论了不同序列化方式的性能对比。此外,还提到了Dubbo3.x对注册中心和协议的支持变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微服务架构中,比较主流的通信组件:

  • Spring Cloud中的OpenFeign
  • Dubbo
  • Thrift,轻量级、跨语言的远程服务调用框架,最初由Facebook开发,后面进入Apache开源项目。通过自身的IDL中间语言,并借助代码生成引擎生成各种主流语言的RPC服务端/客户端模板代码。

它们都统称为RPC框架。

RPC协议与RPC框架

RPC(Remote Procedure Call)即远程过程调用,它是一个计算机通信协议,这个协议允许两个跨网络节点的进程进行通信,让我们能够像调用本地服务一样调用远程服务。

RPC协议定义了一种通信的标准规范,为了满足不同场景需求,于是很多RPC框架在这个协议基础上应运而生。而Dubbo就是主流RPC框架之一。

Dubbo

Dubbo背景

Dubbo是Alibaba内部使用的一个分布式服务治理框架,很多公司在应用dubbo时,会根据自身业务特性进行优化改进,从而衍生出了很多版本,比如京东的JSF,新浪的Motan,当当的dubbox。

主要分2.x和3.x两个版本。3.x定义为面向云原生的下一代RPC服务框架,目前还是以2.7.x版本为主。

Dubbo特性/功能

Dubbo之所以能够被很多公司应用,是因为随着服务化快速发展,远程通信带来了很多弊端,比如:

  1. 服务链路变长了,如何实现对服务链路的跟踪和监控?
  2. 服务大规模集群,使得服务之间需要依赖第三方注册中心来解决服务之间的发现
  3. 服务间通信异常,需要一种保护机制防止一个节点故障引发大规模系统故障,所以需要容错机制
  4. 服务大规模集群,客户端需要引入负载均衡策略实现请求分发

传统RPC无法很好的解决这些问题,而Dubbo都能支持这些。

所以Dubbo不仅仅是一个RPC框架,更是一个成熟的微服务框架。它包含一下功能:

  1. RPC框架,提供高性能的基于代理的RPC调用,服务以接口为粒度,为开发者屏蔽远程调用底层细节;
  2. 智能负载均衡,内置多种负载均衡策略,智能感知下游节点健康状况,减少调用延迟,提高系统吞吐量;
  3. 服务注册与发现,支持多种注册中心服务,服务实例上下线实时感知;
  4. 可视化的服务治理与运维,提供丰富的服务治理、运维工具;可随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调用配置参数;
  5. 高度可扩展能力,遵循微内核+插件的设计原则;

Dubbo架构图

节点角色说明:

  • Provider: 暴露服务的服务提供方。
  • Consumer: 调用远程服务的服务消费方。
  • Registry: 服务注册与发现的注册中心。
  • Monitor: 统计服务的调用次调和调用时间的监控中心。
  • Container: 服务运行容器。

调用关系说明:

  • 0. 服务容器负责启动,加载,运行服务提供者。
  • 1. 服务提供者在启动时,向注册中心注册自己提供的服务。
  • 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  • 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  • 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  • 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
     

 新版本Dubbo,多了配置中心和元数据中心

Dubbo应用实践

dubbo + spring boot

  1. pom引入zk和dubbo-spring-boot-starter
  2. application.properties中配置bubbo service名称、dubbo协议、注册中心地址
  3. 在项目启动类上添加@EnableDubbo
  4. 在service上添加@DubboService
  5. 引用的地方加@DubboReference调用service

定义service api

coupon-service-api

public interface ICouponService {
    // 查询有效的优惠券列表
    String selectValidCoupons();
}

user-service-api

public interface IUserSer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值