您现在的位置是:首页 > 正文

什么是SOA(面向服务的架构)?

2024-04-01 05:59:45阅读 3

 

目录

定义

设计原则

关键技术(四种)

UDDI(Universal DescriptionDiscovery and Integration,统一描述、发现和集成)

WSDL(Web ServiceDescription Language, Web 服务描述语言)

SOAP(Simple ObjectAccess Protocol,简单对象访问协议)

REST(RepresentationalState Transfer,表述性状态转移)

实现方法(三种)

Web Service

企业服务总线(ESB)

服务注册表(service registry)


定义

在这种架构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。服务之间通过交互和协调完成业务的整体逻辑。所有服务通过服务总线或流程管理器来链接。

设计原则

  1. 明确定义的接口。服务定义必须长时间稳定,一旦发布,不能随便更改;服务的定义应尽可能明确,减少请求者的不适当使用。
  2. 自包含和模块化。实现服务的功能实体是完全独立自主的,独立进行部署、版本控制、自我管理和恢复。
  3. 粗粒度。服务数量不应该太多,依靠消息交互而不是远程过程调用,通常消息量比较大,但是服务之间的交互频度较低。
  4. 松耦合。只有服务接口是请求者可见,其位置、实现技术、当前状态和私有数据等对请求者是不可见。
  5. 互操作性、兼容和策略声明

关键技术(四种)

  • UDDIUniversal DescriptionDiscovery and Integration统一描述、发现和集成)

特点:提供一种服务发布、查找和定位的方法,是服务的信息注册规范,以便被需要该服务的用户发现和使用它。

包含以下三个部分内容:

  1. 数据模型:用户描述业务组织和服务的XML Schema。
  2. API:用于查找或发布UDDI数据的方法,API基于SOAP。
  3. 注册服务:是SOA中的一种基础设施,对应于服务注册中心的角色。

 

  • WSDLWeb ServiceDescription LanguageWeb 服务描述语言)

特点:是对服务进行描述的语言,有一套基于XML的语法定义。WSDL描述的重点是服务,包含服务实现定义和服务接口定义。

服务实现定义:描述了给定服务提供者如何实现特定的服务接口。

服务接口定义:是一种抽象的、可重用的定义;行业标准组织可以使用这种抽象的定义来规定一些标准的服务类型,服务实现者可以根据这些标准定义来实现具体服务。

 

  • SOAPSimple ObjectAccess Protocol,简单对象访问协议)

特点:定义了服务者和服务提供者之间的消息传输规范,用XML来格式化消息,用HTTP来承载消息。

SOAP整体包含以下四个部分内容

  1. 封装:定义了一个整体框架,用来表示消息中包含什么内容,谁来处理这些内容,以及这些内容是可选的还是必需的。
  2. 编码规则:定义了一种序列号的机制,用于交换系统所定义的数据类型的实例。
  3. RPC表示:定义了一个用来表示远程过程调用和应答的协议。
  4. 绑定:定义了一个使用底层传输协议来完成在节点之间交换SOAP封装的约定。

SOAP消息包括以下三个部分:

  1. 封装(信封):Envelope,SOAP消息中的顶层元素。
  2. SOAP头:Header,提供了向SOAP消息中添加关于这条SOAP消息的某些要素机制。在SOAP消息中可能出现,也可能不出现。
  3. SOAP体:Body,包含消息的最终接收者想要的信息的容器。

 

  • RESTRepresentationalState Transfer,表述性状态转移

特点:一种只使用HTTP和XML进行基于web通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。REST 从根本上来说只支持几个操
作(
POSTGETPUT DELETE),这些操作适用于所有的消息。

设计概念和准则:

  1. 网络上的所有事物都被抽象为资源。
  2. 每个资源对应一个唯一的资源标识。
  3. 通过通用的连接件接口对资源进行操作。
  4. 对资源的各种操作不会改变资源标识。
  5. 所有操作都是无状态的。

 

实现方法(三种)

  • Web Service

包含以下三种角色

  1. 服务提供者:服务的所有者,负责定义并实现服务。
  2. 服务请求者:服务的使用者,是查找、绑定并调用服务,或与服务进行交互的应用程序。
  3. 服务注册中心:是连接服务提供者和服务请求者的纽带。

操作包括:发布、查找、绑定

层次包括:底层传输层、服务通信协议层、服务描述层、服务层、业务流程层和服务注册层。

 

  • 企业服务总线(ESB)

特点:是一种为进行连接服务的标准化的通信基础结构,基于开放的标准,为应用提供一个可靠的、可度量的和高度安全的环境,帮助企业对每个业务流程实施控制和跟踪、分析并改造流程和性能。

.优点:扩展的、基于标准的连接。

 

  • 服务注册表(service registry)

特点:提供一个策略执行点,使服务可以在SOA中注册,从而被发现和使用。

支持包括:服务注册、服务位置、服务绑定功能。

网站文章

  • nginx 添加http_ssl_module模块

    1.进入源文件目录cd /usr/local/src/nginx-1.8.02.编译安装nginx时,已安装模块[root@lamb ~]# /usr/local/nginx/sbin/nginx -Vnginx version: nginx/1.8.0built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) built with Op...

    2024-04-01 05:59:37
  • 页面布局——三栏布局、圣杯和双飞翼布局

    页面布局——三栏布局、圣杯和双飞翼布局

    圣杯布局来自于文章In Search of the Holy Grail,双飞翼布局源于淘宝的UED。 圣杯和双飞翼布局是同一种布局的不同实现方式,实现的都是三栏布局、两边盒子宽度固定、中间盒子自适应...

    2024-04-01 05:59:29
  • php构造函数返回,php:构造函数可以返回值吗?

    php:构造函数可以返回值吗?class a{function construct(){return 'abc';}}可以吗?貌似是不行的吧、、、忘记了,没怎么主意这个你可以这么写,但new后得到的仍...

    2024-04-01 05:59:00
  • Windows常见的数据缓存介绍及清除办法

    Windows常见的数据缓存介绍及清除办法

    然而,随着时间的推移,这些缓存可能会占用大量的磁盘空间,影响系统的运行速度。本文将介绍Windows常见的数据缓存类型,并提供清除缓存的方法。请注意,在执行任何清除操作之前,建议您备份重要的数据,并确...

    2024-04-01 05:58:54
  • 神级编辑器统一表格与Python,向Excel说再见!

    神级编辑器统一表格与Python,向Excel说再见!

    很多开发者说自从有了 Python/Pandas,Excel 都不怎么用了,用它来处理与可视化表格非常快速。但是这样还是有一大缺陷,操作不是可视化的表格,因此对技能要求更高一点。近日,开发者构建了名为...

    2024-04-01 05:58:46
  • STL之vector模拟实现

    vector的中文意思是向量,他可以容纳很多类型的数据,因此vector也被称为容器。看到前面的解释可能你一脸蒙逼,下面我给出两种简单的理解。可以把vector理解为是一个可以动态增长的数组,一个数组...

    2024-04-01 05:58:10
  • node.js连接MongoDB数据库,db.collection is not a function完美解决

    node.js连接MongoDB数据库,db.collection is not a function完美解决

    解决方法一、 mongodb数据库版本回退: 这个错误是出在mongodb的库中,在nodejs里的写法和命令行中的写法不一样,3.0的api已经更新和以前的版本不不一样,我们在npm中没指定版本号的安装就默认安装的是3.0版本。 可以参考3.0的api文档:http://mongodb.github.io/node-mongodb-native/3.0/api/ 在项目中找到packag...

    2024-04-01 05:58:02
  • JS中第三方库

    网站:https://www.bootcdn.cn库:moment.js 日期处理类的库(体积较大) day.js处理日期的(体积较小)

    2024-04-01 05:57:18
  • 【java学习】进程、线程、程序

    【java学习】进程、线程、程序

    1,概念 (1)分类 ①守护线程(Daemon Thread) 用户线程可以通过System.exit(status)(status为0时表示正常退出,非0表示非正常退出)来退出JVM。 父线程是守护线程子线程默认为守护线程,父线程是用户线程子线程默认为用户线程。父线程在创建子线程后,启动子线程之前,可以调用Thread实例的setDaemon方法来修改线程属性。 当没有用户线程...

    2024-04-01 05:57:12
  • php程序怎么导入数据库,php 简单数据库导入程序[.sql文件]

    php 简单数据库导入程序[.sql文件]function insert_file($file,$replace=''){global $Charset;$readfiles=read...

    2024-04-01 05:57:03