【背】1/20, 刷题1:题目-文档 3.Dubbo的主要应用场景? 4.Dubbo的核心功能?3个 5.Dubbo的核心组件?5个 6.Dubbo服务注册与发现流程? 7.Dubbo的架构设计? 10个层 8.Dubbo的服务调用流程? 9.Dubbo支持哪些协议? 10.Dubbo推荐使用什么协议? 11.Dubbo有哪些注册协议? 12.Dubbo的服务治理? 13.Dubbo注册中心挂掉,Provider和Consumer还能通信吗? 14.Dubbo和Spring的关系? 15.Dubbo的通信协议框架? 16.Dubbo提供哪些负载均衡策略? 17.Dubbo的集群容错方案?? 18.Dubbo默认集群容错方式? 19.Dubbo支持哪些序列化方式? 20.Dubbo超时时间怎样设置? 21.服务调用超时时间怎么解决? 22.Dubbo在安全机制方面怎么解决? 23.Dubbo和Dubbox之间的区别? 24.除了Dubbo还有什么分布式架构? 25.Dubbo和SpringCloud的关系? 26.Dubbo和SpringCloud的区别? Dubbo:基于TCP的RPC框架,NIO通信框架,SOA的产物, SpringCloud: 刷题2:
第25题:Dubbo原理。 什么事Dubbo?搭建分布式系统的RPC框架。 Dubbo角色:Provider,Consummer,Registery。 注册中心的中间件:用Zookeeper。
第5题:Dubbo有哪些模块?底层通信原理? 第16题:如何设计Dubbo类似的RPC? 第11题:dubbo的实现原理,RPC的要点。 dubbo的基本架构,几个组件说一下。 dubbo的负载均衡怎么做,讲一下具体代码实现。
- 第29题:微服务和SOA的区别,优劣势。 区别: SOA集成多个较大的组件,整体构成一个彼此协作的套件,着重中央管理。 微服务业务逻辑拆分成一系列小而松耦合的分布式组件,共同构成了大的应用。每个微服务被其他微服务调用,着重分散管理。 微服务优点:独立部署,解决了复杂性,每个微服务专门团队负责。 微服务劣势:更新多个微服务的分布式事务。测试多个微服务比较复杂。
【Dubbo】4、RPC中间件的原理(Dubbo),服务注册、服务发现、节点失活、序列化方式、通信调用过程。
Dubbo手册: 架构设计: 从上至下分10层,各层均为单向依赖,Service和Config层为API,其他层均为SPI。 Service: Config: Proxy: Registry: Cluster: Monitor: Protocol: Exchange Transport Serialize
Dubbo SPI
SPI Service Provider Interface:服务发现机制。将接口实现类的全限定名配置在文件中,由服务加载器读取配置文件,由服务加载器读取配置文件&加载实现类。可以运行时动态为接口替换实现类。Dubbo通过SPI机制加载所有组件。
Java SPI:
interface接口,实现类,配置文件:META-INF/services/下的接口名的文件。
public class JavaSPITest {
@Test
public void sayHello() throws Exception {
ServiceLoader serviceLoader = ServiceLoader.load(Robot);
System.out.println("Java SPI"); serviceLoader.forEach(Robot::sayHello);
}
}
Dubbo SPI: ServiceLoader封装为ExtensionLoader类。 配置:键值对 接口上标注@SPI
Dubbo IOC:通过setter方法注入依赖。
服务导出 Dubbo的服务导出过程始于Spring容器发布刷新事件,Dubbo接收到事件后立即执行导出逻辑。 Dubbo服务导出的3个部分: 1前置任务:参数检查,组装url 2导出服务:导出服务到本地,导出服务到远程 3向注册中心注册服务,用于服务发现。
服务引用 2种方式引用服务:服务直连,基于注册中心。 Dubbo服务引用的2个时机: 懒汉式引用:默认引用方式。其他类调用服务时引用 饿汉式引用:Spring容器引用服务
服务字典 服务目录:包含服务提供者相关的信息,消费者可以得到服务提供者的信息。
服务路由 服务路由包含一条路由规则,路由规则决定了消费者调用哪些服务提供者。 3种服务路由:条件路由,脚本路由,标签路由。
集群 Dubbo容错方式: failover cluster:重试2次 failfast cluster:快速失败,非幂等性的增加,新增记录 failsafe cluster:忽略 failback cluster:失败记录日志,后台定时重试 forking cluster:默认fork*2,同时发送多个Provider请求,有一个成功即返回 broadcast cluster:广播请求所有Provider,有一个错误即失败
负载均衡 负载均衡:硬件负载均衡/F5,软件负载均衡/nginx/lvs Dubbo负载均衡:对消费者的调用请求进行分配,避免少数服务提供者负载过大。 Dubbo负载均衡策略:权重随机算法/默认,最少活跃调用数算法,hash一致性,加权轮训算法 权重计算过程,当服务运行时长小于服务预热时间,对服务进行降权。 服务预热是一个优化手段,类似有JVM预热。
服务调用过程
【消费者】消费者通过代理Proxy发起远程调用,接着通过网络client将编码后的请求发送给Provider的网络层上。 【提供者】Server接收到请求后解码数据包,解码后的请求发送到分发起Dispatcher,再由分发器转发到指定线程池,最后由线程池调用具体服务。
Dubbo服务调用方式:同步/默认,异步/有返回值&无返回值 默认情况下,Netty作为默认底层通信框架。 Dubbo消息包分为:消息头(存储元数据/消息包类型,消息长度等),消息体(方法名称,参数列表等)。