目录

第1章 远程过程/函数调用RPC概述

1.1 什么是编程语言原生的函数调用

1.2 IPC:(Inter Process Communication )跨进程通信

1.4 什么是本地过程(函数)调用LPC

1.5 什么是远程过程/函数调用RPC

第2章 远程过程调动的网络架构

2.1 去中心化的点对点架构(P2P架构)

2.2 客户端-服务器模式(二层C/S架构)

2.3 客户端-服务器模式(三层C/S架构)

2.4 MVC 架构

第3章 RPC主要框架

3.1 RPC框架的作用

3.2 RPC调用需要知道的信息

3.3 比较典型RPC框架


第1章 远程过程/函数调用RPC概述

1.1 什么是编程语言原生的函数调用

计算机的函数,是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时,还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,供计算机处理;所谓出口,就是指函数的函数值,在计算机求得之后,由此口带回给调用它的程序。

原生的函数调用的核心是:

(1)调用者首先给被调函数传入参数,然后,等待被调函数的处理结果,直到被调函数获得执行结果,并把返回给调用者,最后,调用者继续执行后续的代码。

(2)函数执行链中的所有函数执行体,在同一个进程中。

1.2 IPC:(Inter Process Communication )跨进程通信

进程用户空间是相互独立的,一般而言是不能相互访问的。

但很多情况下进程间需要互相通信,来完成系统的某项功能。

进程通过与内核及其它进程之间的互相通信来协调它们的行为。

进程间通信是指两个相互隔离的进程间程序之间需要相互交互数据。

进程间通信可以有多种手段和方法:

  1. 虚拟文件系统通信
  2. 无名管道:pipe 通信
  3. 信号量:semaphore
  4. 消息队列: message queue
  5. 共享内存:shared memory
  6. 套接字:socket
  7. 信号: Signal

1.4 什么是本地过程(函数)调用LPC

LPC是“本地过程调用(Local Procedure Call)”的缩写。所谓“本地过程调用”是与“远程过程调用”即RPC相对而言的。

RPC是广义的,RPC可以发生在不同主机的进程之间,也可以发生在同一台主机的进程之间,发生在同一台主机的进程之间就是LPC,当然,如果发生在同一个进程内部,就是原生的函数调用。所以在Unix语境下就没有LPC这一说,即使发生在同一台主机上也称为RPC。

在历史上,RPC是“开放软件基金会(OSF)”设计和提出的一种用以实现“Unix分布计算环境(Unix DCE)”的标准。实际上,微软的DCOM技术,就是建立在RPC基础上的。Win2000的RPC可以采用TCP/IP、SPX、NetBIOS、命名管道、以及“本地”作为底层的通信手段,这“本地”就是LPC。

另一方面,Windows是一个带有许多微内核系统特征的操作系统(尽管它的内核不是微内核),系统中有不少“系统级”的服务进程,例如大家已经熟知的csrss、管理用户登录的“本地安全认证服务”进程LSASS等等,用户进程以及微软提供的系统工具软件经常需要调用由这些服务进程提供的服务,这里LPC就起着重要的作用。

LPC的基础是一种称为“端口(Port)”的进程间通信机制,类似于本地的(Unix域的)Socket。这种Port机制提供了面向报文传递(message passing)的进程间通信,而LPC则是建立在这个基础上的高层机制,目的是提供跨进程的过程调用。注意这里所谓“跨进程的过程调用”不同于以前所说的“跨进程操作”。前者是双方有约定、遵循一定规程的、有控制的服务提供,被调用者在向外提供一些什么服务、即提供哪些函数调用方面是自主的,而后者则可以是在不知不觉之间的被利用、被操纵。前者是良性的,而后者可以是恶性的。

1.5 什么是远程过程/函数调用RPC

特指一种隐藏了过程调用时实际通信细节IPC方法。客户端将调用一个本地方法,而这个本地方法则是负责透明的与远程服务端进行过程间通信。这个本地方法会将相关参数顺序打包到一个消息中,然后把这个消息发送给服务端提供的方法,服务端的方法会从消息中解出序列化发出来的参数,然后执行,最后仍以同样的方式将方法的返回值发送给客户端。

远程过程调用的角色划分:

客户进程:本地函数调动的应用程序。

服务器进程:提供数据的远程服务器。

第2章 远程过程调动的网络架构

2.1 去中心化的点对点架构(P2P架构)

P2P架构中,没有明显的服务器和服务器,每个机器,既是客户端也是服务器。

这种架构对于一些去中心化即时通信应用是有吸引力的。许多直接即时通讯社交应用涉及信息管理和多用户交互方面。一个客户端主机可以同时作为 Client 或 Peer,这取决于该主机在应用程序的角色定义。

P2P 很适用于语音或视频会议的场景。P2P 的很明显的特征是功能的对称性。适合数据面。

优点:降低了客户端之间通信的延时,提升了客户端到客户端通信的效率。

缺点:如果一个客户端与多终端同时通信,就会比较复杂。

2.2 客户端-服务器模式(二层C/S架构)

一切将服务提供者(服务器)和服务消费者(客户端)分开的分布式计算模式。

各个计算机之间以客户机和服务器的关系进行工作与交换信息,客户机首先向服务器发送请求,然后服务器完成请求的操作,并把结果返回给客户机。

C/S 应用程序 一部分是由以与客户端或用户交互为基础的主机,另一部分主机则是专门用于管理大型数据存储库,处理应用特有的数据和逻辑的服务器。

这给 C/S 架构引入了不对称的功能性,客户端需要向服务端发起请求,而服务端需要满足(答复)客户端的请求。

C/S 架构适合应用于在服务器上发布的信息管理应用程序。

OLTP应用则是传统的 C/S 架构中的良好示例。

On-Line Transaction Processing联机事务处理过程(OLTP),也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。

2.3 客户端-服务器模式(三层C/S架构)

  • 第一层:客户端(用户)。
  • 第二层:服务端(用于存放应用程序的逻辑)。
  • 第三层:数据库(不同的应用程序所需要的共享数据)。

三层的 C/S 架构

这种3层架构的动机包括:

  • 表现:专注于单个用户
  • 应用程序逻辑:支持多用户,通过添加多台服务器来支持更多用户的成本是较低的。
  • 关键共享数据:支持多个应用程序。

这三层的 C/S 架构中,每层之间都是n…1的关系。

显然三层架构比两层架构具备更高的扩展性

向客户端隐藏的异构数据库支持以及提供了不同的通信协议的更好支持。

2.4 MVC 架构

模型 - 视图 - 控制器(MVC)应用程序架构是用于分析分布式应用程序的功能的流行模型。

这种抽象有助于将应用程序分解成逻辑组件,以实现更容易/更清晰的分布式实现。

MVC 划分在监视和处理数据中涉及的对象之间的功能,以便最小化这些对象之间的耦合度,并因此将这些对象映射在多层架构上。

最初 MVC 用户解耦:输入、数据处理、输出 UI 界面。

但是,将此模型映射到多层网站或企业应用程序也很简单。

  • 模型(Model):操作数据。

当 Model 层数据变更时通知 View 。 它允许 Controller 访问 Model 封装的方法。

  • 视图(View):将 Model 提供的内容渲染出来。

它可以查询Model关于数据的模型并指定如何呈现它。

  • 控制器(Controller):定义应用程序的行为。

它将用户手势映射到要由Model执行的操作。在标准的 GUI 客户端,用户手势可以是按压按钮。在 Web 环境,它可以是发起一次 HTTP GET/POST 请求。通常一个Controller,表示一组相关的功能。

第3章 RPC主要框架

3.1 RPC框架的作用

RPC 是远程过程调用的方式之一,涉及调用方和被调用方两个进程的交互。

RPC(Remote Procedure Call)远程过程调用是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议,简单的理解是一个节点请求另一个节点提供的服务。

RPC只是一套思想,基于这个思想来实现的框架都可以称为 RPC 框架。

RPC框架是以库的形式存在的。

RPC 提供类似于本地方法调用的形式在有RPC框架的支持下,对于调用方来说,调用 RPC 方法和调用本地方法并没有明显区别。

3.2 RPC调用需要知道的信息

对使用者来说,屏蔽了网络通信的细节。

你只需要知道调用这个方法返回的结果,而无需关注底层逻辑。

从封装的那个方法角度来看,调用之前我们需要知道什么?

  • 直接调用的语义,也可以理解为接口规范。(比如RESTful)

  • 中间的网络传输协议 (比如HTTP或HTTP2)

  • 传输的数据序列化与反序列化规范(比如JSON、ProtocolBuffers)。

有了这些约定,我就知道:

  • 如何给你发数据
  • 发什么样的数据
  • 你返回给我的又是什么样的数据。

3.3 比较典型RPC框架

(1)Dubbo

Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:

  • 面向接口的远程方法调用,
  • 智能容错和负载均衡,
  • 以及服务自动注册和发现。

(2)Thrift 

Thrift 是一个软件框架(远程过程调用框架),用来进行可扩展且跨语言的服务的开发。

它结合了功能强大的软件堆栈和代码生成引 擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

thrift 最初由 facebook 开发,07 年四月开放源码,08 年 5 月进入 apache 孵化器,现在是 Apache 基金会的顶级项目

thrift 允许你定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成 RPC 客户端和服务器通信的无缝跨编程语言。。

(3)gRPC

gRPC是由Google开发的一款语言中立、平台中立、高性能、通用的开源的开源RPC框架,主要用来解决性能损失的问题。

gRPC使客户端和服务端应用程序可以透明地进行通信,并简化了连接系统的构建。

它使用HTTP/2作为通信协议,使用ProtocolBuffers作为序列化协议。

HTTP/2协议:

从上图可以看出,客户端只需要书写http的文本,就可以实现远程过程调用,从服务器获取数据。

当然,文本是有一定的协议格式的。

(4)Linux rpcgen

rpcgen可以自动生成RPC服务器程序的大多数代码,它的输入为一个规格说明文件,它的输出为一个C语言的源程序。因此它是通过C语言实现的RPC协议工具,需要安装。

规格文件(*.x)包含常量、全局数据类型以及远程过程的声明。Rpcgen产生的代码包含了实现客户机和服务器程序所需要的大部分源代码。他包括参数整理、发送RPC报文、参数和结果的外部数据表示以及本地数据表示的转换等。

不过在由rpcgen生成的源文件中,没有过程的具体实现,所以程序员必须要手工编辑这些文件,实现这些过程。

[架构之路-61]:目标系统 - 平台软件 - 基础中间件 - 远程过程(函数)调用RPC原理与其网络架构相关推荐

  1. 基础架构、基础服务、基础平台、基础中间件等等

    基础架构.基础服务.基础平台.基础中间件等等 程序开发毕竟还不是搬砖这种无脑体力劳动,需要事先有标准,有架构,有设计,绝对不是新公司今天创立,明天就可以开始编码的.其实很多公司在起步的时候没有财力和资 ...

  2. [架构之路-56]:目标系统 - 平台软件 - 总体架构概述

    目录 前言: 第1章 嵌入式硬件架构案例 1.1 通用的嵌入式硬件架构 1.2 基站设备通用硬件架构 1.3 嵌入式SOC通用架构 1.4 SOC芯片案例 第2章 嵌入式软件总体架构 2.1 嵌入式软 ...

  3. Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(1)

    1.什么是 Dubbo? Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能.轻量级的开源Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错 ...

  4. Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(3)

    1.什么是负载均衡 先来个官方的解释. 维基百科对负载均衡的定义:负载均衡改善了跨多个计算资源(例如计算机,计算机集群,网络链接,中央处理单元或磁盘驱动的的工作负载分布.负载平衡旨在优化资源使用,最大 ...

  5. Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(2)

    1.Dubbo 的架构图解 上述节点简单说明: Provider: 暴露服务的服务提供方 Consumer: 调用远程服务的服务消费方 Registry: 服务注册与发现的注册中心 Monitor: ...

  6. 中学计算机基础Word授课ppt,中学信息技术- 计算机硬件与软件基础知识课件.ppt...

    中学信息技术- 计算机硬件与软件基础知识课件.ppt (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分 计算机硬件与软件基础知识2.1 ...

  7. 《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.1.2 架构师的职责

    1.1.2   架构师的职责<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  8. 从DPU看未来网络架构的演进趋势

    关注公号回复"220427"下载 <Aquila: A unified, low-latency fabric for datacenter networks> 未来D ...

  9. NR接入网从标准到原理:第一篇·NR网络架构(一)

    Chapter 1. NR网络架构 (一) 目前的市面上的书籍往往以5G指标.标准化进展.LTE整体介绍等模块作为开端.这些内容大同小异,随便翻阅一本书籍都能得到较为完整的认知.而本系列文章重点在于查 ...

最新文章

  1. NAnt学习笔记(2) -- 节点的含义解释
  2. think php5是什么,thinkphp5是什么
  3. 在XUnit中用Moq怎样模拟EntityFramework Core下的DbSet
  4. python函数不同类型参数顺序
  5. 290. Word Pattern
  6. rocket-console控制台安装
  7. 典范杜希奇与机器人_典范英语7_16 杜希奇与机器人.ppt
  8. 国外大神制作的史上最精简Win10系统,真有那么好用吗?
  9. IE11降级到IE8
  10. Eclipse配置JRE库
  11. 安徽大学本科毕业论文中英文题目修改指南
  12. python打印一年的日历_python一年月份_Python程序可打印任何一年的日历
  13. linux服务运维管理,Linux服务器运维管理(第2版)
  14. 升降压斩波电路matlab,升降压斩波电路matlab仿真
  15. 茶叶分类--六大茶类
  16. java gps经纬度坐标转高德坐标_RN中Geolocation的经纬度坐标转换为高德地图坐标
  17. 上官婉儿飞天连招(玩法解析)
  18. verilog时钟翻转怎么写_Verilog基本电路设计之二(时钟无缝切换)
  19. windows workflow foundation(WWF)学习记录
  20. 安卓 jni 开发 —— Android Studio 打包 so 的坑

热门文章

  1. 少儿编程微课程7:星际飞行单机版
  2. 小孩由祖母带大会越发机灵[图]
  3. 基于unity自己写光追。
  4. 零知开源分享-L298N模块使用 电机驱动 TT马达
  5. 你尿尿的时长是不是21秒?2次登上Nature封面的他,靠研究拉尿获得“诺贝尔奖”.........
  6. “一品四境”学JAVA——书籍推荐/路径规划
  7. formate在python_python的format方法
  8. 微信小程序加盟需要注意什么?
  9. IDEA中maven项目的language level 修改后自动重置问题
  10. QT开发--Visual Studio2013--配置代码32bit、64bit环境