面试八股文之Dubbo
什么是Dubbo?
问:为什么使用Dubbo,不用thrift和gRpc等框架
答:Dubbo提供了服务治理和自定义序列化方式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SmzEexuo-1645604216850)(/Users/didi/Library/Application Support/typora-user-images/image-20220223150725293.png)]
问:能讲讲Dubbo的架构设计吗?
答:Dubbo主要有服务提供方(Provider)、注册中心(Registry)、还有服务消费方(Consumer);以及服务调用监控(Monitor)和服务运行容器(Container);Provider向Registry注册并暴露服务,Consumer向注册中心进行服务发现,然后invoke调用Provider;
问:说一说服务暴露的问题?
答:服务的暴露起始于 Spring IOC 容器刷新完毕之后,会根据配置参数组装成 URL, 然后根据 URL 的参数来进行本地或者远程调用。
会通过 proxyFactory.getInvoker
,利用 javassist 来进行动态代理,封装真的实现类,然后再通过 URL 参数选择对应的协议来进行 protocol.export,默认是 Dubbo 协议。
在第一次暴露的时候会调用 createServer 来创建 Server,默认是 NettyServer。
然后将 export 得到的 exporter 存入一个 Map 中,供之后的远程调用查找,然后会向注册中心注册提供者的信息。
问:说一说Dubbo的服务发现以及均衡策略?
答:Dubbo里面有注册中心,Provider会把自己的服务向注册中心进行注册。Provider如果是集群的部署方式,那么集群里面的服务都会注册到注册中心,那么Consumer就可以通过注册中心发现可用的服务Provider;常用的均衡策略有顺序、轮询、最少活跃、一致性Hash
- 随机:随机的选择一个。是Dubbo的默认负载均衡策略。
- 轮询:轮询选择一个
- 最少活跃:选择响应较快的服务进行调用
- 一致性Hash:同样的请求总是请求同一台Provider
(Ps:Dubbo还有很多细节,待补充)