Dubbo

1.简述Consumer的动态代理对象Proxy的创建过程。

在创建Consumer的动态代理对象Proxy过程中,主要完成了三项任务:
 获取到包含消费者信息的注册中心URL
 将每个注册中心虚拟化为一个Invoker,即根据每个注册中心URL,构建出一个Invoker
proxyFactory使用Javassist为每个虚拟化的Invoker生成一个消费者代理对象

2.在创建Consumer的动态代理对象Proxy过程中会将每个注册中心都虚拟化为一个Invoker,这个过程较复杂,请简述一下这个过程。

在创建Consumer的动态代理对象Proxy过程中会将每个注册中心都虚拟化为一个Invoker,这个过程主要完成了四项工作:
 将当前Consumer注册到zk中,即在zk中创建相应的节点
 将RouterFactory的激活扩展类添加到directory
 更新Dierectory的Invoker为最新的
 将多个Invoker伪装为一个Invoker,即将Directory实例转换为一个Invoker实例

1.集群容错策略是在何时设置到远程调用过程的?

集群容错策略是在消费者启动过程中就设置到了每一个注册中心中所有真正invokers虚拟出的invoker中的,在远程调用发生之前就已经设置完毕了。

2.负载均衡策略是在何时设置到远程调用过程的?

负载均衡策略是在经过了降级判断、服务路由后,在调用相应集群容错策略的doInovke()方法之前获取到的,是融入到集群容错之中的。真正负载均衡的应用,是在集群容错发生之前发生的。

1.Dubbo中在进行路由过滤时,若提供者不满足路由规则,则该提供者将被踢除。但若消费者不符合路由规则,系统是如何处理的呢?:Dubbo中的路由发生在消费者端消费者远程调用过程中。所以,在进行路由过滤时,若提供者不满足路由规则,则该提供者将被踢除。但若消费者不符合路由规则,则是“直接放行”,即路由规则对其不起作用,其可以调用所有Invokers列表中的Invoker。
2.Dubbo中对于自定义的服务降级处理类类有两种,都各有什么要求呢?:Dubbo中自定义的服务降级处理类有两种:
 固定名称的降级类:要求Mock类的类名为“业务接口名+Mock”,且放在与接口相同的包中。在配置文件中需要设置mock的值为true、default、fail、force中的一个即可。
 任意名称的降级类:降级类名可以是任意名称,在任何包中。在配置文件中需要设置mock的值为该类的全限定类名。

Dubbo的负载均衡策略是何时获取到的?
Dubbo的负载均衡发生在远程调用时的集群容错过程中。而负载均衡策略是在远程调用的服务路由结束之后,在进入相应的容错过程之前通过SPI方式获取到的。系统会从消费者URL中获取到设置的loadbalance属性值,若没有设置,则取默认值random,即默认为加权随机策略。

Dubbo的负载均衡发生之前,首先会判断消费者是否开启了粘连连接功能。什么是粘连连接?

粘连连接是消费者端服务限流的一种间接实现方式。只不过其限制的不是流量,而是流向,即,是一种简易路由。所谓粘连连接是指,让所有对同一接口的指定方法的访问请求,尽可能是由同一Inovker提供服务。这样做既不用再进行负载均衡,又可以充分利用提供者端的缓存,提高系统效率。
粘连连接仅能设置在消费者端,其可以设置为接口级别,也可以设置为方法级别。方法级别是,仅该方法启用粘连连接,只需要在<dubbo:method/>中设置sticky=”true”即可。接口级别则是指,接口中每一个方法均启用了粘连连接,不用再逐个方法设置了。所以,这是一个作用于方法上的配置。

HW机制:该机制在Kafka集群正常运行状态下可以防止partition leader与follower间出现数据不一致。该机制要求,对于partition leader新写入的消息,consumer不能立刻消费。leader会等待该消息被所有ISR中的partition follower同步后才会更新HW,此时该消息才能被consumer消费。

HW截断机制:该机制在Kafka中partition leader出现宕机情况然后又恢复时,可以防止partition leader与follower间出现数据不一致。当原Leader宕机后又恢复时,将其LEO回退到其宕机时的HW,然后再与新的Leader进行数据同步,这种机制称为HW截断机制。

Kafka中的Broker指的就是Kafka集群中的一个节点,就是一台Kafka主机。Broker中可以存放很多的消息,但这些消息是分类存放的,一类就是一个Topic。每一类的消息在一台Broker中都被集中存放在了一起,被放在了一个目录中,这个目录称为Partition。但消息本身并不是文件,其需要存放到文件中。用于存放消息的文件称为Segment。
一个Topic的消息可以被存放到多个Broker中,一个Broker中可以存放一个Topic的多个Partition,而一个Partition中可以存放很多的Segment,一个Segment中可以存放很多的消息。

Kafka中的segment是一个逻辑概念,其包含两类重要的物理文件,分别为“.index”文件和“.log”文件。“.log”文件中存放的是消息,而“.index”文件中存放的是“.log”文件中消息的索引。
这两个文件的文件名是成对出现的,即会出现相同文件名的log与index文件。文件名由20位数字字符组成,其要表示一个64位长度的数值(2的64次方是一个长度为20的数字)。但作为文件名,其数值长度不足20位的全部用0填补。这个64位长度的数值表示当前segment文件之前有多少条消息。

原文地址:https://www.cnblogs.com/Alwaysbecoding/p/13490626.html