Dubbo的工作原理是什么?[面试7.0]
Dubbo原理
Monitor:监控中心(可统计调用次数)
Provider:暴露服务的服务提供方
Registry:注册中心
Consumer:调用远程服务的消费方
Container:服务运行的Web容器(如Tomcat)
(1.start)Web容器启动
(2.register)服务提供者向注册中心异步注册服务(包含服务,端口,Ip等信息)
(3.subscribe)消费者启动向注册中心订阅服务
(4.notify)注册中心返回提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者(如果服务提供者Ip换了也没事,注册中心会推给消费者,消费者再次拉取服务列表)
(5.invoke)消费者invoke同步调用远程接口,dubbo基于负载均衡算法,选一台提供者进行调用,如果调用失败则选择另一台。
(6.count)消费者和提供者,在内存中累计调用次数和调用时间,定时发送一次统计数据到监控中心
Dubbo的集群容错的机制是怎样的?[面试7.0]
Dubbo容错机制
Failover模式(失败重试): 默认模式,失败自动切换,当出现失败则重试其它服务器,通常用于读操作,但重试会带来更长延迟,可通过retries来设置重试次数
Failover模式(失败异常): 只发起一次调用,失败后抛出异常,适用于幂等操作,如添加记录
Failsafe模式(失败忽略): 发生错误,直接忽略,即错了也没关系,常用于审计日志
Failback模式(失败补偿): 调用失败后返回一个空给消费者,并记录日志,过后通过任务调度进行重放,常用于补偿机制
Forking模式(并行单反): 并行调用多个服务者,若一个服务者返回成功即成功,就结束调用,常用于实时性要求很高的场景,但会消耗较多资源
Broadcast模式(集群广播): 广播模式,循环调用每一个服务提供者的实现,若其中一个返回失败,消费者会抛出异常,常用于通知所有提供者更新缓存或资源
记忆关键: 失败重试->失败异常->失败忽略->失败补偿->并行单反->集群广播
Dubbo的负载均衡算范有哪些?[面试7.0]
按权重随机(Random LoadBalance):
调用量越大分布越均匀(默认算法)
按权重轮询算法(RoundRobin LoadBalance):
多次请求,依次序调用服务提供者,若某台机器调用慢,易出现卡在该机器上,这时可以采用加权来协调
最少活跃数算法(LeastActive LoadBalance):
活跃数指调用前后计数差,这种算法可以使慢的服务提供者收到较少的请求
一致性Hash算法(ConsistentHash LoadBalance):
相同参数的请求会被路由到同一个服务提供者