dubbo概念
dubbo是一个高性能的rpc框架,并在此基础上具有服务治理功能,用于分布式系统架构。
架构
节点主要分为
- provider 暴露服务的服务提供方
- consumer 调用远程服务的服务消费方
- registry 服务注册与发现的注册中心
- monitor 统计服务的调用次数和调用时间的监控中心
- container 服务运行容器
运行流程中关键组件/结构
- service 业务接口层,对应业务逻辑
- config 配置类
- porxy 接口层的代理,用来透明化dubbo运行流程
- registry 封装服务注册和发现
- cluster 消费端组合多个服务提供方,透明化选择过程
- protocol 封装rpc调用过程,负责invoker的生命周期,是invoker暴露和引用的主功能入口
- exchange 封装请求响应过程,同步转异步
- transport 封装网络传输过程,包括抽象mina/netty等
- serialize 序列化,如hessiandubbo等
配置优先级
从低到高
- 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中最重要的接口之一,统一了流程中的各个组件调用的规范。