SOA、SOAP、REST、RPC

一、SOA

SOA(面向服务的软件架构、Service Oriented Architecture),是一种软件设计模式,主要应用于不一样应用组件之间经过某种协议来互操做。例如典型的  通讯网络协议。所以SOA是独立于任何厂商、产品、技术的。编程

SOA有两个层面的定义:设计模式

  • 从应用的角度定义:SOA是一种应用框架,它着眼于平常的业务应用,并将他们划分为单独的业务功能和流程,及所谓的服务。
  • 从软件的基本原理定义:SOA是一个组件模型,它将应用程序的不一样功能单元(服务)经过这些服务之间定义良好的接口和契约联系起来。
SOA对于实现企业资源共享,打破 “信息孤岛” 的步骤以下:
  1. 把引用和资源转换为对象;
  2. 把这些服务编程标准的服务,造成资源的共享;
基于SOA的解决方案,SOA架构可分为五层水平:
  • 用户界面层 ---- 这些GUI的最终用户或应用程序访问的应用程序/服务接口;
  • 业务流程层 ---- 在应用方面的业务用例服务;
  • 服务层 ---- 服务合并在一块儿,提供统一的实时服务;
  • 服务组件层 ---- 用来建造服务的组件,如功能库、技术库、技术接口等;
  • 操做系统 ---- 这层包含数据模型,企业数据仓库,技术平台等;
由于SOA不依赖于任何技术,所以SOAP、RPC、REST是对SOA的不一样实现。

二、SOAP 

简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息,技术应用在WebService上。服务器

三、REST

表征状态转移(Representional State Transfer)。其宗旨是从资源的角度来观察整个网络,分布在各处的资源由URI肯定,而客户端的应用经过URI来获取资源的表征。得到这些表征导致这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态。网络

举个栗子:架构

Marcus是一个农民,他有4头牛,12只鸡和3头奶牛。他如今模拟一个REST API,而我是客户端。若是我想用REST来请求当前的农场状态,我仅会问:“State?”Marcus会回答:“4头猪、12只鸡、3头奶牛”。框架

这是REST最简单的一个例子。Marcus使用表征来传输农场状态。表征的句子很简单:“4头猪、12只鸡、3头奶牛”。
再往下看,看我如何让Marcus用REST方式添加2头奶牛?
按照常理,能够会这样说:Marcus,请在农场你再添加2头奶牛。难道这就是REST方式吗?难道就是经过这样的表征来传输状态的吗?不是的!这是一个远程过程调用,过程是给农场添加2头奶牛。
Marcus很愤怒地响应到:“400,Bad Request”,你究竟是什么意思?
因此,让咱们从新来一次。咱们怎样作到REST方式呢?该怎样从新表征呢?它应该是4头猪、12只鸡、3头奶牛。好,让咱们再次从新表征……
我:“Marcus,……4头猪、12只鸡、5头奶牛!”
Marcus:“好的”。
我:“Marcus,如今是什么状态?”
Marcus:“4头猪、12只鸡、5头奶牛”。
我:“好!”
看到了吗?就这样简单。分布式

为何RPC也不够好?
从逻辑角度来看,为何会更加青睐REST而不是RPC(Remote Procedure Call,远程过程调用 ),由于它极大的下降了咱们沟通的复杂度,经过把表征做为惟一的沟通的方式。无需去讨论过程(添加一头牛?增长一种动物类型?给鸡的数量翻倍仍是卖掉全部猪?)咱们只需讨论表征,而且使用这个表征来达到咱们想要的目标,很简单,不是吗?我不但愿和Marcus的沟通失败,由于咱们彼此的理解过程会不同,因此只须要知道最后的状态就行。但这仅仅是建立RPC会产生许多问题之一。若是你使用RPC,你须要设计一些程序嵌入到某种结构中。这种结构须要存储参数、错误的代码、返回值等。经过URL取代了传递大量参数。spa

四、RPC 

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种经过网络从远程计算机程序上请求服务,而不须要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通讯程序之间携带信息数据。在OSI网络通讯模型中,RPC跨越了传输层应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。如阿里Dubbo框架。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,而后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器得到进程参数,计算结果,发送答复信息,而后等待下一个调用信息,最后,客户端调用进程接收答复信息,得到进程结果,而后调用执行继续进行。操作系统

相关文章
相关标签/搜索