SOA,RMI,RPC,SOAP,REST等名称的理解
2019独角兽企业重金招聘Python工程师标准>>>
今天我看到之前收藏的一篇文章,主要讲的分布式的一些东西,现在来回顾一下一些东西的意思,一下都是我自己的理解,如果有不对的地方请尽管提出,哈哈。本文主要讲一些名词。我之前很容易混淆的,我相信现在也很多人不知道其中的区别
1、SOA(本文不讲一些官方定义)
全拼Service Oriented Architecture 中文意思就是面向服务构架是一种模型,说白了是一种思想。为什么会出现这种思想呢?其实就是人们的需求越来越大,流量越来越大,所以系统也是越来越大。举一个列子,公司A以前有一个类似与淘宝的电商项目(B2C)A,后面随着公司业务扩大,要做一个B2B项目B以及项目C。项目A,B,C都是需要支付的。那如果常规就是把项目A的支付代码放到B,C上,以后如果还有项目就继续这么做。但这样太没有效率了。所以就产生了分布式,SOA等一些名称。商量之后的做法就是讲支付独立出来成为一个新的项目,这里我们叫D系统,A,B,C项目需要支付的时候直接调用D项目的支付接口。这样一来,以后不管多少项目,想要支付,只要有一个支付项目就行,直接调用接口。我不知道这样说大家能不能理解SOA这种思想产生的原因。
推荐链接http://blog.csdn.net/luohuacanyue/article/details/12521699
2、RMI
SOA思想提出以后,就有很多基于在这个模型上的产物,很多适用于分布式的产物,同事也是越来越庞大系统的产物。Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案,所以如果不是java的系统就不能使用RMI,这也是其缺点之一。RMI全部的宗旨就是尽可能简化远程接口对象的使用,相当于在服务器端暴露服务,通过bind或者rebind方法注册到RMIRegistry中,注册的信息中包含url,以及相应的类。客户端在在注册中心根据url得到远程对象(stub,存根),然后调用stub远程调用方法,底层的一些stub怎么连接服务器,怎么获取结果返回,下面的参考链接都应该有讲到。
参考文章:http://www.jianshu.com/p/2c78554a3f36
http://blog.csdn.net/guyuealian/article/details/51992182
3、RPC
了解上面的RMI,它的主要的流程就是Client<-->stub<-->[NETWORK]<-->skeleton<-->Server,还有一个比较重要的概念就是RMIRegistry
,其实大家网上去查RPC的时候流程其实都差不多,可能叫法和底层东西有点不一样,其实其实现所遵循的模型还是类似的。主要的区别的话是RMI是只适用于java的,而RPC任何语言都可以;第二点就是他们两者的调用方式不一样,最终的目标还是一致
其与RMI大致的区别
1)RPC 跨语言,而 RMI只支持Java。
(2)RMI 调用远程对象方法,允许方法返回 Java 对象以及基本数据类型,而RPC 不支持对象的概念,传送到 RPC
服务的消息由外部数据表示 (External Data Representation, XDR) 语言表示,这种语言抽象了字节序类和数据类型结
构之间的差异。只有由 XDR 定义的数据类型才能被传递, 可以说 RMI 是面向对象方式的 Java RPC 。
(3)在方法调用上,RMI中,远程接口使每个远程方法都具有方法签名(url)。如果一个方法在服务器上执行,但是没有相
匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。
在RPC中,当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。这就向RPC服务器表明,被请求的方法在为 “classname”的类中,名
叫“methodname”。然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。这里的
参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。说的直白一点就是rmi是自己写一个url,如果正确就获得相应的stub,而rpc的url是从注册中心去拿的,不会出现url不对的情况
http://blog.jobbole.com/92290/
4、soap
全称Simple Object Access Protocol简单对象访问协议,是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。关键词——协议,实现分布式,webservice的一种协议,一种解决方式。
参考文章:http://blog.csdn.net/zhangzeyuaaa/article/details/20041015
5、rest
比如有个url:http:www.test.com/user/1,这个地址既要表示删除id为1的用户、又要表示修改id为1的用户,还要表达获取id为1的用户,那么,就要用到http1.1的不同的请求方法:get、post、delete、put,
对于rest这个东西,其实本人一点也没有接触吧,一下两个网址,本人认为比较好,大伙可以去看一下,本人就rest就不多阐述了(怕误导大家,哈哈)
http://www.ruanyifeng.com/blog/2011/09/restful.html
http://www.jianshu.com/p/65ab865a5e9f
转载于:https://my.oschina.net/lsl1991/blog/1596264
SOA,RMI,RPC,SOAP,REST等名称的理解相关推荐
- 白话讲山寨SOA,少一些迷惑、多一些理解,你的程序架构SOA了吗?
开场白: 我也在不断反省自己,不管我说得对错,总会有一大批人来打击我,原因很简单"我自傲.我自大".你其实什么人都可以得罪,但是千万不能得罪小人,小人会咬着你不放,例如会有一大堆无 ...
- SOA RPC SOAP REST
web service顾名思义这是一种提供service的形式,而且只能通过http(web)来提供service(web service三要素:SOAP.WSDL(WebServicesDescri ...
- 咖啡馆的故事:FTP, RMI , XML-RPC, SOAP, REST一网打尽
周末的咖啡馆有点奇怪, 一群人围着几个老头儿在聊天. "快说说,你们那个时候没有HTTP, 没有JavaScript,到底是怎么让这些机器上的程序进行'交谈'的?" ftp老头儿 ...
- 转 深入探讨SOAP、RPC和RMI
[b] 这篇文章是从网上转下来的. 原文应该是写于2001年. 10年了, 技术也有了很多新的发展. 比如 java 中的 JMX 的广泛应用. 但底层的东西还是这些. 简单转过来, 让自己也想想分布 ...
- 【Java从0到架构师】分布式框架通信核心基础 - 序列化(JDK、Protobuf)、远程过程调用 RMI
分布式框架通信核心基础 序列化 JDK 的序列化 JDK 序列化的一些细节 Protobuf 序列化 Protobuf 环境搭建与操作 Protobuf 原理分析 实际数据传输 序列化技术选型 远程过 ...
- restful soap_Web服务面试问题– SOAP,RESTful
restful soap Welcome to the Web Services Interview Questions with detailed answers. Recently I have ...
- WebService:跟孔浩学习(契约优先、Schema、WSDL、SOAP、用户管理小系统)
异构平台之间的交互 XML (DTDàSchema->Stax(XStream).SAX.Dom4J.PULL) JAXB XStream和Jackson完成Json和java的转化 SO ...
- SOAP Web服务
根据W3C定义,SOAP是什么 " SOAP是一种轻量级协议,旨在在分散的分布式环境中交换结构化信息. 它使用XML技术来定义和扩展消息传递框架,从而提供可以在各种基础协议之间交换的消息构造 ...
- 微服务与SOA以及服务间通讯协议
说到微服务,就一定会想到微服务.分布式.集群.SOA.SOAP.restful.Http.RPC等相关概念,而这些概念都一些界限都非常的模式,很难理清楚确切的概念,本篇主要是介绍我对微服务中常遇到的一 ...
最新文章
- tcpdump抓取ipip报文
- 一行命令,瞬间从“马赛克”到高清影像
- Linux文件系统基础之inode和dentry
- 模拟CA机构制作CA机构证书
- 1.5编程基础之循环控制 23 药房管理
- 那个20多万“不可描述”照片的数据集,有人用它做了鉴黄模型 | Demo
- 静态/动态注冊广播的差别
- Android Studio 第一个JNI程序
- 面试官: MySQL 数据库的优化,你知道有哪些?
- MOSSE目标跟踪算法步骤
- 数学建模之向量自回归模型
- 简易个人所得税计算器
- 华为社招机考考什么_华为机考一般考什么
- 携程网移动端首页-学习与自我分析
- 如何在 ggplot2 中制作饼图(附示例)
- 深度学习利器之自动微分(2)
- TransUNet阅读笔记与训练尝试
- Linux磁盘分区初始化
- 法律人如何使用python_执业10年,我见过太多法律人掉进这个大坑!
- 协作通信关键技术(王辉)阅读心得
热门文章
- 谷雨钜献 | 用深度学习理解遥感图像,识别效率提升90倍,PaddlePaddle中科院遥感地球所...
- NVIDIA教你用TensorRT加速深度学习推理计算 | 量子位线下沙龙笔记
- 不要小看日本的AI公司
- 英语每日阅读---1、科学美国人60秒:如果觉得唱歌很难 那就吹口哨吧
- 解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错
- Javascript知识汇总------获取构造函数constructor名称和一些字符串处理方法
- struts2中的值栈对象ValueStack
- html中span不显示背景
- JavaScript-No.01 JavaScript实现封装、继承、多态
- WinDBG脚本入门