粉丝84获赞490

哈喽,大家好,我是鼓爆科技的联合创始人麦克。昨天呢,一个工作五年的粉丝去京东面试,在第一面的时候被问到项目用 double 还是 open thing, h t t p 和 r p c 有什么区别这个问题,这也是一个非常常见的高频面试题, 问题的难度并不大。今天的视频呢,我就带大家去深度的了解一下这个问题的原理和回答思路。另外呢,我把往期的视频内容都打包在了一份家网面试指南中,里面包含了三十五万字的面试文档,两百份精选简历模板以及家网价格、公司学习路线图, 有需要的小伙伴可以在我的评论区的置顶中去免费领取。通过这个问题呢,面试官想要去了解你在项目中微服架构和远程通信的经验,面试官会关心你是否知道 double 和 office 在不同情况下的使用场景,并且能否去了解 htv 和 rpc 通 中心的区别。 double 和 open fit 都是一个 rpc 框架,在做技术选型的方面,我们主要关心几个维度,第一,功能上是否满足当前场景的需求。第二,技术的上手难易程度。第三,技术的成熟度。第四,社区的成熟度。所以在回答这个问题的时候,可以根据这几个维度去回答就行了。 然后 http 和 rpc 的区别,大家可以看一下这个图就很容易理解。 rpc 是一个远程过程调用协议,他解决的是让两个远程服务之间的调用,就像本地调用一样,不需要去考虑远程通信的细节这样一个问题。 而 h d b 呢,是一个应用者协议,他定义的是一个远程通信的协议规范,这两者的维度是不一样的。下面我们来看一下这个问题的完整回答。 double 是一种基于 rpc 的分布式服务框架,它支持高性能的服务注册、发、 发现和远程通信。通常情况下呢, double 适用于需要高性能、高可靠性和复杂服务治理的场景。他提供了丰富的功能,比如说负载均衡、超时处理、熔断降级等等, 适用于复杂的微服体系架构。 origin 是一个声明式的 h d p 客户端,它简化了基于 h d p 的远程通信过程。 origin 适用于简单的微服场景,特别是当你的微服之间使用 h d p 通信,并且希望通过接口来定义客户端调用的时候。 origin 呢,是一个很好的选择, 它可以把 hd 请求转化为 java 接口方法调用,提供了方便的开发体验。在项目中,选择 double 还是 open fit, 通常取决于我们具体的业务需求和微服架构的一些复杂性。如果我们需要更高性能、可靠性和高级功能,那么 double 是一个很好的选择。如果你的需求相对简单, 希望提高开发效率,那么 open 费呢,是一个很好的选择。 h t p 是一种基于超文本传输的应用程协议。 r p c 是种远程过程调用协议,它允许一个网络节点上的程序调用另外一个网络节点上的程序的函数或者方法。就像调用本地函数一样。 它们的主要区别在于, h t p 通常用于跨越互联网传输数据,适合用于面向网络的通信。而 r p c 更多的是用来实现跨进程或者机器之间的通信,适合面向应用程序的通信,它的性能会更好。 好了,今天的面试题就分享到这里,如果你觉得这个视频对你有所帮助,记得点赞和关注,我是麦克,我们下期再见。

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 啊。 当然我这里要把相关的我刚刚讲的这些逻辑啊对应的流程图我也给大家画出来了啊,就有这么一个图,到时候大家可以拿到这个资料好好的去看一下,好吗?嗯,那么就是关于这个题目。


有粉丝问 spring cloud 与 double 怎么选?如果只是单纯的从技术的角度来说,如果追求性能,那 double 是不二之选。因为从底层传输协议和序列化协议来说,性能都很好。但由于各种序列化框架兼容性不一样, 所以兼容各种其他语言就有一些问题。比如如果使用加法本身的序列化即止,需要实现 thorolizable 接口,其他语言是无法反序列化的。 如果使用 spring cloud 就不一样,传输使用 h、 t、 p 协议,由于 h、 t、 p 协议本身带了很多多余的豹纹和头信息,所以性能会差一些。剧烈化协议是 jason, 这就几乎兼容任何语言的调用,因为 h、 t、 d、 p 和 jason 主流语言都可以解析。而从我个人使用的角度上来讲, rbc 框架调试和开发的时候确实有很多不方便的地方。比如说 spring cloud 调用直接抓包就可以看到具体的调用情况,而且可以用 postman 这些 http 工具 辅助开发。但 r、 p、 c 框架就麻烦一些了,虽然 w 控制台,但在很多场景下调试和排查问题非常不方便。 另外,使用 spring cloud 对使用 spring 生态的开发者真的是非常友好。总之, spring cloud 用上了就不想听了,谁用谁知道。

粉丝投稿面试被问 double 支持哪些负债算法?这个问题看似是背知识点,实则考察你对 double 核心机制的理解,分布式服务治理的思考,以及实际场景落地能力。下面我们来看看可以具体回答。哈喽,大家好,我是专注加把干货分享的灰灰, double 支持哪些负债算法? 这也是一个出现频率比较高的面试题,虽然看起来比较简单,但是想让面试官觉得眼前一亮,还是要掌握点回答技巧,今天我就带你们深入解析一下。 为了帮大家更系统性的准备面试,我整理了包括各阶段的面试题,加把面试突击学习路线以及精选的简历模板。需要的小伙伴五官六六六,我发你 double 作为一个远程 r p c 调用框架去调用远程服务,随着我们架构的发展,我们的服务肯定是集群部署的,会有很多的服务。 那么客户端在调用的时候,我怎么去知道调用哪个服务呢?今天我们就要讲一下 double 的 赋值算法,何为赋值?就是你来告诉我要用到哪里。 double 的 赋值主要呢有以下几种, 第一个叫做加权随机,它是默认的算法。第二个,加权论寻它借鉴于 nx 的 平滑加权论寻算法。 第三个,最少活跃加加权点选。第四个,最短响应时间,关注的是响应速度。第五个,一致性哈希,根据我的请求的参数去一致性哈希得到,我去请求到哪里?第六个叫做连接数最小。第七个,自适应负荷, 那么这个是 double 里面他提供的一些扩展或者说一些方案,那么我们简单演示一下,我们去模拟有多个服务提供者,我不会部署在多台机器,我们以不同的端口来去起不同的服务。 假如现在我已默认的向 double 的 端口二零八八零, server 的 端口是八零八零,起一个服务,我们再去加一个服务,那么这个服务 double 的 端口是二零八八,二,服务的端口是八零八八,我们也去启动, 启动好了以后,我们来到我们的纳克斯服务列表看一下,每一个接口都有两个实力,那么 double 的 负债一般是基于我们的客户端负债,就你来告诉客户端我的负债的算法是什么?客户端是基于算法得到我请的哪一个服务, 现在有多个服务,那么客户端怎么去定义或者说去设置我的赋值算法呢?我们先去看一下它自己现在已有的扩展,所有的扩展都会基于 node banners 这一个接口,如果要自己去写赋值算法,那么也只要去实现我的 node banners 接口就可以了。 我们可以看它有很多的赋值算法,现在已有的,那比如刚刚讲的一致性,哈希,最少的活跃、随机加权能寻等等。那么每一个算法它都有个名字, 那么怎么去配?配置的话,你只要在配置文件里面去指定我客户端的加载算法,看 double, 点看 sum, 点 load 按钮,名字是刚刚每一个实现类的一个名字。假如现在我用一次性哈希算法, 因为你之前哈希是基于我的入仓进行哈希预算的,所以如果参数是一样的,他的请求的服务肯定也是一样。假如我现在去请求十个参数是一个,我们去启动他所有的请求都是到了我二零八八零这一个服务,而第二个服务是没有请求的, 所以这个是一次性哈希,我会根据入仓来取他的哈希值来决定我要到哪一个服务。现在假如我们去更改一下,假如说改成随机,我们改成随机以后,我们再去调用一下,看到了哪台服务, 我们先把我们的两个服务的请求全部清空再启动,启动以后他的请求随机到了我们两个不同的服务。