Dubbo

  • 是一款高性能、轻量级的开源Java RPC框架,提供了三大核心能力:面向接口的远程方法调用、智能容错和负载均衡、服务自动注册和发现。

序列化方式

支持多种序列化方式: JDK自带序列化、Hessian2、JSON、Kryo、FST、Protostuff、ProtoBuf等、默认是 Hessian2

  • JDK自带序列化(不支持跨语言调用、性能差)
  • JSON(性能差)
  • Protostuff、ProtoBuf、Hessian2(跨语言的序列化方式)
  • Kryo、FST(性能好、专门针对java语言)推荐使用 Kryo 序列化方式


dubbo原理

alt

初始化的时候已经进行:

  1. Provider:提供者,将服务暴露(@DubboService),启动时将服务注册到Registry注册中心;
  2. Consumer:消费者,调用服务(@Reference),向Registry注册中心订阅服务,也可以直接通过Dubbo暴露提供者的地址。默认服务容错是Failover Cluster失败自动切换,配合设置重试次数使用retries;
  3. Registry:注册中心,用于发布和订阅服务的平台,用于替代SOA结构体系框架中的ESB服务总线。提供给消费者服务者提供的服务,如果有变更,会基于长连接推送变更数据给消费者;

使用:

  1. invoke:调用,消费者调用提供者提供的服务;

异步执行:

  1. Monitor:监控中心,将消费者,提供者在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

注册中心

  1. Zookeeper(支持分布式,有广泛的周边开源产品;但是依赖于Zookeeper的稳定性)
  2. Redis(支持基于客户端双写的集群方式、性能高;但是要求服务器时间同步,用于检查心跳过期脏数据)
  3. Multicast
  4. Simple

服务治理

Service服务下线怎么办?

  • 心跳、健康检测

注册中心是可选的?

  • 直接在配置文件里面写url、实现提供方和消费方直连

注册中心宕机了怎么办?

  • 不会影响已经正常运行的提供者和消费者,因为消费者有本地缓存提供者的信息


Dubbo分层架构

总体分三层,Business(业务层)、RPC层、Remoting

image


细分有10层:

  1. Service 接口层:给服务提供者和消费者来实现
  2. Config 配置层:主要对Dubbo进行各种配置,以SeviceConfig、ReferenceConfig 为中心,可以直接初始化配置类,也可以通过Spring解析配置生成配置类
  3. Proxy 服务代理层:生成服务客户端Stub、服务端Skeleton,代理之间进行网络通信,做远程调用和返回结果(以ServiceProxy为中心,拓展接口为ProxyFactory)
  4. Registry 注册中心层:负责服务的注册与发现,(以服务URL为中心,拓展接口为RegistryFactory、Registry、RegistryService)
  5. Cluster 路由层:封装多个服务提供者的路由以及负载均衡,(以Invoker为中心,扩展接口为Cluster、Directory、Router、LoadBalance)
  6. Monitor 监控层:对RPC调用次数和调用时间监控
  7. Protocol 远程调用层:封装RPC的调用,(以Invocation、Result为中心,扩展接口为 Protocol、Invoker、Exporter)
  8. exchange 信息交换层:封装请求响应模式,同步转异步,(以Request、Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient、ExchangeServer)
  9. transport 网络传输层:抽象了网络传输的统一接口,可以使用mina或者 netty
  10. serialize 数据序列化层:数据序列化成二进制流,二进制流反序列化成数据

image