RPC是什么? (学习笔记)

RPC是什么? (学习笔记)什么是RPC?RPC全称RemoteProcedureCall,即远程过程调用,就是要像调用本地的函数一样去调远程函数,屏蔽远程调用的复杂性。为什么需要RPC?微服务、分布式应用的开发越来越

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

什么是RPC?

  • RPC全称Remote Procedure Call,即远程过程调用,就是要像调用本地的函数一样去调远程函数,屏蔽远程调用的复杂性。

为什么需要RPC?

  • 微服务、分布式应用的开发越来越常见,RPC可以解决各个节点之间的服务调用以及通信问题。
  • 治理功能,比如连接管理、健康检测、负载均衡、优雅启停机、异常重试、业务分组以及熔断限流等等。

一个完整地RPC需要经历那些过程?

  • 1.序列化:RPC是一个远程调用,所以必须要通过网络来传输数据。调用方的请求出入参数都是对象,就需要序列化对象为可传输的二进制。
  • 2.传输数据:调用方将二进制数据传输给服务提供方,RPC 一般默认采用 TCP 来传输,因为其可靠性。
  • 3.反序列化:根据特定的协议,服务提供方可以从二进制数据中正确的分割出不同的请求来,同时根据请求类型和序列化类型,把二进制的消息体逆向还原成请求对象。
  • 4.方法调用:根据反序列化得到的请求对象,找到对应的类,完成方法调用。
  • 5.返回请求:将执行结果序列化后,回写到对应的 TCP 通道里面。调用方获取到应答的数据包后,再反序列化成应答对象,这样调用方就完成了一次 RPC 调用。
  • 在这些的基础上,可以对其进行简化,不必关注其中复杂的操作,如调用方的序列化,网络传输调用,反序列化。可以像Spring的 AOP 一样,采用动态代理的技术,通过字节码增强对方法进行拦截增强,以便于增加需要的额外处理逻辑,上述操作都可以通过动态代理来解决。
  • 由服务提供者给出业务接口声明,在调用方的程序里面,RPC 框架根据调用的服务接口提前生成动态代理实现类,并通过依赖注入等技术注入到声明了该接口的相关业务逻辑里面。该代理实现类会拦截所有的方法调用,在提供的方法处理逻辑里面完成一整套的远程调用,并把远程调用结果返回给调用方,这样调用方在调用远程方法的时候就获得了像调用本地接口一样的体验。

                         RPC是什么? (学习笔记)

目前常用的RPC框架:

  1. Dubbo:Dubbo是一个分布式服务框架,以及SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。 Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,Dubbo自2011年开源后,已被许多非阿里系公司使用。

  2. Spring Cloud:Spring Cloud由众多子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。Spring Cloud基于Spring Boot, 使得开发部署极其简单。

  3. gRPC: 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。

  4. Thrift :是一种轻量级的跨语言 RPC 通信方案,支持多达 25 种编程语言。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168322.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月3日 上午6:16
下一篇 2022年8月3日 上午6:16


相关推荐

  • Jenkins的详细安装及使用

    Jenkins的详细安装及使用操作环境:Windows一、环境准备1安装JDK 本文采用jdk-8u111-windows-x64.exe;2配置tomcat&nbs

    2022年5月28日
    71
  • c++临界区的使用

    c++临界区的使用编写程序不容易 编写多线程的程序更不容易 相信编写过多线程的程序都应该有这样的一个痛苦过程 什么样的情况呢 朋友们应该看一下代码就明白了 cpp nbsp viewplaincop nbsp data process nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp EnterCritica nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp if nbsp error nbsp

    2026年3月19日
    2
  • 微信开放平台认证后怎么实现扫码登录功能[通俗易懂]

    微信开放平台认证后怎么实现扫码登录功能[通俗易懂]主题:微信开放平台认证后怎么实现扫码登录功能在面对这些问题时,同时也是很多刚入手做开发朋友疑惑的希望能帮你们快速完成微信登录配置。以我多天的日夜辛苦测试和实践,同时也是我自己在开发过程中遇到的问题被我不断尝试,一遍又一遍的填写参数,建站平台换几十个,最总发现了这些问题所在给大家总结了以下几点问题和解决方案:1.认证微信开放平台和微信公众平台认证有区别吗?如果只用来作微信登录和使用微信支付,那么告诉你:没有区别,同样是三百块钱认证费用(你只注意一下你的开发资料能一次性通过就行)2.同样能实

    2022年6月9日
    80
  • JAVA的forEach用法

    JAVA的forEach用法JavaSE5 引入了一种更加简洁的 for 语法格式 可以用于遍历数组和集合 是 for 循环的增强版本 可能借鉴的是 C 语言 但是没有引入 C 格式的 foreach 和 in 关键字 还是用的 for 关键字 java 有些本地类的名字是 in 引入关键字可能导致冲突 所以使用冒号代替 格式如下 for 元素类型元素变量 x 遍历对象 数组或集合

    2026年3月18日
    2
  • navicat连接mysql时出现2003(10060)错误

    navicat连接mysql时出现2003(10060)错误

    2021年6月16日
    179
  • 如何将生产环境的字段类型从INT修改为BIGINT

    如何将生产环境的字段类型从INT修改为BIGINT

    2021年11月26日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号