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

这很正常。

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

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

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

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

什么是 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 以上就是本期分享,还有疑问的话欢迎大家在评论区留言,没疑问的话求个点赞三连 ‍‍

更多编程学习资源

在国企干了 5 年 Java,居然不知道 RPC?这正常吗?的更多相关文章

  1. 朋友国企干了5年java,居然不知道Dubbo是做什么呢?我真信了

    点赞再看,养成习惯,微信搜一搜[三太子敖丙]关注这个喜欢写情怀的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系 ...

  2. Java自带RPC实现,RMI框架入门

    Java自带RPC实现,RMI框架入门 首先RMI(Remote Method Invocation)是Java特有的一种RPC实现,它能够使部署在不同主机上的Java对象进行通信与方法调用,它是一种 ...

  3. Java简单的RPC实现(一)

    RPC使用java最基本的,传输层使用Socket,序列化使用Serializable,java 动态代理模式,但是未实现消息注册等相关信息 大道至简 server端 package com.rpc. ...

  4. 面试题思考:Java RMI与RPC,JMS的比较

    RPC:(Remote Procedure Call)  被设计为在应用程序间通信的平台中立的方式,它不理会操作系统之间以及语言之间的差异. 支持多语言 RMI:(Remote Method Invo ...

  5. Java分布式:RPC(远程过程调用)

    Java分布式:RPC(远程过程调用) 引入RPC 比如我们有一个查询的接口IDBQuery,以及其实现类DBQueryImp,如果我们执行IDBQuery查询方法,只需要new一个DBQueryIm ...

  6. 干了这杯Java之LinkedList

    LinkedList和ArrayList一样实现了List接口 ArrayList内部为数组 LinkedList内外为双向链表 实现了Deque接口,双端列队的实现 图片来自Wiki 内部实现为No ...

  7. 干了这杯java之ThreadLocal

    ThreadLocal Java篇 是什么 怎么用 源码 缺点 总结 是什么 ThreadLocal是一个关于创建线程局部变量的类,这个变量只能当前线程使用,其他线程不可用. ThreadLocal提 ...

  8. 干了这杯Java之集合概览

    Java集合框架支持两种类型容器: 一种是为了存储一个元素的合集,为Collection 一种是为了存储键/值对,为Mapping Collection包含 Set存储不重复的元素 List存储一个有 ...

  9. 干了这杯Java,让你的Idea比eclipse好用

    1.Idea基本配置 1.1 Idea简介 Idea是一个专门针对Java的集成开发工具(IDE),由Java语言编写.所以,需要有JRE运行环境并配置好环境变量.简单的说,Idea是写代码用的工具. ...

  10. 干了这杯Java之ArrayList

    List存储一个有序元素合集 List接口的实现类有: ArrayList,LinkedList,Vector,Stack ArrayList一个数组型的List 默认容量为10 private st ...

随机推荐

  1. solana杂谈(1)

    solana杂谈(1) 本文适用于"只需大致了解 Solana"的读者,部分说法可能不够准确或不够深入.如需详细了解,建议阅读 Solana 的官方文档:https://solan ...

  2. [Java/字节流/BytesReader] 核心源码精讲: ByteArrayInputStream(字节数组输入流)

    概述 : ByteArrayInputStream(字节数组输入流) 简介 字节数组输入流在内存中创建一个字节数组缓冲区,从输入流读取的数据保存在该字节数组缓冲区中. java.io.ByteArra ...

  3. Mysql规范50条

    支付业务很大程度上依赖于数据库做支持,正确的设置数据库参数以及正确的使用数据库对非常重要,我这把自己之前的一些心得贴出来,抛砖引玉,大家可以把自己的一些心得分享出来供大家参考学习.一.数据库配置1. ...

  4. SpringMVC获取请求参数乱码问题

    使用配置:jdk18 tomcat8.5.75 (由于10经常会出一些莫名其妙的问题,所以就让它去我的D盘吃灰了) IDEA 2021.3.2 spring-framework-5.3.15 问题引出 ...

  5. MySQL数据库连接时区问题

    <!-- 组件扫描--> <context:component-scan base-package="com"></context:component ...

  6. .NET AI 模板

    引言 随着人工智能技术的快速发展,AI应用开发已成为开发者必备的技能之一.然而,对于许多.NET开发者来说,如何快速上手AI开发仍然是一个挑战.微软推出的.NET AI模板预览版正是为了解决这一问题而 ...

  7. vmware workstation 安装 Debian

    下载安装 vmware workstation 本文中用的是 VMware Workstation Pro v17. 点击这里,跳转至下载页. 下载 debian 点击这里跳转官网下载. 创建一个虚拟 ...

  8. tiptap中文文档

    我写的,如果有什么问题 暂时在这里评论就行 我去改 https://tiptap.site 没钱买域名了,tiptap中文网挂到我二级域名下了 https://tiptap.dingshaohua.c ...

  9. 苏州中学oj P202504B 题解

    题目描述 给出一个 \(N\) 位的正整数 \(A\) 小 \(S\) 可将 \(A\) 中的某些位删除 , 但 不能全部删除 小 \(S\) 希望最后剩余的部分是一个 非质数 本题中规定: 合数及 ...

  10. Games 103 cloth PDB 浅析

    简介 PDB 比 隐式积分法 速度快很多. 全称 Position Based Dynamics 粒子动力学系统, 什么是PBD呢? 个人的理解就是, 多次迭代, 达到一步的稳定状态. 然后更新整个系 ...