DUBBO

83 阅读3分钟
  • SOA
  • 优点:
  • 1.接口粒度,屏蔽远程调用西街
  • 2.业务分层以后架构清晰
  • 3.数据隔离,权限回收,数据访问都通过接口
  • 4.服务应用本身无状态
  • 5.服务责任确定
  • 缺点:
  • 1.控制复杂
  • 2.接口数量不宜控制
  • 3.版本升级兼容困难
  • 4.调用链路长,服务质量不可监控
  • 微服务架构
  • 业务彻底组件化和服务化,可以用不同语言,使用不同存储技术
  • DUBBO
  • Registry
  • Provider
  • Consumer
  • Monitor
  • 注册中心推荐zookeeper
  • 服务提供者和消费者调用的时间定时发送给监控中心
  • 1.注解方式
  • 2.XML方式
  • DUBBO配置项
  • 1.application
  • qosEnable
  • 2.registry
  • 3.protocol
  • 4.service:提供者配置
  • mock参数 ,服务降级的方法
  • retries重试机制
  • executes并行度
  • 5.reference:消费者配置
  • 6.consumer可以设置消费者调用超时
  • JAVA的SPI
  • service provider interface
  • 是JDK内置的一种服务发现机制,解耦
  • DUBBO
  • 1.api接口
  • @SPI注解
  • 2.impl实现
  • resource下创建META-INF/dubbo
  • 创建实现类名文件
  • 自定义负载均衡
  • 实现LoadBalance接口
  • @Reference(loadbalance="random")
  • 把random改成自定义的负载均衡接口
  • 异步调用:目前只有xml方式
  • 利用futrue模式
  • RpcContext.getcontext().getfuture()
  • reference配置中 dubbo:method 加入 async=“true”参数
  • DUBBO线程池
  • fix:默认创建线程数为200,无等待队列
  • cache:创建非固定大小线程池,自动创建新线程,创建大量线程也会对系统造成压力
  • 自定义线程池
  • 固定模式线程池 继承fixedThreadpool 实现Runable
  • 定义线程池使用阀值 0.9
  • 创建MAP映射URL和Threadpoolexecutor的关系
  • 通过父类创建线程池 getExecutor()
  • run方法中遍历线程池
  • 配置SPI
  • 在provider中配置线程池
  • DUBBO路由规则
  • route://路由规则类型
  • 0.0.0.0:表示对所有IP地址生效
  • com.lagou.server.xxx:表示对指定服务生效
  • category=routers
  • priority=1优先级
  • rule=URL.encode("host=>xxxxx")
  • Curator框架
  • 创建对需要管理的路劲管理器
  • 创建Router实现
  • 创建路由工厂RouterFactory实现添加@Activate注解
  • 服务动态降级
  • 防止分布式服务发生雪崩
  • 服务屏蔽和容错
  • force是强制返回(屏蔽)
  • DUBBO源码剖析
  • 调用链路
  • 1.消费者通过Interface进行方法调用,统一交由消费者断的Proxy。通过proxyfactory来进行代理对象的创建,使用到了jdk javassist技术
  • 2.交给Filter模块,做统一的请求过滤 SPI
  • 3.invoker逻辑
  • 通过directory去配置中心读取信息 最终通过List方法获取所有的Invoker
  • 通过cluster模块根据选择的具体路由规则 来选取invoker列表
  • 通过loadbalance模块 根据负载均衡策略 选择一个具体的invoker处理请求
  • 如果执行中出现错误 并且consumer阶段配置了重试 则重试
  • 4.filter执行封装 invoker选择具体的协议
  • 5.客户端编码和序列化发送数据
  • 6.到达consumer中的server在这里反编码和反序列化接收数据
  • 7。exporter选择执行器
  • 8.交给filter进行一个提供则断的过滤,交给Invoker执行
  • 分层
  • 1.business层
  • servcie业务
  • 2.PRC层
  • config配置
  • proxy代理
  • registry注册中心
  • cluster 路由层
  • monitor 监控层
  • protocol 远程调用层
  • 3.remoting层
  • exchange 信息交换层
  • transport 网络传输层
  • serialize 数据序列化层
  • 服务注册过程
  • ServiceConfig
  • ref(对外提供服务的实际类)/protocol/proyxfactory属性
  • RegisterService注册中心类
  • RegistryFactory获取注册中心工厂类
  • RegistryProtocol.export的doRegister方法注册提供者到url
  • failbackRegistry 失败自动注册,自动重试
  • 文件本地缓存
  • 服务消费过程
  • ReferenceConfig:
  • protocol
  • invoker
  • proxyfactory
  • init方法createProxy->refer创建Invoker对象getproxy创建代理->ref
  • Dubbo SPI
  • ExtensionLoader.getExtensionLoader获取扩展点加载器
  • getExtension 根据name获取扩展实现