面试二十三、dubbo
1、dubbo是一款高性能、轻量级的开源RPC(remote producedure call protocol远程过程调用协议)框架
提供了服务自动注册、自动发现等高效服务治理方案,可以和spring无缝集成。
2、使用场景
1)可以像调用本地方法一样调用远程方法,没有任何API入侵
2)通过部署多节点可实现负载均衡、提高并发能力、提高容错能力
3)服务等自动注册和发现,不在需要写死服务提供方的地址,
注册中心基于接口名可以找到服务提供方的地址,并且能够平滑的删除信息服务提供者
3、经典dubbo架构图
provider:服务提供方
consumer:服务调用方
registry:服务注册中心和服务发现中心
container:服务运行容器
monitor:监控中心和访问调用统计
4、注册和发现的流程
1)container负载启动、加载、运行提供服务的provider
2)provider启动,向registry注册自己提供的服务
3)consumer启动,向registry订阅自己调用的服务
4)registry返回订阅的provider地址列表,如有变更通过长链接推送变更数据给consumer
5)consumer从得到的地址列表中基于负载均衡算法选择一台provider进行调用,失败则换一台
6)provider和consumer在内存中记录调用次数和每次调用的时间,每分钟向监控中心上报
5、注册中心宕机后,provider和consumer还能正常通信吗
可以的,consumer会缓存一份provider地址列表
6、负载均衡策略
random LoadBalance:随机选取提供者(默认)
RoundRobin LoadBalance:轮询平均分布。存在请求累积问题(刚好慢接口都分配到同一provider)
LeastActive LoadBalance:最少活跃调用,解决了累计问题
ConstantHash LoadBalance:一致性哈希,相同参数发到同一provider
7、集群容错方案
Failover Cluster:失败自动切换,重试其他服务(默认)
Failfast Cluster:快速失败,只发起一次失败则报错。适合非幂等写操作,如新增记录
Failsafe Cluster:失败忽略
Failback Cluster:失败恢复,后台记录失败消息,定时重复
Forking Cluster:并行调用多个服务,只要一个成功即返回。
Broadcast Cluster:广播所有服务,一台报错即报错。
8、核心配置
service:用于暴露一个服务,定义服务的元信息,一个服务可注册到多个注册中心
reference:用于创建一个远程服务代理,一个引用可指向多个注册中心
protocol:协议,由提供方指定,消费方被动接受
application:用于配制当前应用信息
registry:用于配制注册中心
9、协议
dubbo:单一长链接和NIO异步通讯,适合大并发数据量小的服务调用。
传输协议TCP,异步hession序列化。(推荐)
10、过渡旧版本api可通过version,不同version之间不能调用
11、序列化方式
hession、fastjson、java、dubbo
12、服务调用是阻塞的吗
默认是阻塞的,可以异步调用(没有返回值的情况可以使用)
dubbo是基于NIO的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务
posted on 2021-08-30 21:06 Iversonstear 阅读(41) 评论(0) 编辑 收藏 举报