PHP开发Laravel

帮助 phper 理解 RPC 是怎么回事儿

2020-06-12  本文已影响0人  八重樱勿忘

1. 什么是 rpc

RPC 全称为 Remote Procedure Call,翻译过来为 “远程过程调用”。

目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用。远程调用的应用场景极其广泛,实现的方式也各式各样。

2. 从通信协议的层面

基于 HTTP 协议的(例如基于文本的 SOAP(XML)、Rest(JSON),基于二进制 Hessian(Binary))

基于 TCP 协议的(通常会借助 Mina、Netty 等高性能网络框架)

RPC (远程过程调用) 是什么

远程过程调用发展历程

早期的 RPC

XML-RPC,SOAP,WebService

PHPRPC

Hessian

JSON-RPC

Microsoft WCF,WebAPI

ZeroC Ice,Thrift,GRPC

Hprose

RPC 与 Socket 有什么区别?

两者都是调用远程的方法,都是 client/server 模式。

RPC(远程过程调用)采用客户机 / 服务器模式实现两个进程之间相互通信。socket 是 RPC 经常采用的通信手段之一,RPC 是在 Socket 的基础上实现的,它比 socket 需要更多的网络和系统资源。除了 Socket,RPC 还有其他的通信方法,比如:http、操作系统自带的管道等技术来实现对于远程程序的调用。微软的 Windows 系统中,RPC 就是采用命名管道进行通信。

RPC 与 REST 有什么区别?

通过了解 RPC 后,我们知道是 RPC 是 client/server 模式的,调用远程的方法,REST 也是我们熟悉的一套 API 调用协议方法,它也是基于 client/server 模式的,调用远程的方法的,那他俩又有啥区别呢?

REST API 和 RPC 都是在 Server 端 把一个个函数封装成接口暴露出去,以供 Client 端 调用,不过 REST API 是基于 HTTP 协议的,REST 致力于通过 http 协议中的 POST/GET/PUT/DELETE 等方法和一个可读性强的 URL 来提供一个 http 请求。而 RPC 则可以不基于 HTTP 协议

因此,如果是后端两种语言互相调用,用 RPC 可以获得更好的性能(省去了 HTTP 报头等一系列东西),应该也更容易配置。如果是前端通过 AJAX 调用后端,那么用 REST API 的形式比较好(因为无论如何也避不开 HTTP 这道坎)。

1、HTTP 和 RPC 同一级别,还是被 RPC 包含?

2、Restful 也属于 RPC 么?

图挂了

上图是一个比较完整的关系图,这时我们发现 HTTP(图中蓝色框)出现了两次。其中一个是和 RPC 并列的,都是跨应用调用方法的解决方案;另一个则是被 RPC 包含的,是 RPC 通信过程的可选协议之一。

因此,第一个问题的答案是都对。看指的是哪一个蓝色框。从题主的提问看,既然题主在纠结这两者,应该是指与 RPC 并列的蓝色框。

第二个问题是在问远程过程调用(红色框)是不是包含了 Restful(黄色框),这种理解的关键在于对 RPC 的理解。

RPC 字面理解是远程过程调用,即在一个应用中调用另一个应用的方法。那 Restful 是满足的,通过它可以实现在一个应用中调用另一个应用的方法。

但是,上述理解使得 RPC 的定义过于宽泛。RPC 通常特指在一个应用中调用另一个应用的接口而实现的远程调用,即红色框所指的范围。这样,RPC 是不包含 Restful 的。

因此,第二个问题的答案是 Restful 不属于 RPC,除非对 RPC 有着非常规的宽泛理解。

RPC 的英文全称是 Remote Procedure Call,翻译为中文叫 “远程过程调用”。其中稍显晦涩的其实就是 “过程”,过程其实就是方法。所以,可以把 RPC 理解为 “远程方法调用”。

要了解远程过程调用,那先理解过程调用。非常简单,如下图,就是调用一个方法。这太常见了,不多解释。

而在分布式系统中,因为每个服务的边界都很小,很有可能调用别的服务提供的方法。这就出现了服务 A 调用服务 B 中方法的需求,即远程过程调用。

要想让服务 A 调用服务 B 中的方法,最先想到的就是通过 HTTP 请求实现。是的,这是很常见的,例如服务 B 暴露 Restful 接口,然后让服务 A 调用它的接口。基于 Restful 的调用方式因为可读性好(服务 B 暴露出的是 Restful 接口,可读性当然好)而且 HTTP 请求可以通过各种防火墙,因此非常不错。

然而,如前面所述,基于 Restful 的远程过程调用有着明显的缺点,主要是效率低、封装调用复杂。当存在大量的服务间调用时,这些缺点变得更为突出。

服务 A 调用服务 B 的过程是应用间的内部过程,牺牲可读性提升效率、易用性是可取的。基于这种思路,RPC 产生了。

通过 hprose 实现 rpc

HPROSE 是 High Performance Remote Object Service Engine 的缩写,翻译成中文就是 “高性能远程对象服务引擎”。

它是一个先进的轻量级的跨语言跨平台面向对象的高性能远程动态通讯中间件。它不仅简单易用,而且功能强大。你只需要稍许的时间去学习,就能用它轻松构建跨语言跨平台的分布式应用系统了。

Hprose 支持众多流行的编程语言,例如:

通过 Hprose,你就可以在这些语言之间方便高效的实现互通了。

基础实现

在同一个文件夹下,执行一下操作,分别是拉取组建的命令,创建两个文件和执行 php 文件。

拉取 hprose 组件

composer require hprose/hprose

建立 server.php

<?php
require_once "./vendor/autoload.php";
use Hprose\Socket\Server;
function hello($name) {
return "Hello $name!";
}
$server = new Server("tcp://0.0.0.0:1314");
$server->setErrorTypes(E_ALL);
$server->setDebugEnabled();
$server->addFunction('hello');
$server->start();

建立 client.php

<?php
require_once "./vendor/autoload.php";
use \Hprose\Future;
use \Hprose\Socket\Client;
$test = new Client("tcp://127.0.0.1:1314");
$test->fullDuplex = true;
Future\co(function() use ($test) {
try {
var_dump((yield $test->hello("yield world1")));
var_dump((yield $test->hello("yield world2")));
var_dump((yield $test->hello("yield world3")));
var_dump((yield $test->hello("yield world4")));
var_dump((yield $test->hello("yield world5")));
var_dump((yield $test->hello("yield world6")));
}
catch (\Exception $e) {
echo ($e);
}
});

执行

php server.php
php client.php

结果

string(19) "Hello yield world1!"
string(19) "Hello yield world2!"
string(19) "Hello yield world3!"
string(19) "Hello yield world4!"
string(19) "Hello yield world5!"
string(19) "Hello yield world6!"

原文:帮助 phper 理解 RPC 是怎么回事儿

我的官方群点击此处。链接加入群聊【PHP/web/高级学习交流群】,一起学习,相互讨论。

群内已经有管理将知识体系整理好(源码,学习视频等资料),欢迎加群免费领取

这套精品PHP教程绝不是市场上的那些妖艳贱货可比,作为web开发的佼佼者PHP并不逊色其他语言,加上Swoole后更加是如虎添翼!进军通信 、物联网行业开发百度地图、百度订单中心、虎牙、战旗TV等!寒冬裁员期过后正是各大企业扩大招人的时期,现在市场初级程序员泛滥,进阶中高级程序员绝对是各大企业急需的人才,这套学习教程适合那些1-5年以内的PHP开发者正处于瓶颈期,想要突破自己进阶中高级、架构师!名额有限,先到先得!

八重樱:腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)​zhuanlan.zhihu.com

图标

部分资料截图:

image image image image

还有限时精品福利:

★腾讯高级PHP工程师笔试题目

★亿级PV高并发场景订单的处理

★laravel开发天猫商城组件服务

★战旗TV视频直播的架构项目实战

扫描下面二维码领取

image

对PHP后端技术,对PHP架构技术感兴趣的朋友,我的官方群点击此处,一起学习,相互讨论。

群内已经有管理将知识体系整理好(源码,学习视频等资料),欢迎加群免费领取。

本课程深度对标腾讯T3-T4标准,贴身打造学习计划为web开发人员进阶中高级、架构师提升技术,为自己增值涨薪!加入BAT特训营还可以获得内推大厂名额以及GO语言学习权限!!!

上一篇下一篇

猜你喜欢

热点阅读