分布式 - 公司使用什么RPC框架,聊聊你理解的RPC原理

      最后更新:2022-07-31 06:22:14 手机定位技术交流文章

      别担心,我们马上开始了!

      引言

      过去,当一个系统很小时,它只使用一个架构,一个服务器部署了一个应用程序和数据库是足够的。

      但现代互联网公司的业务逐渐扩大,服务逐渐细分,许多服务需要通过远程分布式接口调用通讯,也就是说,不同的服务不是在同一服务器上部署的,例如,在服务A上订购服务,其他服务的付款服务,有同步调用和非同步调用,现在我们需要远程调用不同的服务,在使用时调用远程服务就像调用本地服务。介绍瓶装包装,就能通过 this.xxx ()同时调用远程服务,这背后的机制是通过RPC技术。

      关键点: RPC技术必须是未来工作的基础,掌握其中之一,了解原则,阅读源代码,甚至手写。

      记者:公司使用什么RPC框架?你能告诉我们RPC的工作原理吗?

      面试官想知道基础设施是否像我们的项目一样有效,是否像它应该这样好,是否像它应该这样好,是否像它应该这样好,是否像它应该这样好,是否像它应该这样好,是否像它应该这样好。

      **答:**RPC 是一个分布式计算的 CS 模式,总是由 Client 向 Server 发出一个执行若干过程请求,Server 接受请求,使用者客户端提供的参数,计算完成之后将结果返回给客户端。

      使用最广泛的Spring Cloud,Spring Boot功能集成了开放源代码行业最好的组件,为微服务架构服务管理提供了一个全面的解决方案。

      国内开源的框架中,更广泛地使用阿利的杜布,后来它被捐赠给阿帕奇。还有Tencent的Tars框架,以及储蓄的框架,还有基于Thrift二级发展的RPC框架,例如,Mtthrift。

      这些PPC的一般原则基本上是一样的(在此点,请面试官提供纸张和铅笔,并绘制一个说明PPC原则的图表)

      图片描述

      这个图看起来并不太复杂,以至于自己挖出一个洞,也并不看起来简单。

      1-5 逐行解释:

      1. 服务整合后,服务(这里的服务是图片中的提供者,在服务提供商启动后,它将通过登记模块,提供服务唯一的ID和IP地址,港口信息等被注册到RPC框架注册中心(图表中的注册部分)。
      2. 当调用者(Consumer)想要调用服务的时候,通过 Provider 注册时的的服务唯一 ID 去注册中心查找在线可供调用的服务,返回一个 IP 列表(3.notify 部分)。
      3. 第三步 Consumer 根据一定的策略,比如随机 or 轮训从 Registry 返回的可用 IP 列表真正调用服务(4.invoke)。
      4. 最后是统计功能,RPC 框架都提供监控功能,监控服务健康状况,控制服务线上扩展和上下线(5.count)

      有一个清晰的流程图,说明每个步骤,面试官说他满意并继续提出问题。

      访谈者:服务开始时,服务的基本资料向登记中心登记。如果服务提供者登记,登记中心如何知道服务不会使用?

      A:服务降级线分为主动降级线和心脏跳动测试

      例如,当一个服务发布时,注册表在重新启动之前被通知:如果有流量进来,我想重新启动,不要给我,让另一个机器服务,等我成功重新启动,让流量进来,或者手动从后端管理中删除机器,这是关键。

      心跳检测是处理下游服务异常(如停电网络)的处理,现时,如登记中心不知道该服务已停办,一旦它被召唤了,就出现了问题。为了 避免 这种 情况,登记中心增加了心脏跳动检测功能,它会对服务提供者(Provider)进行心跳检测,例如,每30秒发一个心跳,如果三个心跳的结果没有返回一个值,鉴于该服务已终止,快速更新消费者服务列表,告诉消费者打电话给另一台机器.

      **问题分析:**解释服务端如何感知注册中心的问题,你已经解决了这个问题了吗?还没有,你自己挖了一个洞。面试官可能继续深入挖掘,服务提供者(Provider)挂了注册中心能解决,登记中心是不是挂起来了?三连问继续。

      记者: 如登记中心被暂停, 例如, 你使用 Zookeeper 。 如果 Zookeeper 被暂停, 服务还能互相呼叫 吗?

      **答案:**首先是将注册中心与数据库分开。如果数据库被暂停,ZK仍可使用,因为ZK将缓存注册表列表。

      其次,ZK本身是一个集群,一台机器挂了,ZK 将 选择 其他 的 机器, 以 继续 提供 服务, 作为 主机,如果整个小组都挂起来,那没关系。因为呼叫者局部缓存注册中心接收的服务列表。避免与登记中心的互动,Consumer 和 Provider 采用直连方式,这些策略都是可配置的。

      **问题分析:**面试是一个自由交流时间,任何一个点都可能被发散继续深入挖掘,刨根问题,总有你覆盖不到的知识盲区,目的不是为难你,是想了解你的技术沉淀深度。

      4、面试官:你对 RPC 了解的很透彻,那你能否自己写一个 RPC 框架?可以简答描述下思路也行。

      **答:**这个问题,虽然没有自己动手写过,但是我阅读过源码,大致实现思路是这样的。(画图给面试官)

      图片描述

      1. 客户端 invoke 方法编写,使用 JDK 的动态代理技术,客户端调用远程服务方法时调用的是 InvocationHandler 的 invoke 方法。
      2. 客户端 Filter 方法编写,完善的 RPC 框架少不了监控、路由、降级、鉴权等功能。
      3. 创建 Socket,在 Filter 方法中实现 Client.write 方法,其逻辑为从连接池(ChannelPool)中获取连接,然后将数据写进 Channel。
      4. 实现数据序列化、压缩,目的减少网络传输的数据量,向服务端发送 request 数据,这里可以使用 Netty 异步通讯框架。
      5. 服务端收到客户端发过的消息后,从 Channel 中将消息读出来之前,也会先经反序列化解压。
      6. 请求是服务端的滤波器。 请求是通过方法监测和验证的。
      7. 根据客户端传递来的服务信息和参数,通过反射调用相应的业务服务并拿到业务处理结果。然后在 ResponseFilter 中将返回结果写入 Channel。
      8. 服务结束序列, 压缩, 等, 发送给客户端.
      9. 当客户端收到消息后,它被客户端重新排序和解压缩,然后由 ResponseThreadPoolProcessor线程池处理。
      10. ResponseThreadPoolProcessor 收到消息后,方法调用将结果返回以前的方法,调用请求终止。

      记者:是的,是的。确实是看了,这个问题就到这。(面试官的心理学:虽然目前的项目不会让你真正写RPC框架,知其然知其所以然,如果你有这类RPC的问题, 你可以解决.这个项目小组缺少一个这样的人。

      深入分析

      已有http协议接口, 或者 RestFul接口, 为什么使用RPC技术?

      在接不多的情况下,使用http的确是明智的选择,比如在初创企业,我们不确定生意会顺利进行.可能面临随时倒闭,开发人员也不足,现在,使用清洁高效的技术,首先做事情是最明智的选择。无需一步登天。

      在系统间相互作用较少的情况下,使用http协议的优点是显而易见的:易于开发、易于测试和易于部署。使用现有的http协议进行系统间通信,如果生意真的增长缓慢,系统也慢慢扩大,RPC框架的好处是显而易见的,首先,RPC支持长链条,通信不需要像http那样每次重复三次,减少了网络开销。

      其次,RPC框架一般具有一个注册中心模块,具有完善的监控和管理功能,服务注册发现、服务下游、服务动态扩展等操作方便,基于服务的治理效率大大提高。

      基于TCP协议的RPC,可以更灵活地定制协议字段,与http相比,它可以减少网络传输字节的数量,减少网络开支(握手)提高了性能。实现更大的吞吐量和同时的数目,但是,我们需要更多地关注这些复杂的细节,开发者的需求也很高,增加开发成本。

      总结

      在面试官接管三个问题时,第一三个问题必须掌握,而最后一个则添加了手写的深入分析,这可以大大提高面试官对你的感情,只要有一个亮点,即使其他问题没有很好回答,那么问题就不会大。

      RPC工作原则摘要:

      • 提供者: CS模型中的服务提供者,服务器。
      • Consumer: 调用远程服务服务消费方,CS 模型中的 Client。
      • 注册处: 服务注册和发现服务管理中心.
      • 监视: 对统计服务的电话数目和时间的监视中心.
      • 容器: 运行容器的服务, 如喷气站.

      RPC实施过程摘要:

      1. 服务容器负责启动、装载和运行服务提供者。
      2. 当服务提供商启动时,它将其服务注册到注册中心,展示其IP和端口信息。
      3. 服务消费者在开始服务时就订阅登记中心提供所需的服务。
      4. 注册处将服务提供者名单归还给消费者,如果更改,注册处将根据长期的连接向消费者发送数据。
      5. 服务消费者从这个地址提供者列表中,根据软负载平衡算法选择一个提供者,如果调用失败,则选择另一个服务调用。
      6. 服务消费者和服务提供者,在记忆中积累电话和电话时间,及时向监控中心发送一个统计数据。

      别担心, 文章结束, 期望连续三个!

      先自我介绍一下,他高中毕业了13年,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。了解大多数年轻的Java工程师,想要升技能,经常需要找到自己的成长或向班上汇报。但对于培训机构来说,学费大约是人民币,着实压力不小。当你不在系统时,自我学习的效率很低,而且很持久。也很容易停止天花板技术。所以我为你收集了一个"java开发工具"初衷也很简单,这是一个想帮助自己学习的朋友,却不知道该从哪里学习。同时减少每个人的负担.添加下方名片,你可以得到完整的学习信息

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/30996.html

          热门文章

          文章分类