深入理解Dubbo与实战
2020-04-15 17:55:02 0 举报
AI智能生成
Dubbo学习资料
作者其他创作
大纲/内容
SPI
Proxy
服务代理,无论生产还是消费者都会产生一个代理类,是的调用远程接口如同调用本地接口一样
ProxyFactory
Registry
注册层,负责服务的注册于发现,当有新的服务加入或者旧服务下线,注册都会感知并通知给所有订阅方
Registry
RegistryFactory
RegitryService
Cluster
集群容错层,主要负责,远程调用失败的容错策略,选择具体调用节点时的负载均衡策略,随机还是一致性hash,特殊调用路径的路由策略,如某个消费者只调用某个IP的生产者
Cluster
Directory
LoadBalance
Monitor
监控层,主要负责监控统计调用次数和时间
Monitor
MonitorFactory
MonitorService
Protocol
远程调用层,负责封装RPC调用具体过程,Protocol是Invoker暴露和引用的主要功能入口,它负责管理Invoker的生命周期,Invoker是Dubbo的核心模型。他是一个可执行体,它可以使一个本地接口的实现也可以是远程的实现也可以是一个集群的实现
Protocol
Invoker
Exporter
Exchange
信息交换层,建立Request-Response模型,封装请求响应模型,如把同步的请求转为异步的请求
Exchanger
ExchangeChannel
ExchangeClient
ExchangeServer
Transport
网络传输层,把网络传输的抽象统一的接口,比如Mina和Netty的接口不一样,它做到统一,用户可以在其基础上做拓展
Codec
Transpoter
ChannelHandler
Server/Client
Serialize
序列化层,序列化二进制流。
ObjectOutput
Serialization
ObjectInput
API
Service
Interface
业务层,包括业务代码的接口和实现,即开发者自己的代码
Config
Configparser
主要围绕ServiceConfig暴露服务配置和RefrenceConfig引用服务配置来展开。配置管理
Dubbo源代码模块
dubbo-common
通用逻辑模块,提供工具类和通用模型
dubbo-remoting
远程通用模型,为消费者和服务提供者提供通信能力
dubbo-rpc
容易和remote模块混合,本模块抽象各种通信协议,以及动态代理
dubbo-cluster
集群容错模块,RPC关注单个调用,本模块则是负载均衡,集群容错,路由,分组聚合等
dubbo-registry
注册中心模块
dubbo-monitor
监控模块,调用次数和时间
dubbo-config
配置模块,实现了API配置,属性配置,XML配置,注解配置
dubbo-container
容器模块,如果项目比较轻量,没用到Web特性,因此不想使用Web容器则可以使用该Main方法加载Spring容器
dubbo-filter
过滤器模块,内置的过滤器
dubbo-plugin
插件模块,内置插件Qos
dubbo-demo
dubbo-test
性能测试,兼容性测试
注册中心模块
dubbo-registry-api
注册中心的API与抽象的实现类
dubbo-registry-zookeeper
zk可以有持久结点和持久顺序结点,临时节点,临时顺序结点,dubbo作为注册中心,只会创建临时和持久,对顺序无要求
一个集群有多个结点用,分割,同时支持多集群,用|分割。注册中心支持多集群
发布,创建目录。取消发布则是删除目录
订阅
pull客户端定时轮询注册中心,拉取配置
push注册中心主动推送数据给客户端
目前主要采用第一次启动拉取,后续采用接收事件,重新拉取数据
对于ZK接口的使用,有zkClient和Curator,默认后者
dubbo-registry-redis
dubbo-registry-default
内存实现Simple,纯RPC
dubbo-registry-multicast
提供者广播自己的地址,消费者会广播订阅请求
dubbo/service
providers
服务者URL元数据信息
consumers
消费者URL元数据信息
routers
策略URL元数据信息
configurators
服务动态配置URL元信息
Dubbo过滤器
过滤器的使用
@activate来设置默认启用
基于xml配置的启用
consumer
消费方调用过程拦截器,拦截所有的reference
reference
provider
提供方调用过程拦截器,拦截所有的provider
service
过滤器顺序
filter=“xxx,default”
default代表默认的过滤器
过滤器剔除
-default
剔除默认的过滤器
过滤器叠加
如果服务端和客户端都设置的话,那么都会生效。需要剔除
过滤器的总体结构
1.过滤器@SPI表明是一个拓展点
2.除了CompatibleFilter没有默认激活,其他都默认激活
3.过滤器分服务端和客户端,除了MonitorFilter是两者都有外
4.内部过滤器通过注解@Activate的分组和排序保证分类和序列
过滤器链
1.遍历所有的过滤器
2.采用装饰器模式,增强原有的Invoker组装过滤器链
过滤器介绍
服务提供者
AccessLogFilter
打印每一次请求的访问日志,如果需要访问的日志只出现在指定的append中,则可以配置在log的配置additivity
ExecuteLimitFilter
由于限制每个服务中的每个方法的最大并发数,有接口级别和方法级别
在框架中,使用一个concurrentMap缓存了并发计数器,以try-catch-finally。try中+1 在finally中-1
ClassLoaderFilter
用于切换不同的线程的类加载器,服务调用完后还原回去
1.获取当前线程的classloader
2.设置当前线程的上下文classloader,从调用invoker中取出classloader
3.把当前线程的上下类加载还原回去
ContexFilter
ThreadLocal级的信息,处理调用请求上下文
1.清除异步属性,防止异步属性传到过滤器的下一个环节
2.设置当前请求的上下文
3.调用过滤器的下一个节点
4.调用完成后,清除上下文信息
EchoFilter
用于回声测试
ExceptionFilter
统一处理异常
针对不同类型的异常,做不同的处理抛出
TimeOutFitler
记录每个Invoke的调用时间,如果超过了接口设置的timeout时间,那么久会打印一条警告日志,不会影响业务正常使用
GenericFilter
TokenFilter
为了不让客户端绕过注册中心,直连服务端,设置的一个token校验逻辑。有注册中心分发
TpsLimitFilter
用于服务端限流,采用令牌桶算法
TraceFilter
trace指令的使用
服务消费者
ConsumerContexFilter
会结合服务端的一起使用,保证链式调用
GenericImplFilter
实现泛化调用,检查序列化。同上
ActiveLimitFilter
用于限制消费端对服务端的最大并行调用数
DeprecatedFilter
如果调用的方法被标记成弃用的,那么其将记录一个错误消息
FutureFilter
在发起invoke或得到返回值出现异常时触发的回调事件
收藏
0 条评论
下一页