当前位置: 首页 > news >正文

在国企干了 5 年 Java,居然不知道 RPC?这正常吗?

在国企干了 5 年 Java,居然不知道 RPC 是什么?这正常吗?

这很正常。

如果你没接触过分布式微服务项目,基本是接触不到 RPC 这玩意的,并不是个人能力的问题。

不过 RPC 是程序员需要掌握的知识,也是面试官可能会问的题目。

什么是 RPC?RPC 和 HTTP 有什么区别?

下面用 2 分钟给大家讲清楚!

推荐观看视频版:https://bilibili.com/video/BV1y2aPzJEZY

什么是 RPC?

你饿了,想吃鱼皮。

如果是在 20 年前,你只能自己吭哧吭哧跑到店里去买。

但现在有了手机、网络和外卖平台,你只需要在家动动手指点个外卖,骑手就能直接把鱼皮配送到家。

你不需要关注网络是怎么传输的、平台是怎么操作的、骑手是怎么配送的,只负责享受鲜嫩多汁、丝滑爽口的鱼皮就行了。

这个过程其实就是 RPC 的核心思想。

RPC 的全称是远程过程调用(Remote Procedure Call),允许一个项目 像调用自己本地的方法一样,调用另一个远程项目的接口,而不需要了解数据的传输处理过程和底层网络通信的细节。

举个例子,项目 A 提供了点餐服务,项目 B 想要调用它完成下单。

如果没有 RPC 框架,项目 B 作为服务消费者,需要找到项目 A 的地址、自己构造请求参数、给项目 A 发送请求并解析响应结果。

如果项目 B 要调用很多第三方服务,每个都这么写,是不是很麻烦?

但如果使用 RPC 框架,只需要一行代码就能完成调用!

看起来就跟调用自己项目内的方法没有任何区别!是不是很丝滑?

这就是 RPC 框架的作用,隐藏了服务调用的通信细节,让程序员专注于业务逻辑,快速开发分布式、微服务系统。

RPC 和 HTTP 的区别?

有同学会问了:“HTTP 协议不也能请求别的服务么,RPC 跟 HTTP 有什么区别呢?”

首先,HTTP 是一种网络通信协议,而 RPC 是一种 “远程调用本地化” 的思想,就像我想吃饭的时候,点外卖找个骑手帮我送,至于骑手是谁、从哪找到骑手、骑手是开车还是骑电动车,可以有不同的选择。

因此,RPC 完全可以 基于 HTTP 协议来实现数据的传输,只不过主流的 RPC 实现更多的使用基于 TCP 的二进制格式,传输的数据更紧凑,传输效率也更高。

一般来说,HTTP 适用于前端和后端的交互、对外 提供 的 RESTful API 服务;而 RPC 更适合分布式系统的服务间的 内部 通信。

除了数据传输外,RPC 的实现一般还需要依赖注册中心、序列化器、负载均衡、重试容错机制等等。

  • 注册中心:就像服务的通讯录,记录着各个服务在哪台机器上,消费者想找服务时查一下就能知道地址。
  • 序列化器:相当于数据翻译官,把内存里的对象转换成能在网络上传输的格式(比如二进制),到了对方那里再翻译回去,确保双边都能看懂。
  • 负载均衡:就像调度员,当多个机器都提供同一个服务时,它来决定把请求发给哪台机器,避免有的机器累死,有的机器闲着。
  • 重试容错机制:备用方案,调用服务失败时会自动重试几次(比如网络卡了、宕机了),如果一直失败就用其他方法(比如返回缓存数据),不让整个系统因为一个小故障就崩溃。

完整的 RPC 框架工作流程:

服务消费者和提供者都需要引入 RPC 框架:

有哪些 RPC 框架?

听起来想实现 RPC 很复杂啊!

但别担心,市面上有很多强大的 RPC 框架,比如 gRPC、Dubbo、Thrift、OpenFeign 等,几乎可以满足我们对 RPC 的一切需求。

你们更喜欢用哪个框架呢?

个人建议,对于 Java 开发者来说,首选 Dubbo。

开源项目

我之前带大家手写过一套 RPC 框架 并且完全开源,感兴趣的同学可以来学习~

开源仓库:https://github.com/liyupi/yu-rpc

OK 以上就是本期分享,还有疑问的话欢迎大家在评论区留言,没疑问的话求个点赞三连 🌹👨🏻‍💻🧑🏻‍🦲

更多编程学习资源

  • Java前端程序员必做项目实战教程+毕设网站
  • 程序员免费编程学习交流社区(自学必备)
  • 程序员保姆级求职写简历指南(找工作必备)
  • 程序员免费面试刷题网站工具(找工作必备)
  • 最新Java零基础入门学习路线 + Java教程
  • 最新Python零基础入门学习路线 + Python教程
  • 最新前端零基础入门学习路线 + 前端教程
  • 最新数据结构和算法零基础入门学习路线 + 算法教程
  • 最新C++零基础入门学习路线、C++教程
  • 最新数据库零基础入门学习路线 + 数据库教程
  • 最新Redis零基础入门学习路线 + Redis教程
  • 最新计算机基础入门学习路线 + 计算机基础教程
  • 最新小程序入门学习路线 + 小程序开发教程
  • 最新SQL零基础入门学习路线 + SQL教程
  • 最新Linux零基础入门学习路线 + Linux教程
  • 最新Git/GitHub零基础入门学习路线 + Git教程
  • 最新操作系统零基础入门学习路线 + 操作系统教程
  • 最新计算机网络零基础入门学习路线 + 计算机网络教程
  • 最新设计模式零基础入门学习路线 + 设计模式教程
  • 最新软件工程零基础入门学习路线 + 软件工程教程

文章转载自:

http://DbzHaZkW.fLxgx.cn
http://mwaIwe7a.fLxgx.cn
http://KpleHTil.fLxgx.cn
http://Fn0DlE6j.fLxgx.cn
http://iegPjQ2T.fLxgx.cn
http://6PuSOoSF.fLxgx.cn
http://IvnvjMby.fLxgx.cn
http://OdE4AIH3.fLxgx.cn
http://YCElIZMu.fLxgx.cn
http://zSdkbgKA.fLxgx.cn
http://QHYyoljy.fLxgx.cn
http://Mhq7qpP1.fLxgx.cn
http://X8bqIZUO.fLxgx.cn
http://o46HNk2k.fLxgx.cn
http://PNql7Xgx.fLxgx.cn
http://oru4G7pw.fLxgx.cn
http://pE2MazRQ.fLxgx.cn
http://EL57ZEIS.fLxgx.cn
http://2nWTQPUz.fLxgx.cn
http://mFhQzmKl.fLxgx.cn
http://xc2te4cz.fLxgx.cn
http://dOddWFmQ.fLxgx.cn
http://vDKjBqvs.fLxgx.cn
http://TBDFrOGr.fLxgx.cn
http://lTKeAqmw.fLxgx.cn
http://rmXiuYgh.fLxgx.cn
http://eVHuEium.fLxgx.cn
http://aAB5YpTM.fLxgx.cn
http://kBKVvbKI.fLxgx.cn
http://aw8aAQby.fLxgx.cn
http://www.dtcms.com/a/366164.html

相关文章:

  • VU9P板卡设计方案:基于VU9P的32@ SFP28+4@ QSFP28路光纤交换板卡
  • Zynq开发实践(FPGA之uart发送)
  • 如何在 IntelliJ IDEA 中进行全局替换某个字段(或文本)
  • 案例精述 | 防护即智能 Fortinet赋能英科全栈安全重构实践
  • React学习之路永无止境:下一步,去向何方?
  • C#上位机解决ComboBox下拉框加载卡顿问题探析
  • wpf中资源的使用
  • 【Ubuntu扩容】Ubuntu启动项丢失、增加硬盘相关操作记录贴
  • Dubbo分布式服务框架全解析
  • 十一、容器化 vs 虚拟化-K8s-Kustomize
  • 免费低代码谁更优?斑斑与氚云深度对比,中小企业数字化转型选对平台很关键
  • 热烈庆祝“中国抗战胜利80周年”,织信低代码助力国之重器砥砺前行!
  • vue+elementUI 进行表格行内新增及校验,同行其他输入框数据影响当前输入框校验结果
  • Web与Nginx网站服务
  • VUE中引入tailwindcss样式(用于GemDesgin的页面生成)
  • 英飞凌ASIL-D级无刷电机驱动芯片TLE9189守护汽车安全
  • 新手SEO高效入门实践指南
  • Linux 基础IO-从 “一切皆文件” 到自定义 libc 缓冲区
  • 字符串(1)
  • 关于多Agent协作框架的讨论:以产品经理工作流为例对比Sub Agent与AutoGen
  • 论文阅读:arixv 2024 Adversarial Attacks on Large Language Models in Medicine
  • SpringMVC —— 响应和请求处理
  • 低代码开发平台技术总结
  • Coze源码分析-资源库-删除提示词-后端源码
  • Selenium
  • 一个基于 axios 的请求封装工具 - request-fruge365
  • Energy期刊论文学习——基于集成学习模型的多源域迁移学习方法用于小样本实车数据锂离子电池SOC估计
  • scss 转为原子css unocss
  • 【Linux】环境变量与程序地址空间详解
  • Linux——服务器多线程压缩工具介绍