舍我其谁 2020-04-25
引言:这些年,微服务分布式架构大火,但是其中的许多概念提起来就晕的不行,所以,忙里偷闲,趁着大雨滂沱的页。。。
面向服务的架构(SOA,Service-Oriented Architecture)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,
并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、
操作系统和编程语言。这使得构件在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。
WSDL,UDDI和SOAP是SOA基础的基础部件。
WSDL用来描述服务,UDDI用来注册和查找服务,而SOAP,作为传输层,用来在消费者和服务提供者之间传送消息。
SOAP是Web服务的默认机制,其他的技术为可以服务实现其他类型的绑定。一个消费者可以在UDDI注册表(registry)查找服务,取得服务的WSDL描述,然后通过SOAP来调用服务。
微服务架构是一种架构模式,其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是
“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。
远程过程调用协议(RPC,Remote Procedure Call Protocol),我们平时会省略"协议"两个字。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,调用进程发送一个有
进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个
调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用过程接收
答复信息,获得进程结果,然后调用执行继续进行。
Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言
下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。
Web Service本身其实是在实现应用程序间的通信。我们有两种应用程序通信的方法:RPC远程过程调用和消息传递。
使用RPC的时候,客户端的概念是调用服务器上的远程过程,通常方式为实例化一个远程对象并调用其方法和属性。
RPC系统试图达到一种位置上的透明性:服务器暴露出远程对象的接口,而客户端就好像在本地使用的这些对象的接口一样,
这样就隐藏了底层的信息,客户端也就根本不需要知道对象是在哪台机器上。
WebService是一套RPC的规范,也是目前最详细,最完备的服务协议。每个WebService使用SOAP作为RPC的报文,
描述语言作为服务本身的描述,UDDI作为服务的目录发现机制,WS-Transaction保障可以使用事务,WS-*一
系列协议保证了WebService具体强大和规范的功能体系、与其他各类技术的互操作性等等。RPC的两个要点是报文协议和通信协议。
Apache里有两个处理WebService的库,Axis2和CXF。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
dubbo与webservice的区别:
dubbo基于RPC专门给部署使用的框架,一般dubbo不会对外网开放,dubbo只是内网中分布式部署的时候使用的内部服务之间地址的调用关系,因为它本身没有用户身份校验、加密这些东西;
webservice的框架用来提供web服务端点的框架,不是专门给部署使用的,一般是给公网使用的(如:天气预报接口等);
dubbo主要是为了实现分布式部署,而且使用在内网,传输方式和webservice是有区别的,对于dubbo来说,更在意的是效率;
对于webservice来说,是公网访问的,它更在意的是协议的稳定性和安全性;
参考: