粉丝257获赞2484

对于什么是 double, 他有哪些核心功能这个问题啊,看看普通人和高手是如何回答的。普通人的回答,呃, double, 他是一个高性能的 rpc 框架,他提供了一些呃,像分布式架构的一些通讯的解决方案啊,然后, 嗯,我们利用打火的话,是可以去去去去屏蔽那种像底层网络通信的一些细节,然后可以 使得我们去做这种远程通信的时候啊,就不需要去关心通信细节,还有一些配置的一些东西,然后我们就可以直接,嗯,像调用本地的方法一样去调用远程服务啊,这是大宝的, 我就当过的一个理解。嗯, 高手的回答,大宝呢是一个高 性能轻量级的开源 rpg 框架,他由十层模型来构成,整个分层的依赖呢,由上到下通过这张图呢可以去进行一个了解。 我们也可以把大宝呢理解成三层模型,第一层是 beastness 业务逻辑层,由我们自己来提供接口和实线,还有一些配置信息。第二层是 rpc 调,我们的核心层负责封装和实现整个 rpc 的调用过程,负载均衡、集训、容错、 代理等核心功能。第三个是 remote, 是对网络传输协议和数据转化的一个封装。根据 double 的官方文档的介绍呢, double 可以提供六大核心能力,第一个是面向接口代理的高性能 rpc 钓友,第二个是智能容错和负载均衡,第三个是服务的自动注册和发现, 第四个是高度可扩展能力,第五个是运行期流量调度,第六个是可视化的服务治理和运维。好,那你再进入说一下达博中的关于负载均衡的一些策略吧, 达果呢,有五种负载宣传策略。第一种是甲醛随机,所谓的甲醛随机就是通过区间的随机算法 去获取一个目标服务器,但是这个区间算法中,我们可以针对某一个服务器去增加权重,从而去获得更大的一个调用可能性。第二种是最小活跃数, 每一个服务提供者呢,对应一个活跃数的 it 初始情况下呢,所有服务者的活跃数都为零,每次收到请求活跃数加一完整请求后,再将活跃数减一,在服务运行一段时间之后呢,性能好的服务提供者的处理 请求的速度更快,因此活跃数下降的也越快,这个时候服务提供者就能够去优先获得新的请求。 第三种是一次性哈吸,也是说根据同一个客户端请求,通过一次性哈吸算法会录到一个目标服务器上, 只要请求的信息没有变化的情况下,他的请求永远会落到一同一台目标服务器。第四种是加权轮巡,也是按照目标服务器按照一二三一二三这种方式去轮寻 而家权,是说我们可以针对目标服务器的某些性能好的节点去增加权重,从而使得这样一个服务器能够获得更多的一个调用。第五种 是最短响应时间的权重随机,也就是说他会计算目标服务的请求的响应时间,去根据响应时间最短的服务去配置更高的权重,然后进行区间随机算法,从而得到一个目标服务进行 进行访问。呃 w 的工作原理是什么样子的?你可以简单说一下吗?第一个啊,服务启动的时候呢,服务提供者和服务消费者根据配置信息呢,会连接到注册中心,分别向注册中心去订阅和注册服务。第二个, 注册中心呢,会根据订阅关系去返回服务提供者的信息到我们的服务消费者。同时服务消费者会把服务提供者的信息缓存到本地,如果信息发生变更,消费者会收到注册中心的一个推送,去更新本地的一个缓存。 第三个,服务消费者会生成代理对象,同时根据负债均分策略去选择一台目标的服务提供者,并且定时向 monitor 记录接口的调用次数和时间信息。第四个,拿到代理对象之后,服务消费者通过 代理对象发起接口的一个调用。第五个,服务提供者的收到请求后,会根据数据进行反序的话,然后通过代理调用具体的接口的一个实现,这是整个 w 的一个原理和实现过程。 嗯,你最后再说一下达摩跟斯文靠的一个区别是什么样的?好,那对这个问题呢,我会从两个方面来回答。第一个, 他的关注点 double 是 soa 时代的产物,他的关注点主要在于服务的远程调用、流量分发、服务治理、流量控制等等这样一些方面。而 speco 等呢,是诞生于微服务架构时代, 他关注的是微服务的整个生态的解决方案。另外呢,成靠的依托于 spring 和 spring 布的生态,所以两个框架的目标是不一致的,搭伙定位于服务治理, spring 靠的是一个微服务解决生态。第二个,两者 最大区别是 double 底层使用的是 native 这样的一个 n i o 框架,是基于 tcb 协议进行传输,然后通过 handsome 等序列化的方式去完成 rpg 的通信。而是 mccolud 等呢,是基于 sup 协议加上 rist 风格的一个接口去实现远程通信。 相对来说啊, htb 请求会有更大的一些,豹纹在我们单位会混更多,效率上比 double 会更差一些。但是 rat 相比 rpc 来说会更加灵活,服务提供方和服务调控方只需要根据 ht 协议的一个契约去完成通信就行了。以上就是我的一个理解, 好的,看完了高手的回答之后呢,相信看完这个视频的小伙伴对于大宝呢有了更深刻的理解。 本期的普通人 vs 高手系列的视频就到这结束了,喜欢的朋友记得一键三联加关注,我是有时三年开发经验的家务程序员 mike, 咱们下期再见!

今天分享的面试题,几乎是百分之九十以上的互联网公司都会问到的问题,达宝的服务请求失败怎么处理?对于这个问题呢,我们来看一下普通人和高手的回答。普通人的回答,嗯, 呃,我想一下啊,嗯,我记得达宝的请求失败了以后,他会从事,呃,应该是会从事三次。 嗯,好像还有其他的一个处理方式,就是打宝他这边请求失败了之后,嗯,就是, 对,还有一个就是失败了以后就可以继续对,直接可以返回异常那种。嗯,高手的回答,嗯,大宝呢,是一个 rpc 框架,他为我们的应用提供了远程通信的能力。同时啊,达宝在 rpc 通信的基础上去逐步再向一个生态,在眼镜,他涵盖了服务注册、动态路由、容错、服务降级、负载均衡等等一些能力。 基本上啊,在微服架构下,我们面临的一些问题, double 他都可以解决。而对于 double 服务请求失败的场景呢,默认提供了从事的容错机制。也就是说,如果基于 double 进行服务间通信出现异常, 服务消费者会对服务提供着集群中的其他节点去发起重视,确保这一次请求是成功的,默认的情况下,额外的从事次数是两次。 除此之外,啊,大伯还提供了更多的容错策略,我们可以根据不同的业务场景来进行选择。首先第一个是快速失败的策略, 服务消费者只发起一次请求,如果请求失败,就直接把错误抛出去,那么这种适合在一些非密等性的场景中去使用。第二个失败安全策略,如果出现服务通信异常, 直接把异常吞掉,不做任何处理。第三个是失败自动恢复策略,后台去记录失败请求,然后通过定时任务来把这些失败的请求进行重发。 第四个是并行调用多个服务的一个策略,就是说把这个消息广播到服务提供者的集群,只要有任何一个节点返回,就表示请求执行成功。第五个广播调用策略, 逐个去调用服务提供的集群,只要集群中的任意一个节点出现异常,就表示本次请求是失败的。要注意的是啊,默认基于从事策略的 农作机中,需要注意密等性的处理,否则呢,在事物型的操作中,很容易出现多次事物变更导致的一些问题。以上就是我对于这个问题的理解, 其实啊,这类问题呢,并不需要花太多的时间去背,如果你对于整个技术体系有一定了解的话,你就很容易去想象到最基本的处理方式,即便你对达博不熟悉,也能够回答一两种, ok! 本期的普通人 vs 高手面试系列的视频就到这结束了,喜欢的朋友记得点赞和收藏。另外,我也陆续收到了很多小伙伴的面试题,我会在后续的内容中会逐一给大家去更新。我是麦克,一个工作了十四年的家务程序员,咱们下期再见!

其实啊,我个人不太愿意拿大宝和斯贝克闹得来进行对比,因为他们俩最初出现并不是为了去解决同一类问题的,但是呢,国内技术呢,实在是太卷了,加上微服务盛行,很多互联网大厂呢,也经常会问到这么个问题。那么今天呢,我还是给大家来详细聊一聊这个问题。 关于大伯和斯贝克闹的的优缺点呢,我以赖菲版本为例啊,从以下五个方面来进行分析。第一个方面呢,就是从整体架构上来看,大伯呢和斯贝克闹的模式啊,都比较的接近,都需要服务的提供方,注册中心,服务消费方,但是呢,他们之间的差异并不大, 这是大宝的架构图,而斯布林克闹得的架构图是这样的。第二个方面呢,从核心要素来看,斯布克纳德呢,应该更胜一筹。在开发过程中啊, 只要整合斯贝克闹着的子项目,就可以顺利完成各种组建的融合。而大伯呢,需要我们通过实现各种的非要者来进行定制,那开发成本呢,以及技术的难度会更加高一些。 第三个方面呢,从协议上来看,大伯呢默认采用的是单一的长连接和 n o 的一部通信,他适用于小数据量大并发的服务家用。大伯呢,还支持其他的各种通讯协议。 sblog 呢,使用 http 协议的 rich 的 apr 风格,因此呢,在通讯速度上,达宝略胜一筹。第四个方面呢,是从服务依赖方式来看,达宝的服务依赖呢比较重, 他需要完善的版本管理机制,但是呢,程序的入侵比较小。而斯布克纳德呢,是自由生态,他省略了版本管理的问题,而且他使用的是节省进行交付,为跨平台的电用定定了基础。第五,更好 方面呢,是从主界运行的总流程来看,大部的每一个主界都需要去部署在单独的服务器上,比如说 get 位,是用来接收前端的请求,聚合服务,并且呢,去批量调用后台的原子服务。而每个事物此生呢,和单独的 db 来进行交互。 sbxlot 的呢,所有的请求都是统一通过 api 网关,比如说注来访问内部的服务,那网关接触了请求以后呢,从注入中心,比如说有瑞卡就可以获取可用的服务,由 rap 呢进行复载均衡后,再分发到后端的具体实力。 微服直接的通信呢,通过费用来进行通信处理,但是呢,两者的业务部署方式都是相同的,都需要前置一个网关来隔绝外部的直接调用原子服务的风险。那大伯呢,是需要自己再来开放一套 api 网关,而 spring cloud 呢,就可以通过入来进行配置来完成网关的定制。所以呢,从使用方式上来说, surprinclove 呢,更加方便。以上呢,就是我对 double 和斯门克 loud 的理解, 我是被编程耽误的文艺汤,如果我的分享对你有帮助,请你动动手指,一键三连分享给更多的人,关注我,面试不再难!

一、天一道面试题, double 支持哪些调用协议? double 支持九种调用协议。一、 double 协议基于 heaven 作为序列化协议,单一长连接。 tcp 协议传输也拿 oe 不通信,适合大并发、小数据量的服务调用,传输量很小,并发量很高。二、 rmi 协议 采用 jdk 标准的 jover 点 rm。 二、实线,采用阻塞式短连接和 jdk 标准序列化方式。 tcp 协议传输 使用同步传输方式,可传文件,适用于常规远程服务方法调用与原声 rma 服务户操作。三、 hishen 协议 hishen 协议用于集成 heshen 服务,可以实现多个短连接。使用 h t t p 同步 传输可传文件,适用于页面传输、文件传输或与原生 hesitan 服务互操作。四、 h t t p 协议基于 h t t p 表单提交的远程调用协议, 使用 spring 的 h t t p novok 视线,适用于需同时给应用程序和浏览器 j s 使用的服务。 五、 web service 协议基于 web service 的远程调用协议,集成 c x f, 实现提供和原声 web service 的互操作,适用于系统集成跨语言调用。六、 service 协议 当前 double 支持的自费协议是对自费原声协议的扩展,在原声协议的基础上添加了一些额外的头信息,比如 service name, magic number 等。起 mimcake 协议,基于 mimcake 实现的 rpc 协议。 八、 ready 协议基于 ready 实现的 r p c 协议。九、 restful 协议基于标准的 java res, a p i 实现的 res 调用,支持。

什么情况?一个工作了五年的家务程序员竟然无法去回答这个问题?那大宝是如何动态感知服务下线的?关于这个问题,我们来看看普通人和高手的回答。普通的回答,嗯, 达宝如何感知到服务的下线啊?呃,这里面应该是就是我我我就是。达宝一般是基于这做 kipper 来做作中心嘛。然后呃感知的下线的话,我记得里面应该是有一个 叫沃尔许的机制,就是呃一种事件的机制吧,就是说呃,因为他的那个地址是存在出 qq 上嘛,对不对?所以就是 嗯在,嗯,就是当我的这个地址发生变化的时候呢,就呃出去把,他会推送一个事件告诉达博,达博呢,这边收到事件之后他会去去把这个这个这个这个本 本地的这个啊地址给他删除掉。嗯,高速的回答,好的,面试官啊,关于这个问题呢,我会从几个方面来回答,首先啊, double 默认采用了猪 keeper 来实现服务的注册和发现,简单来说呢,就是说多个 double 服务之间的通信地址啊,是使用猪 keeper 来维护的。 在做 k 本上呢,会采用塑形的结构来维护 double 服务提供方的一个协议地址, double 的服务消费短会从主 k p 上去查找目标服务的地址列表, 从而去完成整个服务的注册和发现这样一个功能。并且呢,猪 people 会通过心跳的检测机制来判断搭伙服务提供端的一个运行状态,来决定是否应该去把这个服务从地址列表里面去踢出。 当 double 服务提供方出现故障导致猪 keep 踢出了这个服务地址的时候,那么 double 服务的消费端需要去感知到地址的变化,从而去 避免后续的请求发送到故障节点,导致请求失败。也就是说呢, double 要提供服务的下线的动态感知能力,那么这个能力呢,是通过出 keep 里面提供的 watch 机制来实现的。简单来说呢, double 的服务消费端啊,会使用出 keep 里面的 watch 来针对出 keep a seven 上的一个 provide 的节点去注册一个监听, 一旦这个节点下面的指节点呢发生了变化,那么足 q 十二万呢,会去发送一个事件通知 double clan 的端,那么 double curan 的端呢,会收到事件之后啊,就会去把本地缓存的这个服务地址踢除,这样的话后续就不会把请求发送到失败的节点上,从而去完成服务下线的这些感知。以上呢,就是我对这个问题的理解, 打狗呢是目前非常主流的开源的 rpc 框架,在很多的企业里面都有使用,理解这个 rpc 的底层的工作原理呢,很有必要他能够去帮助开发者 就提高开发问题的解决效率。我还是想多说一句啊,在加往这个岗位上,如果你想走的更远,一定要花苦功夫。好的,本期的普通人 vs 高手的面试系列的视频呢,就要这样结束了,有任何不懂的技术面试题呢,欢迎随时私信我, 我是麦克,一个工作了十四年的家务程序员,咱们下期再见。

当我能喝的酒,我觉得如果现在不可信的话,有淘汰的那个威胁,当然了诉求变得更多了。那我觉得如果在这个节节点上我们再进行一次可信的话,我觉得他有很长的这个生命力。以前觉得开远就是一个自由,他应该是突破任何的束缚,突破任何的常规,然后那才是真正的开远。就会觉得有企业 以商业目的去推动的一个项目,他就不够纯粹。嗯,所以一开始去接触像大爆炸的项目,就会觉得,嗯有点那种山寨的感觉,但是慢慢的你会发现其实这些项目他是有自己的生长轨迹的。

spring cloud 和 double 的区别啊?这个呢,也是面试中的这个面试官啊,比较喜欢去问的这种问题啊,就是主要考察的是什么?就是你对这个技术这个大概的一个掌握啊,其实这个也问不出什么很底层的东西啊, 当然这个主要是看你这个对这个两个技术啊,就是有没有一个最基本的掌握。那么实际上这个大伯呢,他火的比较早啊,就是 就是以前我们做这个分布式服务的时候啊,还没有出现微服务这个概念啊,还没有这个微服务概念还没有这么火的时候,那个时候呢大补用的是非常之多的啊,那么那个时候是这个 supreme cloud 呢,是还还没有这么火,也就是说这个 supreme cloud 在后面才火起来, double 呢,火的比较早,那么在之前呢,做这种分布式服务的情况下,那么一般呢,优先呢是采用这个 double 去做这个分布式啊,然后呢在后面慢慢的出现了微服 服务,对吧?出现了微服务,然后这个出现了这个 spring boot, 出现了 spring boot 之后,那么呢这个呃 spring cloud, 那么相应的呢,也是跟着这个火起来了啊,那么这个 spring cloud 跟这个 double 对吧?他们各自啊到底有什么样的区别? 呃,韩飞老师这里呢,从几个呃比较重要的一个维度啊,就是分析了一下,当然了没有很很详细的这个对比啊,那么你这个具体的这个实线层面呢,肯定是大不一样,对不对?那么我们这边呢,主要主要是基于这个最最重要的这几点区别来做分析啊。其实面试官想考察的无非也是啊,这么几个点啊, 首先第一个点呢,是这个底层协议,要明白第一个点,这个 spring cloud 呢,它是基于这个 s g d p 协议的啊,我们用 spring cloud 去开发的接口呢,一般都是 rest a b i 的吧,这个大家,呃使用 spring cloud 的话应该都知道啊,那么是 spring 啊,是 rest a b i 也就是 rest 风格的这种 a b i 那么 res 的呢,实际上它也是使用这个 s g d p 协议,对不对?也是 s g d p 协议啊,所以说白了,那么呢,其实是基于 s g d p 协议,也就是我们应用层的协议啊,好, double 呢,它是基于这个 t c p 协议,因为 double 呢,我们呃 有也也也业界啊,有很多种说法,对吧?可以把这个大伙叫呃说成一种是什么 r b c 框架啊,那么这个 r b c 的话,实际上呢,它就可以 r b c 呢?当然 r b c 也可以基于 s g d p, 也可以基于 s g d p 去做实现,对吧?当然了,也可以去基于这个 t c p 做实现,都是可以的。 那么这个大伯说它是一个 r b c 框架啊,它的这个里边实现的这个 r b c 呢,它是基于这个 t c p 这个协议去做的, 所以呢,从协议层啊,就能够保证这个 double 的这个性能呢,会比这个 sprinkler 呢,会好那么一点啊。当然 sprinkler 呢,也可以去选择这个 g r b c 啊, sprinkler 的也可以去选用 g r b c 这种协议,当然这个就是其他的另外的一个问题了啊, 好,所以说啊,就是,呃,正常的这个斯文格拉的基于 sddp 协议,那么它的性能会比这个大伯要弱一点啊,因为大伯呢,基于 tcp 是传输层的协议,比应用层的协议,对吧?你这个 sddp 也是基于 tcp 啊,对不对?所以说这个 dcp 本身呢,这个性能肯定会比 sddp 要高啊。好, 那么第二个就是,呃,说了这个底层协议之外啊,第二个就是这个注册中心,就说白了就是这个,其实这个注册中心呢,说到底其实就是 jk 跟 uraka 的一个区别。 uraka 啊, 那么 jk 跟幼儿卡呢? jk 呢,是选用的 c p 对吧?然后幼儿卡呢,选用的是 a p 啊,也就是我们呃所说的这个 c i p 理论啊,这个其实也是也是 spring glove 的跟 double 啊,这个区别中很呃,很重要的一点啊,那么 j k 呢,保证了这个数据的强一直 性,对吧?强一致性啊,那么的他保证不了的,这个他的这个可应该说他这个可用性啊,不如这个优乐卡,不如优乐卡,因为呢,这个 jk 在进行这个风味恢复的时候,他这个肌群是不可用的啊,保证肌群的强强一致性,他的这个肌群中主节点啊,一定会跟肌群中的超过半数以上的节点呢,保持数据一致, 如果如果达不到一致的话,那么就进就会了,进入这个崩溃恢复,然后进行重新重新选举啊,所以说 jk 呢,是保证的强一致,然后幼儿卡呢,不一样,幼儿卡不是强一致啊,幼儿卡的话主要集,只要集训中还有一个节点可用,那么整个幼儿卡就可用, 只要有一个节点可用,整个优惠卡都可用啊,所以说它保证的是高可用,真正的高可用啊, a c, 但是这种呢,你,你只有一个节点,你还可用的话,那么这个说白了这个数 具一致性,就没有保证这个强一致性,对吧?啊,然后呢,这个优尔法还提供了一些什么客户端缓存呐等等等等啊,一些机制,那么他主要遵从的是这个 ap 高可用,保证的高可用,然后 jk 呢,保证的是这个强一致啊,好,那么这个是 springcloud 跟 double 在注册中心这一块的一个区别。第三点呢,就这个模型定义, 这模型定义这一块呢,其实也是 double, 为什么说在后边啊,就是这个微服务后面啊,就是为什么选用十分 cloud 的越来越多啊,那么啊,其中一个原因是因为了这个 double 啊,它是将一个接口呢定义为一个服务, 一个接口,一个服务,对吧?但是我们的 spring cloud 呢,大家都知道 spring cloud 主要是做这个微服务啊,那么微服务的话,其实是呢,一个应用定义为一个服务,也就是说这是真正的这个微服务啊,这个已经把这个呃服务的力度啊,已经把它降到很低很低了,对吧?一个应用定义为一个服务,这是他的一个模 模型定义啊,所以说呢,通常啊,我们讲呃这个大伯呢,我们一般都都只会讲这个大伯的分布式,对不对?你会不会说这个大伯去做微服务,一般都不会这么去讲,对不对?因为大伯啊,他是将一个接口定为一个服务啊,而 sprinklod 中呢,是一个应用定义为一个服务,所以说 sprinklerd 更适合了做这个啊,微服务啊, 但这个微服务跟分布式其实只是一个服务力度的一个区分啊,所谓的微服务并没有要求你一定要把这个服务一定要降到应用这一个级别来,对不对?那这个微服务只是一个力度的一个划分啊,看你怎么去分啊。然后呢, 还有一个最最重要的一个区别啊, sprinkler 的它是一个生态,它里边呢提供了这个微服务的整套的一个解决方案,整套的一个解决方案啊,那么大伯呢,你可以认为它是这个 sprinkler 的生态中啊,关于这个服务调用的一种解决方案, 也就是说这个大伯了只解决了这个微服务中的啊,某一种场景,某一种场景,也就是这个服务治理啊,服务调用这一块,那么比如说举个很简单的例子,比如说这个熔断啊,比如说在这个 这个 double 中啊,这个是问个老的中有提供了这个 hashtrix, 对吧?来了,实现这个服务垄断啊,如果我想实现这个服务垄断的这种功能的话,直接把这个 hashtrix 这个包了, 把它拖进来就可以了啊。但是在 double 中呢,你要想实现这个服务垄断或者服务降级这种功能,那么 double 中啊,你想你,你得来,哎,你你你,同时呢你,当然你也可以使用开始这个词,但是你去使用 double 去使用开始这个词,你需要自己去编码,还比较麻烦。 而 spring cloud 去使用还是这个词呢,拿来即用,开箱即用,非常的简,非常的简单方便啊。好,所以说呢,这个 spring cloud 提供的是一整套的解决方案,而 double 关注的是其中的一个环节啊, 那么这个以上呢,就是这个 sprinklove 跟 double 啊最最主要的一些区别啊,主要基于这个底层协议注册中心啊模型定义以及它的这个功能定位。

double 是如何做系统交互的啊?那么这个问题其实问到了 double 它的一个非常核心的一个知识点,因为 double 它是一个啊, pc 框架啊,当然现在 double 它也慢慢的也会成为一个微服务框架 啊,所以说白了,它里面的功能就不仅仅只有 r p c, 还包括很多像网关一样啊,还包括像很多,呃,微服里面的链路跟踪啊,其他的功能在 w 里面他都会加上好,所以当然 w 它最大的一个特点仍然是它的 r p c, 因为它底层这个 r p c 的性能啊, 相比较于 swing 号的目前来说还是算比较高的好。那么呃,如果要回答这个面试题的话哦,给我可以给大家来看一下这位老师我给到大家的一个答案啊,这个本视频的文档我已经整理好了,并且与往期内容一起汇入,放在了视频的最后面 值,看完一定对你有帮助啊。就是 double 它的底层是通过 r p c 来完成服务和服务之间的这个调用的,之间的调用啊,之间 好,那么呃,首先 double 它一个功能就是它支持很多的协议,比如说默认的 double 协议诶,这个底层是用的 nike, 所以说这个我们说了它为什么快, 包括用 nitty 啊,包括他自己设计了一套现成模型啊,所以就导致如果说你服务之间用 day 用的是 double 协议的话,那么会相对也会比较快,但是他同时也支持 http 协议,支持 rest 都支持的好。所以他底层啊,包括使用的技术啊,比如说 double 底层用的 nitty 也可以用 mina, http 协议底层,呃,用了三毛 cat 也可以用 jt 这个东西,呃,可以让程序员自己去控制自己,自己去配置,你到底是想用 tomcat 还是想用 jt, 想用 native 还是想用 mina? 都可以啊, 那么就是,呃,大概的先形容一下它底层这个 r p c 它的一些特性,好,那么再给面试官去详细解释一下。那么说白了你服务之间的调入系统交互,其实说白了就是一个应用啊,调另外一个应用,一个服务,调另外一个服务。那么呃,我们就有两 两种角色啊,一种就是服务消费者啊,然后呢,他在调用某一个服务的时候,那么他会将当前所调用的服务接口信息,就是我担心这个消费者我在消费哪个服务啊?这个服务因为在 double 里面他是面向接口的啊,一个接口就是一个服务。好, 那么呃,消费者你现在要调的是哪个服务?你调要调的是具体的是这个接口里面的哪个方法,哎,你直接这个方法,你所传入的一些入餐数据,入餐信息是什么?哎,那么在消费端这一边,消费者这一边就会有 double 这个框架,把你这些信息把它组装为一个 invok 选对象,然后呢, 消费者组装好了这个对象之后,哎,他就会把这个对象交给,就是通过网络传输的方式,哎,把它传递给我们的服务提供者,哎,服务提供者,到时候一旦你收到了这个阴谋科学对象,哎,你就可以去找到当前的这个服务,以及你呃,当前所要调用的这个方法,然后通过反射的方式去执行。这个方法 就是在我们刚说的,现在我们需要把英文科学对象把它传输过去,那么我们就可以用到我们上面所说的这种协议,这里的每一个协议其实都可以用来传输这个对象,只是说因为每个协议他的底层所使用的这种网络传输的技术不一样,所以说不同的协议他所应对的场景 也不太一样。比如说你用 double 心,那么就是那种呃请求量比较大,但是呢每个请求量比较小的情况下面你就可以用 naty 啊这个知识高病房。那么如果说啊,你是经常的要用一些长链接啊,那么你就可以用 http 协议,但是我说 通过不同的协议其实都可以去传输这个 emoc 选对象啊,目的反就是把它传送给我们的服务提供者,到时候服务提供者就可以来执行这个方法,就相当于会执行这个服务,那么最后哎得到方法的结果之后,再通过 呃网络,对不对?同样的你底层不管是用 double 还是用 hdp, 其他底层都是 socket, 所以最后啊,我们再通过这个网络把它写,把这个结果呃返回 给我们的服务消费者啊,这种情况已经基本了,就是我们服务消费者去调用我们服务提供者他大概的一个原理。当然在这个调用过程中间,不管是在服务消费端,还是在服务提供者接收请求这一端,或者说发送响应结果, 这这个过程中间其实在 double 啊,它整个链路上面啊,它其实还有很多很多其他的设计,比如说芙蓉错,比如说负载均衡, 服务容错,就是当你在调用一个服务的时候,假设报错了,那么你会如何处理这个 double? 他也是可以做到的,你可以去配置一些容错的逻辑。好负载均衡。当我现在一个服务消费者,我要调用一个某一个服务,但是这个服务有几群?他有多个服务提供者,那么我势必我在负载 就是消费者那一端,我要我就要去进行负载均衡,还包括一些 fail 的机制,这个 fail 的机制就相当于是我,相当于是我们呃, spring spring misi 的里面的那个拦截器机制啊,你可以针对,呃,就是你可以去呃实现一个 fail 的,但 待会他内部就会有很多的 failt, 比如说他有一些 money 的 failt, 就是去监控啊,监控什么呢?监控你当前服务消费者,你在调用这个服务的时候,你的呃消耗了多少时间?比如说我请求发出去的时候是呃 几分几秒啊?那么我接收到当前这个请求所对应的响响应结果的时候也是几分几秒,那么他就都是通过这种非要的机制去实现的。还包括有动态路由机制啊,这个动态路由机制和复燃均衡其实非常像啊,只是说呃,他有一点区别啊,这个东西你如果说了解的话,你也可以跟面试官说一下, 这里说的动态路由基就相当于我现在还是我想说的一个服务消费者,他要去调用某一个服务,但这个服务如果有集群,比如说现在有五台机器组成的,当前这个服务的一个集群,那么呃,我这五台服务器,我比如说我可能在两个机房内啊,两个机房内我一个机房内部署了两台,我一个集房内部署了三台,那么假设现在一个机房挂掉了,那么当我服务消 消费者,我在调用这个服务的时候啊,因为这五个服务他其实都会存在注册中心里面,就是服务消费者,一开始从注册中心哎,他找到你我,我当前调用的这个服务可能仍然还是五台机器,对吧?仍然还是五台机器,那么这个时候,哎,你可能就需要去做一些处理,比如说你肯定就要从这舞台里面 过滤出来三台,因为现在只有这三台活着,就这个时候你就可以去配置一些这种路由的规则啊,配置一些路由的规则,让 w 到时候根据这个路由的规则 可以从这舞台中间再去选出三台,然后再利用负载均衡策略从这三台里面再去选择一台。所以说相当于我们的路由基是他是从 m 台里面去选出 n 台啊,这里 n 是小于 m 的啊,然后负载均衡就从这 n 台里面去选出一台啊, 也就是他们两个的一个一个区别。当然路由器是可以用在很多很多的地方,比如说回度发布啊,呃,还包括很多其他的一些,呃,就是呃同城的异地,异地龙灾呀,包括呃 其他的方面的一些容错机制,其实都都可以使用我们的这个路由机制来进行实现,所以说这个机制啊,也是让 double 他能够处理更多的企业中间那些需求啊,所以 double 他目前其实很多大厂他还是在用的,所以大家也可以好好的去啊,了解一下,学习一下 double 啊。 当然我这里要把相关的我刚刚讲的这些逻辑啊对应的流程图我也给大家画出来了啊,就有这么一个图,到时候大家可以拿到这个资料好好的去看一下,好吗?嗯,那么就是关于这个题目。