- 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获取扩展实现