RPC(Remote Procedure Call Protocol)远程过程调用协议。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就Q M F x x 6像调用本地应用程序中的对象一样。
比较正式的描述是:一种通过网络从a 1 N 2 k P _ j 0远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
那么我们至少从这样的描述中挖掘出几个要点:
- RPC是协议:既然是协议就只是一套规范,那么就需要有人遵循这套规范来进行实现。目前典型的RPC实现包括:Dubbo、Thrift、GRPC、Hetty等。这里要说明一下,目前技术的V ^ o j 2 Q f = 2发展趋势来看,p ! & ^ F 7 V实现了RPC协议的应用工具往往都会附加其他重要功能。
- 网络协议和网络IO模型对其透明:既然RPC的客户端认为自己是在调用本地对象。那么传输层使用的是TCP/UDP还是HTTP协K G # i议,又或者是一些其他的网络协议它就不需要关心了。既然网络协议对其透明,那么调用过程中,使用的是哪一种网络IO模型调用者也不需要关心。
- 信息格式对其透明:我们知道在本地应用程序中,对于某个对象的调用需要传递一些参数,并且会返回一个调用结果x N u 7 H。至于被调用的对象内部是如何使用这些参数,并计算出处理结果的,调用方是不需要. C 4 M # / 3 X关心的。那么对于远程调用来说,这些参数会以某种信息格式传递给网络上的另外一台计算机,这个信息格式是怎样构成的,调用方是不需要关心的。
- 应该有跨语言能力:为什么这样说呢?因为调用方实际上也不清楚远程服务器的应用程序是使用什I f E R u 1 K么语言运行的。那么对于调用方来说,无论服务器方使用的是什么语言,本u l a f / % 5 1 f次调用都应该成功,并且返回值也应该按照调用方程序语言所能理解的q t 1 :形式进行描述。
为什么要用RPC
其实这是应用开发到一定的B G / T阶段的强烈需6 D ^ G求驱动的。
- 如果我们开发简单的单一应用,逻辑简单、_ C { & - m用户不多、流量不大,那我们用不着;
- 当我们的系统访问量增大、业务增多时,我们会发现一台单机运行此系统已O 1 c V经无法承受。此时,我们可以将业务拆分成几个互不关联的应用,M Q H ^ + o ~ A分别部署在各自机器上,以划清逻辑并减小压力。此时,我们也可以不需要RPC,因为应用之间是互不关联的。
- 当我们的业务越来越多、应用也越来越多w / w 2 * H时,自然的,我们会发现有些功能已经不能简单划分开来或者划分不出来。此时,可以将公共业务逻辑抽离出来,将之组a 1 7 p @ % n成独j p 1 k x : 2 N ?立的P P , $ D服务Service应用) E E i 。而原有N g d Q +的、新增的应用都可以与那些独立的Service) 5 e应用 交互,以此来完成完整的业务功能。所以此时,我们急需一种高效的应用程序之间的通讯手段来完成这种需求,所以你看,RP9 = } TC大显身= 3 w [ n手的时候来了!其实3描述的场景也是服w E F q e | w务化 、微服务 和分布式系统架构 的基础场景。即RPC框架就是实现以上结构的有力方式。
常用的RPC框架
目前常用的RPC框架如下:
- Thrift:thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Ps M )ython, PHP, Ruby, Erlang, Perl, Haskell, C#Y , s h w K S j 2, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。
- Dubbo:Dubbo是一个分布式服务框架,以及SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容B 6 B错,依赖分析与降级等。Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,S t 4 ~ w ? ^Dubbo自2011年开源后,已被许多非阿里系公司使用。
- Spring Cloud:Spring Cloud由众多子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud c Z L B , R g f Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全R 5 b局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。Spring Cloud基于Spring Boot, 使得开发部p l + C u 5署极其简单。
- gRPC:一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
本文系本站编辑转载,文章版权归原作者所有,内容为作者个人观点,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请与本站联系,本站将在第一时间删除内容!