RPC是什么?科普一下
RPC概念及分类
RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用。远程调用的应用场景极其广泛,实现的方式也各式各样。
从通信协议的层面,大致可以分为:
基于HTTP协议的(例如基于文本的SOAP(XML)、Rest(JSON),基于二进制Hessian(Binary))
基于TCP协议的(通常会借助Mina、Netty等高性能网络框架)
从不同的开发语言和平台层面,分为:
单种语言或平台特定支持的通信技术(例如Java平台的RMI、.NET平台Remoting)
支持跨平台通信的技术(例如HTTP Rest、Thrift等)
从调用过程来看,分为:
同步通信调用(同步RPC)
异步通信调用(MQ、异步RPC)
常见的几种通信方式
1. 远程数据共享(例如:共享远程文件,共享数据库等实现不同系统通信)
2. 消息队列
3. RPC(远程过程调用)
序列化/反序列化
只有二进制数据才能在网络中传输,序列化和反序列化的定义是:
将对象转换成二进制流的过程叫做序列化,
将二进制流转换成对象的过程叫做反序列化。
Java和.NET平台中常见的通信技术
Java中支持的包括:
|
技术 |
简介 |
是否支持跨平台 |
|
Corbra |
90年代产物,已被淘汰 |
不支持 |
|
RMI |
EJB时代产物,已逐渐被淘汰 |
不支持 |
|
WebService |
基于Http SOAP,效率低,逐渐被淘汰 |
支持 |
|
Hessain |
基于Http,二进制序列化,效率高,使用广泛 |
支持 |
|
Rest(spring mvc等) |
支持Http Rest,广泛应用于无线API,开放平台等 |
支持 |
|
JMS、开源MQ |
Java消息服务(消息中间件),使用广泛 |
支持 |
|
Socket |
基于Mina、Netty(NIO、AIO高效通信) |
理论上支持 |
.NET中包括:
|
技术 |
简介 |
是否支持跨平台 |
|
WebService |
基于Http SOAP,效率低,逐渐被WCF整合淘汰 |
支持 |
|
.NET Remoting |
通信效率尚可,使用复杂,逐渐被WCF整合淘汰 |
不支持 |
|
WCF SOAP |
整合了原有的WebService,通信效率低 |
支持 |
|
WCF NET.TCP |
通信效率高,部分.NET项目内部服务在使用 |
不支持 |
|
WCF Rest |
使用较少,已经被Web Api逐渐取代 |
支持 |
|
Web Api |
支持Http Rest,广泛应用于无线API,开放平台等 |
支持 |
|
MSMQ、开源MQ |
微软自己的消息中间件或者其他开源MQ |
支持(MSMQ除外) |
|
Hessain .NET |
基于Http,二进制序列化,效率高,使用较少 |
支持 |
|
Socket |
通过Socket网络编程方式实现系统通信 |
理论上支持 |
互联网时代常见的RPC技术和框架
应用级的服务框架:
Dubbo/Dubbox
ZeroICE
GRpc
Spring Boot/Spring Cloud
基础通信框架:
Protocol Buffers
Thrift
远程通信协议:
RMI
Socket
SOAP(HTTP XML)
REST(HTTP JSON)
RPC的注意事项
性能
影响RPC性能的主要在几个方面:
1.序列化/反序列化的框架
2.网络协议,网络模型,线程模型等
安全
RPC安全的主要在于服务接口的鉴权和访问控制支持。
跨平台
跨不同的操作系统,不同的编程语言和平台。
跨平台RPC技术和常见框架
SOAP WebService
Hessian
HTTP Rest
Thrift
GRpc(Protobuffer)
Zero ICE
消息中间件
RPC是什么?科普一下的更多相关文章
- RPC 知识科普一下
RPC概念及分类 RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”.目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用 ...
- 由"永恒之蓝"病毒而来的电脑科普知识
永恒之蓝病毒事件: 继英国医院被攻击,随后在刚刚过去的5月12日晚上20点左右肆虐中国高校的WannaCry勒索事件,全国各地的高校学生纷纷反映,自己的电脑遭到病毒的攻击,文档被加密,壁纸遭到篡改,并 ...
- RPC好,还是RESTful好?
看到知乎上有这样一个问题 WEB开发中,使用JSON-RPC好,还是RESTful API好? 还有其他优秀的推荐方案吗? -------------------------------------- ...
- 由"永恒之蓝"病毒而来的电脑知识科普
永恒之蓝病毒事件: 继英国医院被攻击,随后在刚刚过去的5月12日晚上20点左右肆虐中国高校的WannaCry勒索事件,全国各地的高校学生纷纷反映,自己的电脑遭到病毒的攻击,文档被加密,壁纸遭到篡改,并 ...
- 一个虐你千百遍的问题:“RPC好,还是RESTful好?”
看到知乎上有这样一个问题 WEB开发中,使用JSON-RPC好,还是RESTful API好? 还有其他优秀的推荐方案吗? -------------------------------------- ...
- 科普,想成为厉害的 Java 后端程序员,你需要懂这 13 个知识点
老读者就请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 站 ...
- 科普,想成为厉害的 Java 后端程序员,你需要懂这些
站在运筹帷幄的角度来看,一名厉害的 Java 后端程序员都需要懂得哪些知识呢?我想,这也是很多读者迫切想知道的一个问题,因为如果不站在一个宏观的角度的话,所有学过的知识点都是零散的,就感觉像一只迷路的 ...
- RPC、HTTP、RESTful
RESTful RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义.RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT ...
- 从RPC开始(一)
这是一篇关于纯C++RPC框架的文章.所以,我们先看看,我们有什么? 1.一个什么都能干的C++.(前提是,你什么都干了) 2.原始的Socket接口,还是C API.还得自己去二次封装... 3.C ...
随机推荐
- MySQL数据库罕见的BUG——Can't get hostname for your address
在连接mysql jdbc时候,抛出了 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communicat ...
- 递归实现n(经典的8皇后问题)皇后的问题
问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...
- 从Unity3D编译器升级聊起Mono
接前篇Unity 5.3.5p8 C#编译器升级,本文侧重了解一些Mono的知识. Unity3D的编译器升级 新升级的Mono C#编译器(对应Mono 4.4) Unity编辑器及播放器所使用的M ...
- 从is(":checked")说起
*此文所用jQuery版本应大于1.6.1 如何判断一个单选(复选)框是否选中. 对于刚接触jQuery的人,第一反应必然是. <input id="checkbox1" ...
- html5 audio总结
前言 html5中对音频,视频播放原生支持.最近做了一个音乐播放器,得益于快过年了,才能抽出一点时间来总结一下.总的来说,html5对audio的支持非常强大, 难怪flash要死.浏览器上装播放插件 ...
- 我们为什么不能只用O记号来谈论算法?
在刷LeetCode-1TwoSum的时候,有个人在论坛留言,大致意思如下: 我的算法击败了90%的人,O(nlgn)算法比O(n)算法快. 我觉得这个人是不懂算法的.让我一步一步解释. # O的含义 ...
- Android-横竖屏切换问题(转)
先附上链接:http://www.cnblogs.com/xiaoQLu/p/3324503.html 项目要求要做横竖屏,发现横屏的时候,生命周期函数会乱执行,网上找了一大堆资料. 结果如下: 只需 ...
- iOS 多个播放器同时播放,双击全屏,单击退出全屏
前言:公司需求如下:点击一个按钮播放一个视频,最多同时播放4个:双击某视频让其全屏,单击再恢复原来的样子.IOS的播放器有两种,MPMoviePlayerController,AVAudioPlaye ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
- 控制EasyUI DataGrid高度
这次要说的是控制EasyUI的高度,平时我公司的项目,用EasyUI较多,然后datagrid这个组件是用的非常多的.平时我们都是固定高度,常见代码如下: <table ...