殁舞

导航

 

dubbo概念

dubbo是一个高性能的rpc框架,并在此基础上具有服务治理功能,用于分布式系统架构。


架构

节点主要分为

  • provider 暴露服务的服务提供方
  • consumer 调用远程服务的服务消费方
  • registry 服务注册与发现的注册中心
  • monitor 统计服务的调用次数和调用时间的监控中心
  • container 服务运行容器

运行流程中关键组件/结构

  • service 业务接口层,对应业务逻辑
  • config 配置类
  • porxy 接口层的代理,用来透明化dubbo运行流程
  • registry 封装服务注册和发现
  • cluster 消费端组合多个服务提供方,透明化选择过程
  • protocol 封装rpc调用过程,负责invoker的生命周期,是invoker暴露和引用的主功能入口
  • exchange 封装请求响应过程,同步转异步
  • transport 封装网络传输过程,包括抽象mina/netty等
  • serialize 序列化,如hessian\dubbo等

配置优先级

从低到高

  • applicationConfig
  • registryConfig
  • providerConfig
  • consumerConfig 可继承providerconfig配置
  • ProtocolConfig
  • ServiceConfig 可继承providerConfig配置
  • referenceConfig 可继承serviceConfig配置,可继承consumerConfig配置
  • MethodConfig
  • ArgumentConfig

常用配置

  • 服务路由
  • 运行时检查 check
  • 超时重连 timeout/retries
  • 集群容错 cluster
  • 负载均衡 loadbalance
  • 结果缓存 cache
  • 服务分组 group
  • 多版本 version
  • 只发布 register
  • 只订阅 subscribe
  • 异步调用 async
  • 事件通知 onreturn onthrow oninvoke
  • 服务降级 mock

SPI扩展

dubbo框架整体建立在spi机制(SPI 全称为 Service Provider Interface,是一种服务发现机制,目标是为接口寻找实现类。)上,同时增强了spi机制,可以键值对形式使用,另增加如默认加载类,以及自适应类@adaptive,还有指定场景加载实现类@activate、


javassit动态编译

考虑到性能问题,实现过程中默认都是用javassit来生成静态代理类,比起动态代理执行过程性能更好。


spi的依赖注入

由于扩展点可以灵活组合,可能需要注入spring容器的bean或者其他@SPI的实例,因此SpringExtensionFactory持有了spring容器,注入时会从spi的容器和spring容器中找bean


启动过程

重点关注

  • DubboConfigBindingRegistrar 配置注册类
  • serviceAnnotationBeanPostProcessor 服务实现类
  • ReferenceAnnotationBeanPostProcessor 消费实现类

invoker

dubbo中最重要的接口之一,统一了流程中的各个组件调用的规范。

posted on 2021-07-16 18:15  殁舞  阅读(46)  评论(0编辑  收藏  举报