将程序的不同功能单元(称为服务),通过这些服务间订立接口规范联系起来,服务与平台无关、与语言无关、与操作系统无关。
项目比较小时,一个系统就能满足需求;
随着项目越来越复杂,我们将进行库拆分、功能拆分,各服务间通过接口相互调交互;但随着子模块越来越多,调用也变的凌乱,难管理。
使用SOA架构,也叫服务治理,SOA帮我们把服务间乱七八糟的关系治理起来,将服务之间进行的交互,变为服务只与数据总线进行交互。
数据总线起到调度服务的作用,数据总线不是集成服务,更像是一个调度框架;
目前应用数据总线的有阿里的dubbo,还有zookeeper,以及Spring Cloud的Eureka;
低耦合性; 与平台无关,减少业务应用的限制;
只要是平台独立、无关语言、无关操作系统,基于xml做为数据交换格式的程序都为WebService;
简单来说:SOAP=HTTP+XML,HTTP是基于TCP的超文本传送协议
实现WebService三要素:
Simple Object Access Protocol:简单对象访问协议,SOAP是交换数据的一种协议规范,是一种轻量的、简单的、基于XML的协议;
也就是描述如何访问具体的接口
用来管理,分发,查询webService
Remote Procedure Call Protocol,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
java能够使用的远程调用技术:
RPC模型适用场景远程方法调用RMI不考虑网络限制时(如防火墙),访问/发布基于java的服务Hessian 或 Burlap考虑网络限制时,通过http访问/发布基于java的服务。Hessian是二进制协议,Burlap是基于XML的HTTP invoker考虑网络限制时,希望适用基于xml或专有的序列化机制实现java序列化时,访问/发布基于spring的服务JAX-RPC JAX-WS访问/发布平台独立的、基于soap的web服务RMI是Java最初的远程方法调用技术。 RMI很难穿越防火墙。因为RMI使用任意端口来交互——这是防火墙通常所不允许的。 RMI是基于JAVA的,使用了JAVA的序列化机制,所以通过网络传输的对象类型必须要保证在调用两端的Java运行时中是完全相同的版本。所以就意味着客户端和服务端都必须使用JAVA来开发才行。
REST全称:Representational State Transfer。Rest不是协议也不是规范,而是一种接口、服务、系统之间通讯的风格;
REST可以用来替代传统的SOAP Web服务。SOAP一般会关注行为和处理(比如RMI,Hessian,Spring的HttpInvoker,jaw-xs,知名的XFile(新的如CXF)、Axis1、Axis2 等等),而REST关注的是要处理的数据;
REST与RPC几乎没有任何关系。RPC是面向服务的,并关注于行为和动作;而REST是面向资源的,强调描述应用程序的事物和名词。REST就是将资源的状态以最适合客户端或服务端的形式从服务器端转移到客户端(或者反过来);
在REST中,资源通过URL进行识别和定位;
下面展示一些 内联代码片。
A:1个苹果,2个香蕉,REST API B:客户端 B:当前状态 A:回答,1个苹果,2个香蕉 B:请加2个苹果 A:无法响应,此非REST方式,而是PRC B:3个苹果,2个香蕉 A:ok B:当前状态 A:3个苹果,2个香蕉 REST 更优于 RPC,无需关注过程,降低沟通复杂度。SOA和微服务架构都是一种架构方式,不依赖于任何技术,SOAP、RPC、REST是对SOA和微服务架构的组件或服务之间通信方式的不同实现
out of memory:内存不足
java:是一种语言; j2ee是一个平台,是一堆技术体的总称; 具体分为三个版本(方向): J2SE(客户端开发); J2EE(Web方面的开发); J2ME(手持设备的开发)
j2ee是另一大平台,也包含了se的内,依赖se;(包名为java.x) j2ee提供了一些,在做bs软件时,所遇到各种问题的解决方案; j2ee版本号与jdk版本切勿弄混; 比如:jdbc是j2ee下面的原生访问数据库解决方案(API),但比较难用,现在经常用mybatis j2ee是一套标准,其它第三方开源框架 也是取其精华 舍其不足;学习高级的开源项目,j2ee基础也是必不可少的; j2ee下有多种技术方案:如JDBC、jsp等;