请选择 进入手机版 | 继续访问电脑版

好程序员-千锋教育旗下高端IT职业教育品牌

400-811-9990
我的账户
好程序员

专注高端IT职业培训

亲爱的猿猿,欢迎!

已有账号,请

如尚未注册?

[JavaEE] 好程序员Java培训分享什么是RPC?

[复制链接]
叶子老师 发表于 2019-7-12 18:18:56 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
  好程序员Java培训分享什么是RPCRPCRemote Procedure Call是指,说白了就是系统和系统之间的调用。
  RPC的实现主要的两种类型
1)   http为主,纯粹的http请求,返回结果,
2)   TCP/IP为主,类似于实现一个服务代理,屏蔽网络请求,就像纯粹的本地调用一样
  1.生活案例
  场景一:
  你想吃苹果,然后你从家里的冰箱拿出来,洗了吃了,这属于本地调用。
  场景二:
  你想吃苹果,打电话朋友洗好了送过来给你吃,这就是远程调用(RPC)。
  2.RPC官方解释
  RPCRemote Procedure Call远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCPUDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层应用层RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
  3. RPC的工作原理  3.1理论模型
  当发起一个远程调用时,会发起程序的5大理论模块,主要包括:user, user-stub, RPCRuntime, server-stub, server
  User, User-stub,RPCRuntime的一个实例 在请求端调用,Server  Server-stub RPCRuntime的另一个实例 在响应端调用,,
  UserRPC 服务的消费者,负责调用 RPC 服务, user想要发起一个远程调用,它实际上是创建了一个正规的本地调用,用于调用user-stub的相应程序, 是作业分布式应用的一部分;
  User-stub:负责将目标程序的规范和参数放入一个或多个的数据包中,可以理解成一个代理,会将调用的接口,调用方法、参数按照协议规范进行封装,通过服务提供的地址,端口发起网络请求,请求RPCRuntime将数据包可靠的发送给响应端;
  RPCRuntimeRPC通信包。 负责重传,确认,分组路由,在响应端接收到数据包后,RPCRuntime将数据包传送给server-stub
  Server-stub:将数据包解包,并发起一个正规的本地相关程序的调用,
  Server:处理被调起的相关程序,并输出结果;是作业分布式应用的一部分;
  与此同时,请求端的请求进程处于暂停状态并等待一个结果包,调用在server处理结束,它将返回到server-stub 并将结果传回到请求端暂停的进程,User-stub将被解压缩的数据发送给User
   图片1.png
  RPC的目标就是封装中间的一些步骤,使我们调用更简单
  3.2简单RPC工作
  请求端发送一个调用的数据包,该包中包含有调用标识,参数等协议要求的参数。当响应端接收到这个数据包,对应的程序被调起,然后返回结果数据包,返回的数据包含了和请求的数据包种同样的请求标识,结果等。
   图片2.png
  4.java中基于RPC的技术
  Java常用的有RMIHessianDubboSpring Cloud等。
  4.1 RMI
  使用java的远程消息交换协议(JRMP-Java Remote Message Protocol)实现远程协议,只能在java语言开发的系统间进行RPC。所有的java参数、返回值都必须是可序列化的(这里把基本数据类型也视为可序列化
  4.2 Hessian
  Hessian是一个轻量级的RPC框架
  它基于HTTP协议传输,使用Hessian二进制序列化,对于数据包比较大的情况比较友好,但是它的参数和返回值都需要实现Serializable接口。
  4.3 dubbo
  DubboDubbo是一个分布式服务框架,以及SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。 Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,Dubbo2011年开源后,已被许多非阿里系公司使用目前dubbo已经交给apache基金会维护
  4.4 Spring Cloud
  Spring CloudSpring Cloud由众多子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。Spring Cloud基于Spring Boot, 使得开发部署极其简单
  4.5 Motan  
  新浪微博的服务治理框架,它诞生的比较晚,起于2013年,20165月开源,Motan是一个小而精的 RPC 框架,它的特点是简单、易用,是一个轻量级 RPC框架。与Dubbo相比,Motan在功能方面并没有那么全面,也没有实现特别多的扩展。用的人比较少,功能和稳定性有待观望。对跨语言调用支持较差,主要支持java

  4.6 Finagle  Finagle是由Twitter研发,并于2011年开源,它由Scala和Java实现。Finagle使多种协议通讯成为可能,它实现了RPC Server和Client。
Finagle具备有非常简单的就可以为应用创建Server和Client;服务之间可以远程调用;实现不同协议间的交互,如HTTP,Thrift,Memcashed;可以基于一个服务,查找其他服务;统一的错误处理;统一的重试机制;双向通讯;负载均衡;复杂的原子计算。主要用于 复杂网站,使用多种服务和协议 ;网络爬虫等
  5RPC优缺  5.1RPC
Ø   降低建立分布式计算的难度,让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性;
Ø   程序员可以使用过程调用语义来调用远程函数并获取响应,不需要显式编码这个远程调用的细节;
Ø   简化了编写分布式应用程序的难度,因为 RPC 隐藏了所有的网络代码存根函数。应用程序不必担心一些细节,比如对端口号以及数据的转换和解析;
  5.2.RPC的缺点
·   一个完善的RPC框架开发难度大;
·   RPC框架调用成功率受限于网络状况
  6RPC框架的核心技术点
  1)服务暴--露
  提供服务的一方要暴露调用者的相关信息,例如Web service的wsdl(一xml格式的描述服务的语言文件;服务的消费者需要通过一定的途径获取远程服务调用相关的信息。
  2)远程代理对象
  服务调用者用的服务实际是远程服务的本地代理。说白了就是通过动态代理来实现。
  Java中有两常用动态代理方式,一种是 jdk 提供的动态代理,另一种是cglib
  3)通信
  RPC框架与具体的协议无关。RPC 可基于 HTTP 或 TCP 协议,Web Service 就是基于 HTTP 协议的 RPC,它具有良好的跨平台性,但其性能却不如基于 TCP 协议的 RPC。(4 心跳
  客户端
  连接是由 client 端发起建立并维持。如果 client 和 server 之间是直连的,那么连接一般不会中断(当然物理链路故障除外)。如果 client 和 server 连接经过一些负载中转设备,有可能连接一段时间不活跃时会被这些中间设备中断。为了保持连接有必要定时为每个连接发送心跳数据以维持连接不中断。心跳消息是 RPC 框架库使用的内部消息,在前文协议头结构中也有一个专门的心跳位,就是用来标记心跳消息的,它对业务应用透明。
  5)序列化
  Java 提供了默认的序列化方式(实现Serializable这种方式在请求量比较多的情况下,性能会有显著下降,市场上也出现了比较优秀的序列化框架,比如:Kryo、Hessian、Jackson 等,这些技术可以提高性能。

精彩内容,一键分享给更多人!
回复

使用道具 举报

您需要登录后才可以回帖

本版积分规则

关注我们
好程序员
千锋好程序员

北京校区(总部):北京市海淀区宝盛北里西区28号中关村智诚科创大厦

深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619

杭州龙驰智慧谷校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层

郑州校区:郑州市二七区航海中路60号海为科技园C区10层、12层

Copyright 2007-2019 北京千锋互联科技有限公司 .All Right

京ICP备12003911号-5 京公安网11010802011455号

请您保持通讯畅通1对1咨询马上开启