BAT技术面dubbo还能这么问?
1、为什么要用 Dubbo?
随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。就这样为分布式系统的服务治理框架就出现了,Dubbo 也就这样产生了。
2、Dubbo 的整体架构设计有哪些分层?
接口服务层(Service): 该层与业务逻辑相关,根据 provider 和 consumer 的业务设计对应的接口和实现
配置层(Config): 对外配置接口,以 ServiceConfig 和 ReferenceConfig 为中心
服务代理层(Proxy): 服务接口透明代理,生成服务的客户端 Stub 和 服务端的Skeleton,以 ServiceProxy 为中心,扩展接口为 ProxyFactory
服务注册层(Registry): 封装服务地址的注册和发现,以服务 URL 为中心,扩展接口为 RegistryFactory、Registry、RegistryService
路由层(Cluster): 封装多个提供者的路由和负载均衡,并桥接注册中心,以 Invoker为中心,扩展接口为 Cluster、Directory、Router 和 LoadBlancce监控层(Monitor):RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory、Monitor 和 MonitorService
远程调用层(Protocal): 封装 RPC 调用,以 Invocation 和 Result 为中心,扩展接口为 Protocal、Invoker 和 Exporter
信息交换层(Exchange): 封装请求响应模式,同步转异步。以 Request 和Response 为中心,扩展接口为 Exchanger、ExchangeChannel、ExchangeClient 和 ExchangeServer
网络传输层(Transport): 抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel、Transporter、Client、Server 和 Codec
数据序列化层(Serialize): 可复用的一些工具,扩展接口为 Serialization、ObjectInput、ObjectOutput 和 ThreadPool
3、默认使用的是什么通信框架,还有别的选择吗?
默认也推荐使用 netty 框架,还有 mina。
4、服务调用是阻塞的吗?
默认是阻塞的,可以异步调用,没有返回值的可以这么做。Dubbo 是基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个 Future 对象。
5、一般使用什么注册中心?还有别的选择吗?
推荐使用 Zookeeper 作为注册中心,还有 Redis、Multicast、Simple 注册中心,但不推荐。
6、默认使用什么序列化框架,你知道的还有哪些?
推荐使用 Hessian 序列化,还有 Duddo、FastJson、Java 自带序列化。
7、服务提供者能实现失效踢出是什么原理?
服务失效踢出基于 zookeeper 的临时节点原理。
8、服务上线怎么不影响旧版本?
采用多版本开发,不影响旧版本。
9、如何解决服务调用链过长的问题?
可以结合 zipkin 实现分布式服务追踪。
10、说说核心的配置有哪些?
11、Dubbo 推荐用什么协议?
12、同一个服务多个注册的情况下可以直连某一个服务吗?
13、画一画服务注册与发现的流程图?
14、Dubbo 集群容错有几种方案?
15、Dubbo 服务降级,失败重试怎么做?
16、Dubbo 使用过程中都遇到了些什么问题?
17、Dubbo Monitor 实现原理?
18、Dubbo 用到哪些设计模式?
19、Dubbo 配置文件是如何加载到 Spring 中的?
20、Dubbo SPI 和 Java SPI 区别?
21、Dubbo 支持分布式事务吗?
22、Dubbo 可以对结果进行缓存吗?
23、服务上线怎么兼容旧版本?
24、Dubbo 必须依赖的包有哪些?
25、Dubbo telnet 命令能做什么?
26、Dubbo 支持服务降级吗?
27、Dubbo 如何优雅停机?
28、Dubbo 和 Dubbox 之间的区别?
29、Dubbo 和 Spring Cloud 的区别?
30、你还了解别的分布式框架吗?
需要其余问题答案的关注gzh“程序员小x”私信领取哦!另外喜欢这篇文章的可以给笔者点个赞,关注一下,每天都会分享Java相关文章!还有不定时的福利赠送,包括整理的学习资料,面试题,源码等~~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
最新115道华为、京东、滴滴、美团精选Java面试题整理
京东面试题 一般sql注入怎么发现触点的,从源码阐述sqlmap如何测试注入点的。 masscan扫描端口时靠什么检测,为什么这么快? 请详述. 你写过哪些小工具,你为你使用过的工具做过什么修改. 如何提高采用python编写的扫描速度,谈谈对GIL锁的了解.5.你觉得你发现的那个漏洞影响比较大. 常见的web漏洞有哪些. 有没有玩过硬件安全,研究程度如何. 反爬虫,如果是你如何进行反爬虫,如何绕过反爬措施。使用无头浏览器被检测到了,如何绕过 nmap扫描如何进行扫描。发包与协议,握手和不握手,哪些协议握手,哪些不握手. 如何不直接接触目标服务器探测对方端口是否开放 有没有自己编写过yara扫描模块,如果要解决扫描{k1:v1, k2:v2, k3:v3} ,保证同时在k1中的v1里出现特定值,k2中出现v2特定值,以及k3,v3。怎么实现 xss什么原理,如何自己实现一个beef类似的xss平台. 既然这样实现,面临的跨域如何解决? ip 频率限制, ip信誉度模型? SCTP协议是什么?如何使用 SCTP 优化网络? 美团面试题 java虚拟机内存模型 内存溢出一般发生在哪个区?永...
- 下一篇
yaml转json,json转yaml,使用js-yaml实现yaml和json转换
使用js-yaml这个js库进行json和yaml转换 在线DEMO 效果 json转yaml function toYaml() { let json = area_json.innerText; if (json) { try { let jsonObj = JSON.parse(json); area_yaml.innerHTML = hljs.highlight("yaml", jsyaml.dump(jsonObj)).value; area_json.innerHTML = hljs.highlight("json", json).value; } catch (e) { alert(e) } } } yaml转json function toJson() { let yaml = area_yaml.innerText; if (yaml) { try { let json = JSON.stringify(jsyaml.load(yaml), null, 2); area_json.innerHTML = hljs.highlight("json", json).val...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Mario游戏-低调大师作品
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Red5直播服务器,属于Java语言的直播服务器
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库